CS231n-9
Lecture 9
📘 内容概览
本讲是CS231n课程中承上启下的关键一环,将之前学习的卷积神经网络和Transformer架构,应用于更复杂的计算机视觉任务,并讲解了如何理解和可视化这些"黑箱"模型。本文将深入剖析以下核心内容:
- Vision Transformer (ViT):如何将Transformer应用于图像。
- 语义分割:如何实现像素级分类。
- 目标检测:从R-CNN到DETR的演进与核心概念(重点详解RoI、Anchor)。
- 实例分割:Mask R-CNN如何结合检测与分割。
- 模型可视化:理解模型究竟"看"到了什么。
1. Vision Transformer (ViT) 详解
ViT的核心思想是将图像视为一系列Patch的序列,从而可以利用NLP中成熟的Transformer架构。
🔹 关键步骤
- 分块:将输入图像(如224x224)分割成固定大小的Patch(如16x16),得到
(224/16)^2 = 196个Patch。 - 线性投影:将每个Patch(3x16x16=768维)展平,并通过一个线性层映射到D维(如768维)。这相当于将每个Patch编码成一个"词向量"。
- 位置编码(Position Encoding):为每个Patch的位置信息添加一个可学习的D维向量。这是至关重要的,因为Transformer本身不具备感知空间顺序的能力。
- 可学习的分类Token:在Patch序列前添加一个特殊的
[class]token,其经过Transformer编码后的输出状态用于最终的图像分类。 - Transformer编码器:将处理后的序列送入标准的Transformer编码器。注意:在ViT中,每个Patch(Token)都可以与所有其他Patch进行交互,从而捕获全局信息。
🔹 与CNN的对比
- 感受野:CNN通过堆叠卷积层逐步扩大感受野,而ViT在第一层就拥有全局感受野。
- 归纳偏置:CNN内置了平移不变性和局部性,而ViT几乎没有内置图像相关的归纳偏置,更多依赖数据和训练从头学习。因此,ViT通常在大规模数据集上才能展现出其优势。
1 | 通俗点讲:归纳偏置就是模型与生俱来的“思考习惯”: |
2. 语义分割:像素级的分类
目标:为图像中的每一个像素预测一个类别标签(如"人"、“车”、“天空”),但不区分同一类别的不同实例。
🔹 核心挑战与解决方案
- 挑战:分类网络通常通过池化或步长卷积降低分辨率,但分割需要输出与输入相同分辨率的密集预测。
- 解决方案:编码器-解码器结构
- 编码器(下采样):通常是预训练的CNN(如ResNet),用于提取高级语义特征,但特征图尺寸变小。
- 解码器(上采样):将小尺寸的特征图上采样回原始输入尺寸,以进行像素级预测。
🔹 关键上采样技术
- 转置卷积:并非真正的"反卷积",而是一种可学习的上采样方法。它可以理解为在输入元素之间插入零并进行常规卷积,其权重在训练中学习。
- U-Net:经典的分割架构,其核心创新是跳跃连接——将编码器中的高分辨率、低语义的特征图与解码器中上采样后的低分辨率、高语义的特征图进行拼接。这有助于解码器在恢复分辨率的同时,也能利用编码器保留的细节信息。

3. 目标检测:定位与识别
目标:找出图像中所有感兴趣物体的位置(用边界框表示)并识别其类别。
🔹 R-CNN 系列演进
(1)R-CNN:开山之作,但效率低下
- 流程:
- 使用选择性搜索等传统算法生成约2000个区域提议。
- 将每个提议区域扭曲成固定大小。
- 将每个区域分别输入CNN提取特征。
- 用SVM对特征进行分类,并用线性回归器微调边界框。
- 缺点:对每个区域独立进行前向传播,计算冗余极大,速度极慢。
(2)Fast R-CNN:共享计算,大幅提速
- 核心创新:RoI Pooling
- 流程:
- 将整张图像输入CNN一次,得到共享的特征图。
- 将区域提议映射到这张共享特征图上,得到对应的特征区域。
- 使用RoI Pooling将这些不同大小的特征区域统一池化成固定大小(如7x7)的特征网格。
- 后续的全连接层对这些固定大小的特征进行分类和边界框回归。
- 流程:
- RoI Pooling详解:
- 问题:从特征图上截取出的区域大小不一,但全连接层需要固定大小的输入。
- 解决方案:将每个区域提议均匀划分成
H x W(如7x7)个网格,然后在每个网格内执行最大池化。这样,无论输入区域多大,输出都是固定的H x W。 - 局限性:在将区域划分成网格时,需要进行两次量化取整操作(将提议映射到特征图坐标时一次,划分网格时一次),这会引入偏差,对检测小物体或需要像素级对齐的任务(如分割)不友好。
1 | 相对于R-CNN来说增添了一个RoI Pooling, |
(3)Faster R-CNN:端到端的实时检测
- 核心创新:Region Proposal Network,用神经网络替代选择性搜索。
- 流程:
- 共享的CNN提取特征图。
- RPN在特征图的每个位置上预设K个不同大小和长宽比的锚点框,并预测每个锚点框是"物体"还是"背景",同时对锚点框的位置和大小进行微调。
- 将RPN生成的优质提议送入与Fast R-CNN相同的RoI Pooling + 分类/回归流程。
- 流程:
- 锚点框详解:
- 定义:在特征图的每个像素点上,预先定义一组不同尺度(如128x128, 256x256, 512x512)和不同长宽比(如1:1, 1:2, 2:1)的基准框。这些框作为检测的参考。
- 作用:RPN的任务就是判断这些锚点框中哪些可能包含物体,并预测一个偏移量来精细调整锚点框,使其更贴近真实物体。
1 | 相对于fast来说增添了一个RPN, |
🔹 单阶段检测器:YOLO/SSD
- YOLO论文地址
- 参考视频讲解
- 思想:去掉耗时的区域提议步骤,直接在特征图上的一次前向传播中预测所有边界框和类别。
- 流程:将图像划分为网格,每个网格单元直接预测多个边界框及其置信度和类别概率。
- 优点:速度非常快。
- 缺点:精度通常略低于两阶段方法,尤其在小物体检测上。
🔹 DETR:基于Transformer的端到端检测
- 思想:彻底摆脱锚点框和非极大值抑制等复杂后处理。
- 流程:
- CNN提取图像特征。
- Transformer编码器-解码器处理特征。解码器的输入是一组固定数量的对象查询。
- 每个对象查询输出一个预测(包括类别和边界框)。
- 二分图匹配损失:训练时,将模型的N个预测与图像中M个真实物体进行最优匹配,然后只对匹配上的预测计算损失。这使得模型可以端到端训练。
- 优点:流程简洁,无需手工设计的锚点框。
- 缺点:训练收敛较慢,小物体检测性能有时不如传统方法。
1 | 这边的loss可以是类别上的差距 |
4. 实例分割:Mask R-CNN
目标:在目标检测的基础上,为每个实例预测一个像素级的二值掩码。
🔹 核心创新
- 在Faster R-CNN的基础上,并行地添加一个掩码预测分支。
- 用 RoI Align 替代 RoI Pooling。
🔹 RoI Align 详解
- 解决的问题:RoI Pooling的量化误差。
- 工作原理:取消所有量化操作,使用双线性插值。
- 将区域提议映射到特征图时,保留浮点数坐标。
- 将提议区域划分成
H x W个网格时,在每个网格中规则地采样多个点(如4个)。 - 用双线性插值计算这些采样点位置的特征值。
- 对这些采样点的特征值进行最大池化或平均池化,得到该网格的最终输出。
- 效果:显著提升了特征图与原始图像像素的空间对应精度,对掩码预测这类精细任务至关重要。
5. 模型可视化与理解
🔹 滤波器可视化
- 方法:直接可视化第一层卷积的权重。通常能看到 oriented edges, colors, textures。
🔹 Saliency Maps
- 目标:找出哪些输入像素对模型的分类决策最重要。
- 方法:计算类别分数相对于输入图像的梯度。梯度的绝对值大小表示了该像素的微小变化对分数的影响程度,即其"重要性"。
🔹 Class Activation Mapping & Grad-CAM
-
目标:生成一个热力图,显示图像的哪些区域被模型用于识别出某个类别。
-
CAM:
- 要求:网络必须使用全局平均池化接一个全连接层进行分类。
- 原理:将最后一层卷积特征图的每个通道,根据其对该类别的贡献权重进行加权求和,生成热力图。
- 局限:只能用于特定结构的网络。
-
Grad-CAM:
- 原理:更加通用。通过计算类别分数相对于任一目标卷积层的梯度,并将其全局平均池化后作为权重,对该层的特征图进行加权求和。
- 公式:对于目标层A,类别c的热力图 为:
- 优点:适用于任何CNN,无需改变网络结构。
🎯 技术总结与演进脉络
| 任务 | 关键模型/技术 | 核心思想 | 贡献与局限 |
|---|---|---|---|
| 分类 | ViT | 图像作为Patch序列,使用Transformer | 全局感受野,依赖大数据 |
| 语义分割 | FCN, U-Net | 编码器-解码器,跳跃连接 | 实现端到端像素分类 |
| 目标检测 | R-CNN -> Fast R-CNN | RoI Pooling,共享特征计算 | 极大提升训练/检测速度 |
| Faster R-CNN | RPN,锚点框 | 实现端到端,实时检测 | |
| YOLO/SSD | 单阶段,无提议 | 速度极致,精度稍逊 | |
| DETR | Transformer,对象查询 | 流程最简,无需NMS/锚点 | |
| 实例分割 | Mask R-CNN | RoI Align,掩码分支 | 高精度实例分割标杆 |
| 可视化 | Grad-CAM | 基于梯度的加权特征图 | 通用、可解释性强 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 10,000 Hours!