Lecture 9

PPT链接点我

📘 内容概览

本讲是CS231n课程中承上启下的关键一环,将之前学习的卷积神经网络和Transformer架构,应用于更复杂的计算机视觉任务,并讲解了如何理解和可视化这些"黑箱"模型。本文将深入剖析以下核心内容:

  1. Vision Transformer (ViT):如何将Transformer应用于图像。
  2. 语义分割:如何实现像素级分类。
  3. 目标检测:从R-CNN到DETR的演进与核心概念(重点详解RoIAnchor)。
  4. 实例分割:Mask R-CNN如何结合检测与分割。
  5. 模型可视化:理解模型究竟"看"到了什么。

1. Vision Transformer (ViT) 详解

ViT的核心思想是将图像视为一系列Patch的序列,从而可以利用NLP中成熟的Transformer架构。

🔹 关键步骤

  1. 分块:将输入图像(如224x224)分割成固定大小的Patch(如16x16),得到 (224/16)^2 = 196 个Patch。
  2. 线性投影:将每个Patch(3x16x16=768维)展平,并通过一个线性层映射到D维(如768维)。这相当于将每个Patch编码成一个"词向量"。
  3. 位置编码(Position Encoding):为每个Patch的位置信息添加一个可学习的D维向量。这是至关重要的,因为Transformer本身不具备感知空间顺序的能力。
  4. 可学习的分类Token:在Patch序列前添加一个特殊的[class] token,其经过Transformer编码后的输出状态用于最终的图像分类。
  5. Transformer编码器:将处理后的序列送入标准的Transformer编码器。注意:在ViT中,每个Patch(Token)都可以与所有其他Patch进行交互,从而捕获全局信息。

🔹 与CNN的对比

  • 感受野:CNN通过堆叠卷积层逐步扩大感受野,而ViT在第一层就拥有全局感受野
  • 归纳偏置:CNN内置了平移不变性和局部性,而ViT几乎没有内置图像相关的归纳偏置,更多依赖数据和训练从头学习。因此,ViT通常在大规模数据集上才能展现出其优势。
1
2
3
通俗点讲:归纳偏置就是模型与生俱来的“思考习惯”:
·CNN的思考习惯:→ “让我先看看这个小区域有什么特征”
·ViT的思考习惯:→ “让我一眼扫过全局,看看所有东西是怎么关联的”

2. 语义分割:像素级的分类

目标:为图像中的每一个像素预测一个类别标签(如"人"、“车”、“天空”),但不区分同一类别的不同实例。

🔹 核心挑战与解决方案

  • 挑战:分类网络通常通过池化或步长卷积降低分辨率,但分割需要输出与输入相同分辨率的密集预测。
  • 解决方案:编码器-解码器结构
    • 编码器(下采样):通常是预训练的CNN(如ResNet),用于提取高级语义特征,但特征图尺寸变小。
    • 解码器(上采样):将小尺寸的特征图上采样回原始输入尺寸,以进行像素级预测。

🔹 关键上采样技术

  1. 转置卷积:并非真正的"反卷积",而是一种可学习的上采样方法。它可以理解为在输入元素之间插入零并进行常规卷积,其权重在训练中学习。
  2. U-Net:经典的分割架构,其核心创新是跳跃连接——将编码器中的高分辨率、低语义的特征图与解码器中上采样后的低分辨率、高语义的特征图进行拼接。这有助于解码器在恢复分辨率的同时,也能利用编码器保留的细节信息。
    U-net图

3. 目标检测:定位与识别

目标:找出图像中所有感兴趣物体的位置(用边界框表示)并识别其类别。

🔹 R-CNN 系列演进

(1)R-CNN:开山之作,但效率低下

  • 流程
    1. 使用选择性搜索等传统算法生成约2000个区域提议
    2. 将每个提议区域扭曲成固定大小。
    3. 将每个区域分别输入CNN提取特征。
    4. 用SVM对特征进行分类,并用线性回归器微调边界框。
  • 缺点:对每个区域独立进行前向传播,计算冗余极大,速度极慢

(2)Fast R-CNN:共享计算,大幅提速

  • 核心创新RoI Pooling
    • 流程
      1. 整张图像输入CNN一次,得到共享的特征图。
      2. 将区域提议映射到这张共享特征图上,得到对应的特征区域。
      3. 使用RoI Pooling将这些不同大小的特征区域统一池化成固定大小(如7x7)的特征网格。
      4. 后续的全连接层对这些固定大小的特征进行分类和边界框回归。
  • RoI Pooling详解
    • 问题:从特征图上截取出的区域大小不一,但全连接层需要固定大小的输入。
    • 解决方案:将每个区域提议均匀划分成 H x W(如7x7)个网格,然后在每个网格内执行最大池化。这样,无论输入区域多大,输出都是固定的 H x W
    • 局限性:在将区域划分成网格时,需要进行两次量化取整操作(将提议映射到特征图坐标时一次,划分网格时一次),这会引入偏差,对检测小物体或需要像素级对齐的任务(如分割)不友好。
1
2
3
相对于R-CNN来说增添了一个RoI Pooling,
从而只需要一个CNN就可以得到共享的特征图,
而R-CNN对于每一个区域都需要用一个CNN来提取特征

(3)Faster R-CNN:端到端的实时检测

  • 核心创新Region Proposal Network,用神经网络替代选择性搜索。
    • 流程
      1. 共享的CNN提取特征图。
      2. RPN在特征图的每个位置上预设K个不同大小和长宽比的锚点框,并预测每个锚点框是"物体"还是"背景",同时对锚点框的位置和大小进行微调。
      3. 将RPN生成的优质提议送入与Fast R-CNN相同的RoI Pooling + 分类/回归流程。
  • 锚点框详解
    • 定义:在特征图的每个像素点上,预先定义一组不同尺度(如128x128, 256x256, 512x512)和不同长宽比(如1:1, 1:2, 2:1)的基准框。这些框作为检测的参考。
    • 作用:RPN的任务就是判断这些锚点框中哪些可能包含物体,并预测一个偏移量来精细调整锚点框,使其更贴近真实物体。
1
2
3
相对于fast来说增添了一个RPN,
RPN通俗点来讲就是给定像素点上预设定一组框
来判断是否有物体以及精细调整等等

🔹 单阶段检测器:YOLO/SSD

  • YOLO论文地址
  • 参考视频讲解
  • 思想:去掉耗时的区域提议步骤,直接在特征图上的一次前向传播中预测所有边界框和类别
  • 流程:将图像划分为网格,每个网格单元直接预测多个边界框及其置信度和类别概率。
  • 优点:速度非常快。
  • 缺点:精度通常略低于两阶段方法,尤其在小物体检测上。

🔹 DETR:基于Transformer的端到端检测

  • 思想:彻底摆脱锚点框和非极大值抑制等复杂后处理。
  • 流程
    1. CNN提取图像特征。
    2. Transformer编码器-解码器处理特征。解码器的输入是一组固定数量的对象查询
    3. 每个对象查询输出一个预测(包括类别和边界框)。
  • 二分图匹配损失:训练时,将模型的N个预测与图像中M个真实物体进行最优匹配,然后只对匹配上的预测计算损失。这使得模型可以端到端训练。
  • 优点:流程简洁,无需手工设计的锚点框。
  • 缺点:训练收敛较慢,小物体检测性能有时不如传统方法。
1
2
这边的loss可以是类别上的差距
加上边界框的差距

4. 实例分割:Mask R-CNN

目标:在目标检测的基础上,为每个实例预测一个像素级的二值掩码

🔹 核心创新

  • 在Faster R-CNN的基础上,并行地添加一个掩码预测分支
  • RoI Align 替代 RoI Pooling

🔹 RoI Align 详解

  • 解决的问题:RoI Pooling的量化误差。
  • 工作原理取消所有量化操作,使用双线性插值
    1. 将区域提议映射到特征图时,保留浮点数坐标
    2. 将提议区域划分成 H x W 个网格时,在每个网格中规则地采样多个点(如4个)。
    3. 双线性插值计算这些采样点位置的特征值。
    4. 对这些采样点的特征值进行最大池化或平均池化,得到该网格的最终输出。
  • 效果:显著提升了特征图与原始图像像素的空间对应精度,对掩码预测这类精细任务至关重要。

5. 模型可视化与理解

🔹 滤波器可视化

  • 方法:直接可视化第一层卷积的权重。通常能看到 oriented edges, colors, textures。

🔹 Saliency Maps

  • 目标:找出哪些输入像素对模型的分类决策最重要
  • 方法:计算类别分数相对于输入图像的梯度。梯度的绝对值大小表示了该像素的微小变化对分数的影响程度,即其"重要性"。

🔹 Class Activation Mapping & Grad-CAM

  • 目标:生成一个热力图,显示图像的哪些区域被模型用于识别出某个类别

  • CAM

    • 要求:网络必须使用全局平均池化接一个全连接层进行分类。
    • 原理:将最后一层卷积特征图的每个通道,根据其对该类别的贡献权重进行加权求和,生成热力图。
    • 局限:只能用于特定结构的网络。
  • Grad-CAM

    • 原理:更加通用。通过计算类别分数相对于任一目标卷积层的梯度,并将其全局平均池化后作为权重,对该层的特征图进行加权求和。
    • 公式:对于目标层A,类别c的热力图 McM^c 为:

      αkc=1ZijScAijk(对梯度做GAP得到权重)\alpha_k^c = \frac{1}{Z} \sum_i \sum_j \frac{\partial S^c}{\partial A_{ij}^k} \quad \text{(对梯度做GAP得到权重)}

      Mc=ReLU(kαkcAk)(加权求和)M^c = ReLU\left( \sum_k \alpha_k^c A^k \right) \quad \text{(加权求和)}

    • 优点:适用于任何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 基于梯度的加权特征图 通用、可解释性强