\chapter{二维数据——图像与视觉} 本篇聚焦二维数据的智能处理。图像是最常见的二维数据形式,也是设计领域最核心的信息载体。本篇将追溯从卷积神经网络到视觉Transformer、再到大视觉模型的技术演进脉络,帮助读者理解计算机视觉技术的发展全貌及其在设计领域的广泛应用。 \section{篇章导读} 人类感知世界,约80\%的信息来自视觉。对于设计师而言,图像不仅是设计成果的呈现形式,更是灵感来源、分析对象和沟通媒介。 本章将沿着一条清晰的技术演进主线展开:\textbf{从小模型时代(CNN)到大模型时代(Vision Transformer),再到多模态大视觉模型}。我们将看到,计算机视觉如何从''识别图片中的猫''一步步发展到''理解任意场景中的任意内容'',以及这些技术如何赋能建筑识别、街景分析、设计素材管理等设计实践。 通过本章学习,你将: \begin{itemize} \tightlist \item 理解卷积神经网络(CNN)的核心原理与经典架构 \item 掌握目标检测、语义分割等核心视觉任务的原理与方法 \item 了解Vision Transformer如何颠覆CNN的统治地位 \item 认识CLIP、SAM等大视觉模型带来的范式变革 \item 将上述技术思维应用于设计场景分析 \end{itemize} \section{卷积神经网络} \subsection{为什么不用MLP处理图像} 在第2章中,我们学习了多层感知机(MLP)。一个自然的问题是:\textbf{能否直接用MLP处理图像?} 假设输入一张 224×224 的RGB图像。如果将其展平为向量,输入维度为: \begin{lstlisting} 224 × 224 × 3 = 150,528 \end{lstlisting} 若第一个隐藏层有1024个神经元,则该层的参数量为: \begin{lstlisting} 150,528 × 1024 + 1024(偏置) ≈ 1.54亿 \end{lstlisting} \textbf{仅仅一层就有1.54亿参数!} 而一个实用的网络通常需要多个隐藏层。这意味着: \begin{itemize} \tightlist \item \textbf{参数爆炸}:模型过于庞大,训练困难,极易过拟合 \item \textbf{忽略空间结构}:展平操作破坏了像素之间的二维空间关系,而图像的语义恰恰蕴含在空间结构中 \item \textbf{平移敏感性}:同一物体出现在图像不同位置时,MLP的响应完全不同 \end{itemize} 因此,我们需要一种专为二维数据设计的网络架构——\textbf{卷积神经网络(Convolutional Neural Network, CNN)}。 \subsection{CNN的三大核心思想} CNN通过三个关键设计解决了MLP的上述缺陷: {\def\LTcaptype{none} % do not increment counter \begin{longtable}[]{@{}lll@{}} \toprule\noalign{} 核心思想 & 含义 & 解决的问题 \\ \midrule\noalign{} \endhead \bottomrule\noalign{} \endlastfoot 局部连接 & 每个神经元只关注局部区域 & 大幅减少参数量 \\ 权重共享 & 同一卷积核在整张图上滑动 & 平移等变性 \\ 层级特征 & 逐层提取从简单到复杂的特征 & 自动学习特征层级 \\ \end{longtable} } \textbf{直觉理解}:人在识别一张建筑照片时,不会同时关注所有像素,而是先看局部特征(窗户、门、柱子),再组合成整体判断。CNN正是模拟了这种''从局部到整体''的视觉处理方式。 \subsection{卷积操作} 卷积操作是CNN的核心。它通过一个小的\textbf{卷积核(Kernel/Filter)}在输入图像上滑动,逐区域计算加权和,提取局部特征。 \textbf{单通道卷积示意}: \begin{lstlisting} 输入图像 (5×5) 卷积核 (3×3) 输出特征图 (3×3) ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┐ │ 1 │ 0 │ 1 │ 0 │ 1 │ │ 1 │ 0 │-1 │ │ 2 │ 0 │ 1 │ ├───┼───┼───┼───┼───┤ ├───┼───┼───┤ ├───┼───┼───┤ │ 0 │ 1 │ 0 │ 1 │ 0 │ │ 1 │ 0 │-1 │ │ 1 │ 3 │ 2 │ ├───┼───┼───┼───┼───┤ ├───┼───┼───┤ ├───┼───┼───┤ │ 1 │ 0 │ 1 │ 0 │ 1 │ │ 1 │ 0 │-1 │ │ 2 │ 0 │ 1 │ ├───┼───┼───┼───┼───┤ └───┴───┴───┘ └───┴───┴───┘ │ 0 │ 1 │ 0 │ 1 │ 0 │ ├───┼───┼───┼───┼───┤ │ 1 │ 0 │ 1 │ 0 │ 1 │ └───┴───┴───┴───┴───┘ \end{lstlisting} 计算过程(左上角第一个输出值): \begin{lstlisting} (1×1 + 0×0 + 1×(-1)) + (0×1 + 1×0 + 0×(-1)) + (1×1 + 0×0 + 1×(-1)) = 1 + 0 - 1 + 0 + 0 + 0 + 1 + 0 - 1 = 0 加上偏置后得到输出值 \end{lstlisting} \textbf{多通道卷积}:实际图像通常是RGB三通道。卷积核也需要匹配输入通道数。例如,输入为3通道时,一个 3×3 卷积核的实际尺寸为 3×3×3,对三个通道分别计算后求和,产生一个输出通道。使用多个卷积核即可产生多个输出通道。 \begin{lstlisting} RGB输入 (H×W×3) 多个卷积核 输出特征图 ┌─────────────┐ ┌──────────┐ ┌──────────┐ │ R通道 │ │核1: 3×3×3│──→ 通道1 │ │ │ G通道 │ × │核2: 3×3×3│──→ 通道2 │ H'×W'×K │ │ B通道 │ │ ... │ │ │ └─────────────┘ │核K: 3×3×3│──→ 通道K │ │ └──────────┘ └──────────┘ K个卷积核 \end{lstlisting} \textbf{卷积的关键参数}: {\def\LTcaptype{none} % do not increment counter \begin{longtable}[]{@{}lll@{}} \toprule\noalign{} 参数 & 含义 & 典型值 \\ \midrule\noalign{} \endhead \bottomrule\noalign{} \endlastfoot 卷积核大小 & 每次看到的局部区域大小 & 3×3, 5×5 \\ 步长(Stride) & 卷积核每次移动的像素数 & 1, 2 \\ 填充(Padding) & 在输入边缘补零 & 0, 1 \\ 输出通道数 & 使用的卷积核数量 & 64, 128, 256 \\ \end{longtable} } \subsection{激活函数:ReLU} 卷积操作是线性的,如果不引入非线性变换,无论堆叠多少层卷积,最终等价于一个线性变换。因此需要在卷积后添加\textbf{激活函数}。 CNN中最常用的激活函数是 \textbf{ReLU(Rectified Linear Unit)}: \begin{lstlisting} ReLU(x) = max(0, x) 输出 │ / │ / │ / │ / ─────┼───── 输入 │ │ \end{lstlisting} ReLU的优势: \begin{itemize} \tightlist \item \textbf{计算简单}:只需判断正负,比Sigmoid和Tanh快得多 \item \textbf{缓解梯度消失}:正区间梯度恒为1,反向传播时信号不会衰减 \item \textbf{稀疏激活}:负值被置零,使网络天然具有稀疏性 \end{itemize} \subsection{池化操作} 池化(Pooling)操作的作用是降低特征图的空间尺寸,减少参数量和计算量,同时增强特征的平移不变性。 \textbf{最大池化(Max Pooling)示意}: \begin{lstlisting} 输入特征图 (4×4) 2×2 最大池化 输出 (2×2) ┌───┬───┬───┬───┐ 步长=2 ┌───┬───┐ │ 1 │ 3 │ 2 │ 1 │ │ 6 │ 8 │ ├───┼───┼───┼───┤ ┌───┬───┐ ├───┼───┤ │ 5 │ 6 │ 7 │ 4 │ │max│max│ │ 9 │12 │ ├───┼───┼───┼───┤ └───┴───┘ └───┴───┘ │ 3 │ 2 │ 1 │ 8 │ max(1,3,5,6)=6 ├───┼───┼───┼───┤ max(2,1,7,4)=7→8修正 6, 8 │ 4 │ 9 │ 3 │12 │ max(3,2,4,9)=9 9, 12 └───┴───┴───┴───┘ max(1,8,3,12)=12 \end{lstlisting} 池化的效果: \begin{itemize} \tightlist \item \textbf{降维}:特征图尺寸减半,计算量减少为1/4 \item \textbf{平移不变性}:局部区域内的微小位移不影响最大值 \item \textbf{保留主要特征}:最大池化保留了最显著的特征响应 \end{itemize} \subsection{经典架构演进} CNN架构在过去二十多年中经历了显著的演进: \begin{lstlisting} LeNet (1998) AlexNet (2012) VGG (2014) ResNet (2015) 手写数字识别 图像分类突破 结构简洁优雅 解决退化问题 6万参数 6000万参数 1.38亿参数 深度可达152层+ │ │ │ │ ▼ ▼ ▼ ▼ 卷积→池化→ 更深更宽+ 小卷积核 残差连接 卷积→池化→ Dropout+ 堆叠(3×3) F(x)+x 全连接 数据增强 统一规范 \end{lstlisting} \textbf{架构时间线与关键创新}: {\def\LTcaptype{none} % do not increment counter \begin{longtable}[]{@{} >{\raggedright\arraybackslash}p{(\linewidth - 8\tabcolsep) * \real{0.1765}} >{\raggedright\arraybackslash}p{(\linewidth - 8\tabcolsep) * \real{0.1765}} >{\raggedright\arraybackslash}p{(\linewidth - 8\tabcolsep) * \real{0.1765}} >{\raggedright\arraybackslash}p{(\linewidth - 8\tabcolsep) * \real{0.2941}} >{\raggedright\arraybackslash}p{(\linewidth - 8\tabcolsep) * \real{0.1765}}@{}} \toprule\noalign{} \begin{minipage}[b]{\linewidth}\raggedright 架构 \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright 年份 \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright 深度 \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright 关键创新 \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright 意义 \end{minipage} \\ \midrule\noalign{} \endhead \bottomrule\noalign{} \endlastfoot LeNet-5 & 1998 & 5层 & 首个成功的CNN & 手写数字识别,邮局实用 \\ AlexNet & 2012 & 8层 & ReLU、Dropout、GPU训练 & ImageNet竞赛冠军,深度学习复兴 \\ VGGNet & 2014 & 16-19层 & 3×3小卷积核堆叠 & 证明''更深=更好''的简洁设计 \\ ResNet & 2015 & 152层+ & 残差连接(Skip Connection) & 突破深度瓶颈,可训练极深网络 \\ \end{longtable} } \subsection{ResNet的残差连接:突破深度瓶颈} 随着网络加深,出现了一个反直觉的现象:\textbf{网络越深,训练误差反而越大}。这不是过拟合(训练集误差也增大),而是\textbf{退化问题(Degradation Problem)}——深层网络难以优化。 ResNet的核心创新是\textbf{残差连接(Residual Connection)}: \begin{lstlisting} 输入 x │ │ ┌──────────────────┐ │ │ │ └────────→│ 恒等映射(跳过) │ │ │ ┌─────────┴────────┐ │ │ 残差块 F(x) │ │ │ (两层卷积+ReLU) │ │ └─────────┬────────┘ │ │ │ ▼ ▼ ⊕ ← ← ← ← ← ← ← ← ┘ │ ▼ 输出 = F(x) + x \end{lstlisting} 核心公式: \begin{lstlisting} 输出 = F(x) + x \end{lstlisting} 其中 F(x) 是残差映射,x 是恒等映射(直接传递)。 \textbf{为什么有效?} \begin{itemize} \tightlist \item 如果最优解接近恒等映射,网络只需学习残差 F(x) ≈ 0,比从零学习 x 容易得多 \item 梯度可以直接通过跳跃连接回传,缓解梯度消失 \item 使得训练上百层甚至上千层的网络成为可能 \end{itemize} \begin{quote} \textbf{设计思维链接}:残差连接的思想类似于设计中的''增量修改''——在保留原有方案(x)的基础上进行改进(F(x)),而非推倒重来。这种''在已有基础上做调整''的策略,在参数空间中比''从零开始学习''高效得多。 \end{quote} \section{目标检测} \subsection{从分类到检测} 图像分类回答的问题是''这是什么'',而目标检测需要同时回答两个问题: \begin{lstlisting} 分类: "这是一张建筑的照片" → what 检测: "左上角有一栋现代建筑, → what + where 右下角有一棵树, 中间有一条道路" \end{lstlisting} 目标检测的输出是若干\textbf{边界框(Bounding Box)}及其对应的类别和置信度: \begin{lstlisting} ┌─────────────────────────────┐ │ ┌──────────┐ │ │ │ 建筑 0.95│ │ │ └──────────┘ │ │ ┌─────────┐ │ │ │ 汽车 │ │ │ │ 0.87 │ │ │ └─────────┘ │ │ ┌────┐ │ │ │树木│ ┌──────┐ │ │ │0.92│ │ 行人 │ │ │ └────┘ │ 0.78 │ │ │ └──────┘ │ └─────────────────────────────┘ \end{lstlisting} \subsection{两阶段检测器} 两阶段方法的思路是''先找候选区域,再分类判别'',精度高但速度较慢。 \textbf{演进路线}: \begin{lstlisting} R-CNN (2014) Fast R-CNN (2015) Faster R-CNN (2015) │ │ │ ▼ ▼ ▼ 选择性搜索 选择性搜索 区域建议网络 找2000个候选框 找2000个候选框 (RPN) 自动生成 │ │ │ ▼ ▼ ▼ 逐个裁剪送入CNN 整图送入CNN 整图送入CNN 2000次前向传播 共享特征图 共享特征图 │ │ │ ▼ ▼ ▼ SVM分类 ROI Pooling ROI Pooling 边框回归 全连接层分类 全连接层分类 边框回归 边框回归 速度:极慢 速度:较快 速度:实时级 精度:一般 精度:较高 精度:高 \end{lstlisting} \subsection{单阶段检测器:YOLO系列} YOLO(You Only Look Once)的核心思想是:\textbf{一次前向传播同时完成定位和分类},将检测问题转化为回归问题。 \textbf{YOLO工作原理}: \begin{lstlisting} 输入图像 划分网格 (S×S) 每个网格预测 ┌─────────────┐ ┌───┬───┬───┐ ┌─────────┐ │ │ │ │ │ │ │B个边界框 │ │ 目标1 │ → ├───┼───┼───┤ → │(x,y,w,h)│ │ 目标2│ │ │ │ │ │+ 置信度 │ │ │ ├───┼───┼───┤ │+ 类别概率│ └─────────────┘ │ │ │ │ └─────────┘ └───┴───┴───┘ \end{lstlisting} \textbf{YOLO系列演进}: {\def\LTcaptype{none} % do not increment counter \begin{longtable}[]{@{} >{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.2143}} >{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.2143}} >{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.3571}} >{\raggedright\arraybackslash}p{(\linewidth - 6\tabcolsep) * \real{0.2143}}@{}} \toprule\noalign{} \begin{minipage}[b]{\linewidth}\raggedright 版本 \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright 年份 \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright 关键改进 \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright 特点 \end{minipage} \\ \midrule\noalign{} \endhead \bottomrule\noalign{} \endlastfoot YOLOv1 & 2016 & 划分网格,统一回归 & 开创单阶段检测,速度快但精度有限 \\ YOLOv2 & 2017 & Batch Normalization、锚框 & 引入锚框提升召回率 \\ YOLOv3 & 2018 & 多尺度预测(FPN) & 三种尺度检测,小目标能力提升 \\ YOLOv4 & 2020 & CSPNet、Mosaic增强 & 训练技巧系统化集成 \\ YOLOv5 & 2020 & Ultralytics实现 & 工程化、易用性、部署友好 \\ YOLOv8 & 2023 & Anchor-free、解耦头 & 检测+分割统一框架,当前主流 \\ \end{longtable} } \textbf{两阶段 vs 单阶段对比}: {\def\LTcaptype{none} % do not increment counter \begin{longtable}[]{@{}lll@{}} \toprule\noalign{} 维度 & 两阶段(Faster R-CNN) & 单阶段(YOLO) \\ \midrule\noalign{} \endhead \bottomrule\noalign{} \endlastfoot 速度 & 较慢(5-10 FPS) & 快(30-160 FPS) \\ 精度 & 高(适合小目标) & 较高(持续提升中) \\ 流程 & 先候选框→再分类 & 端到端回归 \\ 适用场景 & 精度优先 & 实时应用 \\ \end{longtable} } \subsection{评价指标} \textbf{IoU(Intersection over Union)}:衡量预测框与真实框的重合程度。 \begin{lstlisting} 预测框 ┌───────────┐ │ ┌──────┼────────┐ │ 交集区域 │ │ ← 真实框 │ │ │ │ └────┼──────┘ │ └───────────────┘ IoU = 交集面积 / 并集面积 IoU = 1 表示完全重合 IoU = 0 表示完全不相交 通常 IoU ≥ 0.5 视为检测正确 \end{lstlisting} \textbf{mAP(mean Average Precision)}:各类别AP的平均值,是检测任务的综合评价指标。COCO数据集采用 mAP@0.5:0.95(IoU阈值从0.5到0.95的平均值)作为标准指标。 \subsection{设计应用} 目标检测在设计领域有广泛应用: \begin{itemize} \tightlist \item \textbf{建筑识别}:从街景或卫星图像中自动检测建筑类型、风格特征 \item \textbf{场景分析}:识别城市空间中的元素(道路、绿化、设施),支持设计决策 \item \textbf{遗产保护}:自动检测历史建筑构件,辅助数字化记录与保护规划 \item \textbf{设计素材管理}:自动标注图片素材中的物体类型,实现智能检索 \end{itemize} \section{语义分割} \subsection{像素级分类} 如果说图像分类是对整张图给出一个标签,目标检测是给每个物体画一个框,那么\textbf{语义分割(Semantic Segmentation)}则是对每个像素给出一个类别标签——它是像素级别的分类任务。 \begin{lstlisting} 图像分类 目标检测 语义分割 ┌───────┐ ┌───────┐ ┌───────┐ │ │ │ ┌───┐ │ │AAAAA │ │ 猫 │ │ │猫 │ │ │AA┌──┐A│ │ │ │ └───┘ │ │──│猫│─│ └───────┘ │ ┌──┐│ │BB│ │B│ "猫" │ │狗││ │BB└──┘B│ └───┴──┘┘ └───────┘ 猫+狗的位置 每个像素的类别 A=背景 B=地面 猫/狗=对应类别 \end{lstlisting} \subsection{全卷积网络(FCN)} FCN(Fully Convolutional Network, 2015)是语义分割的开创性工作,其核心思想是:\textbf{将分类网络中的全连接层替换为卷积层},使网络可以接受任意尺寸的输入,并输出与输入空间对应的分割图。 \begin{lstlisting} 编码器(下采样) 解码器(上采样) ┌────────┐ ┌────────┐ │ 卷积+池化│ → 1/2 →│ 上采样 │ → 2倍 │ 卷积+池化│ → 1/4 →│ 上采样 │ → 4倍 │ 卷积+池化│ → 1/8 →│ 上采样 │ → 8倍 │ 卷积+池化│ → 1/16 →│ 上采样 │ → 16倍 └────────┘ └────────┘ 提取高级语义 恢复空间分辨率 分辨率逐步降低 分辨率逐步恢复 \end{lstlisting} \subsection{U-Net:编码器-解码器与跳跃连接} U-Net(2015)最初为医学图像分割设计,其对称的编码器-解码器结构和\textbf{跳跃连接(Skip Connection)}使其成为分割领域的经典架构。 \begin{lstlisting} U-Net 结构示意 编码器(收缩路径) 解码器(扩展路径) 输入 ──→ [ conv×2 ] ────────────────────→ [ conv×2 ] ──→ 输出 │ 64 │ 64 ↓ pool upsample ↑ [ conv×2 ] ────────────────────→ [ conv×2 ] │ 128 │ 128 ↓ pool upsample ↑ [ conv×2 ] ────────────────────→ [ conv×2 ] │ 256 │ 256 ↓ pool upsample ↑ [ conv×2 ] ────────────────────→ [ conv×2 ] │ 512 │ 512 ↓ pool upsample ↑ [ conv×2 ] ← 底部(瓶颈层) → [ conv×2 ] │ 1024 \end{lstlisting} \textbf{跳跃连接的作用}:编码器中的浅层特征保留了丰富的空间细节信息(如边缘、位置),而深层特征包含高级语义信息。跳跃连接将两者结合,使分割结果既有准确的语义判别,又有精细的空间边界。 \subsection{DeepLab系列} DeepLab由Google团队提出,其核心创新是\textbf{空洞卷积(Atrous Convolution)}和\textbf{ASPP(Atrous Spatial Pyramid Pooling)}。 \textbf{空洞卷积}:在不增加参数量和计算量的前提下扩大感受野。 \begin{lstlisting} 标准 3×3 卷积 空洞率=2 的 3×3 卷积 ┌───┬───┬───┐ ┌───┬───┬───┬───┬───┐ │ * │ * │ * │ │ * │ │ * │ │ * │ ├───┼───┼───┤ ├───┼───┼───┼───┼───┤ │ * │ * │ * │ │ │ │ │ │ │ ├───┼───┼───┤ ├───┼───┼───┼───┼───┤ │ * │ * │ * │ │ * │ │ * │ │ * │ └───┴───┴───┘ ├───┼───┼───┼───┼───┤ │ │ │ │ │ │ 感受野: 3×3 ├───┼───┼───┼───┼───┤ │ * │ │ * │ │ * │ └───┴───┴───┴───┴───┘ 感受野: 5×5(不增加参数) \end{lstlisting} \textbf{ASPP}:使用多个不同空洞率的卷积并行提取多尺度上下文信息。 \subsection{语义分割 vs 实例分割} \begin{lstlisting} 语义分割 实例分割 ┌───────────────┐ ┌───────────────┐ │AAA BBB AAA │ │A1 B1 A2 │ │AAA BBB AAA │ │A1 B1 A2 │ │AAA BBB AAA │ │A1 B1 A2 │ │ CCC BBB │ │ C1 B2 │ └───────────────┘ └───────────────┘ 每个像素标记类别 区分同类的不同实例 不区分个体 A1≠A2, B1≠B2 例:所有建筑标为同一类 例:每栋建筑单独标记 \end{lstlisting} 此外还有\textbf{全景分割(Panoptic Segmentation)},结合了语义分割和实例分割的优点,对背景类进行像素级分类,对前景类进行实例级区分。 \subsection{设计应用} \begin{itemize} \tightlist \item \textbf{用地分类}:从卫星遥感图像中分割住宅、商业、绿地、水体等用地类型,支持城市规划分析 \item \textbf{城市形态分析}:量化建筑密度、街道宽度、开放空间比例等空间指标 \item \textbf{绿视率计算}:从街景图像中分割绿色植被区域,计算视野中绿化覆盖比例,评估街道空间品质 \item \textbf{天空开敞度}:分割天空区域,分析街道峡谷的天空可见比例 \end{itemize} \section{视觉Transformer} \subsection{ViT:Transformer进入视觉} 2020年,Google团队提出了 \textbf{ViT(Vision Transformer)},首次证明纯Transformer架构可以在图像任务上达到甚至超越CNN的性能,开启了视觉领域的Transformer时代。 \textbf{ViT的核心思路}:将图像切割为固定大小的图块(Patch),将每个图块视为一个''词''(Token),然后送入标准Transformer编码器处理。 \begin{lstlisting} 输入图像 (224×224×3) 切分为图块 线性嵌入 ┌───┬───┬───┬───┬───┬───┐ 每个 16×16 每个 patch 展平 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ → 14×14=196 → 768维向量 ├───┼───┼───┼───┼───┼───┤ 个 patches │ 7 │ 8 │ 9 │10 │11 │12 │ ├───┼───┼───┼───┼───┼───┤ │ │...│...│...│...│...│...│ ▼ └───┴───┴───┴───┴───┴───┘ 加入位置编码 (告知空间位置) │ ▼ ┌──────────────────┐ │ Transformer 编码器 │ │ (多层自注意力 + │ │ 前馈网络) │ └──────────────────┘ │ ▼ 分类头 → 类别预测 \end{lstlisting} \textbf{ViT的处理流程}: \begin{enumerate} \def\labelenumi{\arabic{enumi}.} \tightlist \item \textbf{图块切分}:将图像切分为 N 个固定大小的 patch(如 16×16),共 196 个 \item \textbf{线性嵌入}:每个 patch 展平后通过线性映射转换为 D 维向量 \item \textbf{位置编码}:为每个 patch 向量加入可学习的位置信息 \item \textbf{分类 Token}:在序列开头加入一个特殊的 {[}CLS{]} token,用于汇总全局信息 \item \textbf{Transformer 编码器}:多层自注意力 + MLP,处理 patch 序列 \item \textbf{分类输出}:取 {[}CLS{]} token 的输出进行分类 \end{enumerate} \subsection{为什么ViT有效:全局注意力 vs 局部卷积} CNN和ViT处理图像的方式有本质区别: \begin{lstlisting} 卷积(局部连接) 自注意力(全局连接) ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ │ │ │ │ │ │ │↔↔│↔↔│↔↏│↔↏│↔↏│ ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ │ │[k]│ │ │ │ │↔↏│↔↏│↔↏│↔↏│↔↏│ ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ │ │ │ │ │ │ │↔↏│↔↏│↔↏│↔↏│↔↏│ └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ 只看3×3邻域 每个位置关注所有位置 感受野受限于层数 第一层就有全局视野 \end{lstlisting} {\def\LTcaptype{none} % do not increment counter \begin{longtable}[]{@{}lll@{}} \toprule\noalign{} 维度 & CNN & ViT \\ \midrule\noalign{} \endhead \bottomrule\noalign{} \endlastfoot 感受野 & 受限于卷积核大小和层数 & 第一层即全局感受野 \\ 归纳偏置 & 强(局部性、平移等变性) & 弱(几乎不做假设) \\ 数据需求 & 较少(归纳偏置提供先验) & 较多(需从数据中学习规律) \\ 计算量 & 与分辨率线性相关 & 与patch数二次相关 \\ 远程依赖 & 需要深层堆叠 & 天然建模全局关系 \\ 最适合场景 & 中小规模数据集 & 大规模数据集 \\ \end{longtable} } \textbf{关键洞察}:CNN通过归纳偏置(局部性假设)在小数据上表现好,但在大数据上,ViT的弱归纳偏置反而成为优势——它可以从海量数据中学到更灵活、更强大的特征表示。 \subsection{Swin Transformer}\label{swin-transformer} 标准ViT的全局注意力计算量与图像大小呈二次关系,难以处理高分辨率图像。\textbf{Swin Transformer(2021)}通过\textbf{层级结构}和\textbf{移位窗口注意力}解决了这一问题。 \begin{lstlisting} 标准ViT(单一分辨率) Swin Transformer(层级结构) Patch Size: 16×16 Stage 1: 4×4 patch → 高分辨率 ↓ Patch Merging ┌─────────────┐ Stage 2: 8×8 patch → 中分辨率 │ 全局注意力 │ ↓ Patch Merging │ 所有patch │ Stage 3: 16×16 patch → 低分辨率 │ 互相通信 │ ↓ Patch Merging └─────────────┘ Stage 4: 32×32 patch → 最低分辨率 计算量: O(N²) 窗口内注意力 → 计算量: O(N) \end{lstlisting} \textbf{移位窗口(Shifted Window)}机制: \begin{lstlisting} 常规窗口划分 移位窗口划分 ┌───┬───┬───┬───┐ ┌─┬─────┬─────┬─┐ │ W1│ W1│ W2│ W2│ │ │ W1 │ W2 │ │ ├───┤ ├───┤ │ ├─┤ ├─────┤ │ │ │ │ │ │ │W5│ │ │W6 ├───┼───┼───┼───┤ ├──┤─────┤─────┤─┤ │ W3│ W3│ W4│ W4│ │W7│ │ │W8 ├───┤ ├───┤ │ ├─┤ ├─────┤ │ │ │ │ │ │ │ │ W3 │ W4 │ │ └───┴───┴───┴───┘ └─┴─────┴─────┴─┘ 窗口内计算注意力 窗口移位,跨窗口信息交换 \end{lstlisting} Swin Transformer的设计使其兼具CNN的层级特征提取优势和Transformer的强大表达能力,成为视觉Transformer的重要里程碑。 \section{大视觉模型} \subsection{从小模型到大模型} 在前面的章节中,我们讨论的模型(CNN、ViT)通常针对特定任务训练,如分类、检测或分割。\textbf{大视觉模型(Large Vision Model)}代表了一种新的范式:通过大规模预训练,学习通用的视觉理解能力,然后通过提示(Prompt)适配到各种下游任务。 \begin{lstlisting} 小模型范式 大模型范式 ┌────────────┐ ┌────────────────┐ │ 特定任务数据 │ ──→ 训练 ──→ │ 海量多模态数据 │ ──→ 预训练 ──→ │ (如建筑分类)│ 特定模型 │ (图像+文本对) │ 通用视觉模型 └────────────┘ └────────────────┘ │ ┌──────────┬─────────┼─────────┬──────────┐ ▼ ▼ ▼ ▼ ▼ 零样本分类 图文检索 目标分割 视觉问答 任意任务 (无需微调) (跨模态) (提示驱动) (多模态) (通用能力) \end{lstlisting} \subsection{CLIP:图文对齐与零样本学习} \textbf{CLIP(Contrastive Language-Image Pre-training, OpenAI, 2021)}通过对比学习,将图像和文本映射到同一个语义空间,实现了突破性的零样本分类能力。 \textbf{训练原理}: \begin{lstlisting} 共享语义空间 ┌──────────────────┐ ┌────→│ "一只猫的照片" │←────┐ │ │ "一条狗的照片" │ │ │ │ "一栋建筑的照片" │ │ 图像编码器 │ └──────────────────┘ │ 文本编码器 (ViT/CNN) │ 对比学习 │ (Transformer) │ 拉近匹配对,推远不匹配对 │ ┌─────────┐ │ │ ┌──────────┐ │ 🐱 图片 │───┤ ├───┤ "猫" 文本 │ │ 🐶 图片 │───┘ └───┤ "狗" 文本 │ └─────────┘ └──────────┘ \end{lstlisting} CLIP的训练目标:对于N个''图像-文本''配对,最大化正确配对的相似度,最小化错误配对的相似度。 \textbf{零样本分类}: \begin{lstlisting} 输入:一张建筑照片 候选文本:"一栋住宅的照片" "一栋商业建筑的照片" "一个公园的照片" → 图像编码器提取图像特征 → 文本编码器提取每个文本特征 → 计算图像与每个文本的相似度 → 选择最相似的文本作为分类结果 无需任何建筑类别的训练数据! \end{lstlisting} CLIP的意义在于:\textbf{用自然语言定义视觉概念},打破了传统计算机视觉需要固定类别标签的限制。设计师可以用自然语言描述来检索、分类和理解图像。 \subsection{SAM:分割一切} \textbf{SAM(Segment Anything Model, Meta, 2023)}是一个''可提示''的通用分割模型,能够根据各种提示(点、框、文本)分割图像中的任意目标。 \begin{lstlisting} SAM 的三种提示方式 点提示 框提示 文本提示 ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ ┌───────┐ │ │ │ │ ● │ │ │ │ │ │ 建筑 │ │ ┌───┐ │ │ │ 目标 │ │ │ ┌───┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───┘ │ │ └───────┘ │ │ └───┘ │ │ │ │ │ │ │ └───────────┘ └───────────┘ └───────────┘ 点击目标位置 画框框住目标 输入目标名称 → 分割该目标 → 分割框内目标 → 分割对应目标 \end{lstlisting} \textbf{SAM的核心能力}: \begin{itemize} \tightlist \item \textbf{零样本泛化}:训练时没见过的物体类型也能分割 \item \textbf{歧义感知}:一个点可能对应多个层级的目标(如点击窗户 → 返回窗户、墙面、建筑三个层级) \item \textbf{自动分割}:无需提示,可自动分割图像中的所有物体 \item \textbf{海量数据集}:SA-1B数据集包含10亿级自动标注的分割掩码 \end{itemize} SAM的设计理念是成为视觉领域的''基础模型''——像大语言模型处理文本一样,成为处理视觉分割任务的基础设施。 \subsection{DINOv2:自监督视觉特征} \textbf{DINOv2(Meta, 2023)}通过自监督学习训练,无需人工标注即可学习强大的视觉特征表示。 \begin{lstlisting} 训练方式(自蒸馏 + 对比学习) ┌─────────────┐ ┌─────────────┐ │ 全局视图 │ │ 局部视图 │ │ (整张图) │ │ (裁剪块) │ └──────┬──────┘ └──────┬──────┘ │ │ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │ 教师网络 │ │ 学生网络 │ │ (EMA更新) │ │ (梯度更新) │ └──────┬──────┘ └──────┬──────┘ │ │ └─────── 对齐 ───────┘ 使两者的输出一致 \end{lstlisting} DINOv2学到的特征具有惊人的语义对齐能力——无需文本训练,其特征空间自然聚类出语义类别。它可以直接用于: \begin{itemize} \tightlist \item 图像检索(找到视觉语义相似的图片) \item 密集预测(分割、深度估计) \item 图像分类(作为特征提取器) \end{itemize} \subsection{视觉-语言模型} 大视觉模型发展的一个重要趋势是\textbf{视觉与语言模态的融合}。模型不再仅''看图说话'',而是真正理解图像内容并可以回答关于图像的复杂问题。 \textbf{典型任务与模型}: {\def\LTcaptype{none} % do not increment counter \begin{longtable}[]{@{}lll@{}} \toprule\noalign{} 任务 & 描述 & 代表模型 \\ \midrule\noalign{} \endhead \bottomrule\noalign{} \endlastfoot 图像描述 & 自动生成图像的自然语言描述 & BLIP, BLIP-2 \\ 视觉问答 & 根据图像内容回答自然语言问题 & LLaVA, GPT-4V \\ 图文检索 & 用文本搜索图像,或反之 & CLIP, ALIGN \\ 指代表达 & 根据语言描述定位图像中的区域 & GLIP, Grounding DINO \\ 视觉对话 & 围绕图像内容进行多轮对话 & LLaVA, Qwen-VL \\ \end{longtable} } \textbf{模态融合的演进}: \begin{lstlisting} 单模态时代 早期多模态 大一统时代 ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ 视觉模型 │ │ 视觉+文本 │ │ 统一多模态模型 │ │ (CNN/ViT)│ │ 浅层融合 │ │ (视觉+语言+更多) │ ├──────────┤ ├──────────┤ ├──────────────────┤ │ 语言模型 │ → │ 各自编码 │ → │ 共享表示空间 │ │(RNN/TF) │ │ 拼接特征 │ │ 端到端联合训练 │ └──────────┘ └──────────┘ └──────────────────┘ 各自独立 简单组合 深度融合 \end{lstlisting} 这种融合趋势对设计领域意义深远:设计师可以用自然语言与视觉模型交互,用文字描述需求、用图像表达想法,AI能够同时理解两者并做出响应。 \section{设计应用} \subsection{建筑检测与识别} 利用目标检测和语义分割技术,可以从遥感图像和街景图像中自动提取建筑信息。 \textbf{应用场景}: \begin{lstlisting} 卫星/遥感图像输入 │ ▼ ┌──────────────────┐ │ 建筑检测模型 │ → 建筑位置、边界框 │ (YOLO/Faster R-CNN)│ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ 建筑分割模型 │ → 建筑轮廓、精确边界 │ (U-Net/Mask R-CNN)│ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ 风格分类模型 │ → 建筑风格(现代/古典/...) │ (ViT/CLIP) │ └──────────────────┘ \end{lstlisting} 实际应用包括:城市建筑存量调查、历史街区建筑类型统计、违章建筑监测等。 \subsection{街景品质评估} 街景图像(Street View Imagery)已成为城市设计分析的重要数据源。通过视觉模型可以从大规模街景中自动提取城市环境品质指标。 \textbf{典型分析指标}: {\def\LTcaptype{none} % do not increment counter \begin{longtable}[]{@{}lll@{}} \toprule\noalign{} 指标 & 定义 & 分析方法 \\ \midrule\noalign{} \endhead \bottomrule\noalign{} \endlastfoot 绿视率 & 视野中绿色植被占比 & 语义分割:像素级统计 \\ 天空开敞度 & 视野中天空可见比例 & 语义分割:天空区域提取 \\ 建筑围合度 & 视野中建筑遮挡比例 & 语义分割+深度估计 \\ 街道活力 & 行人、车辆、商业活动密度 & 目标检测:计数+密度估计 \\ 景观丰富度 & 视觉元素多样性 & 分类/聚类:元素类型统计 \\ \end{longtable} } \begin{lstlisting} 街景图像 ──→ 语义分割 ──→ 各类像素统计 ──→ 品质指标计算 │ ├── 天空: 35% ├── 建筑: 25% ├── 道路: 15% ├── 植被: 18% ├── 车辆: 4% └── 其他: 3% → 绿视率 = 18% → 天空开敞度 = 35% → 建筑围合度 = 25% \end{lstlisting} \subsection{设计素材理解与智能标注} 利用CLIP等视觉-语言模型,可以实现设计素材的智能理解和管理: \begin{itemize} \tightlist \item \textbf{智能标签}:自动为设计素材添加语义标签,无需人工标注 \item \textbf{自然语言检索}:用文字描述查找设计参考图(如''带玻璃幕墙的现代商业建筑'') \item \textbf{风格分类}:自动识别设计作品的风格特征 \item \textbf{相似推荐}:基于视觉语义相似度推荐相关素材 \end{itemize} \subsection{风格分析与分类} 建筑与设计的风格分析是视觉模型在设计领域的典型应用: \begin{lstlisting} 设计图像 → 特征提取 (ViT/DINOv2) → 风格特征向量 │ ┌─────────────────────┼─────────────────────┐ │ │ │ ▼ ▼ ▼ 风格分类 风格聚类 风格检索 (现代/古典/ (自动发现 (找到风格相似 后现代/...) 未知风格) 的设计案例) \end{lstlisting} 结合CLIP的零样本能力,设计师可以自定义风格类别(如''新中式''\,``极简主义''``有机建筑''等),无需收集训练数据即可进行风格分类。 \section{本章小结} 本章沿着\textbf{``CNN → 目标检测/语义分割 → Vision Transformer → 大视觉模型''}的技术演进主线,系统介绍了计算机视觉的核心方法和前沿进展。 \begin{lstlisting} 技术演进脉络 CNN时代 (2012-2020) Transformer时代 (2020-) ┌────────────────────┐ ┌────────────────────────┐ │ AlexNet → VGG │ │ ViT: 图像=Patch序列 │ │ → ResNet │ → │ Swin: 层级Transformer │ │ 分类 / 检测 / 分割 │ │ │ │ 任务专用模型 │ │ 大视觉模型: │ └────────────────────┘ │ CLIP: 图文对齐 │ │ SAM: 分割一切 │ │ DINOv2: 自监督特征 │ │ VLM: 视觉-语言融合 │ └────────────────────────┘ \end{lstlisting} 关键趋势:模型从\textbf{任务专用}走向\textbf{通用基础},从\textbf{纯视觉}走向\textbf{视觉-语言融合},从\textbf{监督学习}走向\textbf{自监督和提示学习}。这些趋势正在为设计领域带来更强大、更灵活、更易用的视觉智能工具。 \section{思考与练习} \begin{enumerate} \def\labelenumi{\arabic{enumi}.} \item \textbf{架构对比}:CNN通过局部卷积提取特征,ViT通过全局自注意力建立关系。在设计场景中(如建筑立面分析、街景品质评估),你认为哪种架构更适合?为什么? \item \textbf{零样本能力}:CLIP实现了''用自然语言做图像分类''的零样本能力。如果你是一名城市设计师,想用CLIP分析城市街景的''宜居性'',你会如何设计提示文本?考虑需要哪些视觉线索。 \item \textbf{大模型与传统方法}:SAM号称可以''分割一切''。在专业设计领域(如建筑精细构件识别、景观植物种类分割),通用大模型和针对特定任务训练的小模型各有什么优势和局限?你会如何选择? \end{enumerate} \section{关键术语} {\def\LTcaptype{none} % do not increment counter \begin{longtable}[]{@{} >{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.3333}} >{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.3333}} >{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.3333}}@{}} \toprule\noalign{} \begin{minipage}[b]{\linewidth}\raggedright 中文 \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright 英文 \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright 说明 \end{minipage} \\ \midrule\noalign{} \endhead \bottomrule\noalign{} \endlastfoot 卷积神经网络 & Convolutional Neural Network (CNN) & 利用卷积操作提取局部特征的神经网络 \\ 卷积核/滤波器 & Kernel / Filter & 卷积操作中用于特征提取的小矩阵 \\ 池化 & Pooling & 降低特征图空间尺寸的下采样操作 \\ 感受野 & Receptive Field & 神经元能''看到''的输入区域大小 \\ 残差连接 & Residual/Skip Connection & 将输入直接加到输出上,解决深层网络退化问题 \\ 目标检测 & Object Detection & 同时识别图像中目标的类别和位置 \\ 边界框 & Bounding Box & 用矩形框标出目标位置的表示方法 \\ 语义分割 & Semantic Segmentation & 对每个像素进行类别标签预测 \\ 实例分割 & Instance Segmentation & 区分同类别的不同个体实例 \\ 视觉Transformer & Vision Transformer (ViT) & 将图像切分为Patch序列,用Transformer处理 \\ 零样本学习 & Zero-shot Learning & 在未见过的类别上直接进行推理 \\ 对比学习 & Contrastive Learning & 通过对比正负样本学习特征表示 \\ 视觉-语言模型 & Vision-Language Model & 同时理解图像和文本的多模态模型 \\ 提示学习 & Prompt Learning & 通过自然语言提示引导模型完成特定任务 \\ 基础模型 & Foundation Model & 在大规模数据上预训练的通用模型 \\ \end{longtable} }