本讲涵盖:Transformer 改进 → 计算机视觉任务(分割/检测/实例分割)→ 可视化与可解释性


$\large\star$ 一、Vision Transformer (ViT) 与 Transformer 改进

1.1 Vision Transformer (ViT)

核心思想:将图像视为”词序列”,直接送入 NLP Transformer。

流程: 1. 图像 224 × 224 × 3 → 切成 16 × 16 × 3 的 patches → N 个 patch 2. 每个 patch 线性投影到 D 维向量 3. 加上可学习的位置编码(告诉 Transformer 每个 patch 的 2D 位置) 4. 加上一个特殊的 CLS token(可学习的分类标记) 5. 送入标准 Transformer(不使用 mask——每个 patch 可以看到所有 patch) 6. CLS token 的输出 → 线性投影 → C 类分类分数

另一种设计:对 Transformer 所有输出向量取平均池化 → 线性分类(类似 ResNet 的 GAP)。

1.2 Transformer 自 2017 年以来的改进

改进 说明
Pre-Norm LayerNorm 移到 Self-Attention/MLP 之前(而非之后),残差连接内。训练更稳定
RMSNorm 比 LayerNorm 更简洁,不需要减均值,训练稍稳定
SwiGLU MLP y = (XW1 ⊙ SiLU(XW2))W3,用门控机制替换经典 MLP
Mixture of Experts (MoE) 每个 Block 学习 E 组 MLP 权重(专家),每个 token 只路由到 A < E 个专家。参数量 ×E,计算量仅 ×A

🧠 MoE 的现实意义:几乎所有最大 LLM(GPT-4、Claude 3.5+、Gemini 2.5 Pro 等)几乎肯定使用 MoE,参数量 > 1T


$\large\star$ 二、计算机视觉任务全景

任务 输出形式 有无空间范围 有无物体概念
分类 单个标签 CAT ❌ ❌
语义分割 逐像素标签 GRASS, CAT, TREE, SKY ✅ ❌ (合并同类)
目标检测 多个边界框+类别 DOG, DOG, CAT ✅ ✅
实例分割 多个实例级掩膜 DOG(1), DOG(2), CAT(1) ✅ ✅

$\large\star$ 三、语义分割

3.1 问题定义

输入图像 → 输出 H × W 的标签图,每个像素分配一个语义类别。同一类别的所有像素视为同一”东西”(如”草”就是一个整体)。

3.2 方法演进

方法 思路 问题
滑动窗口 对每个像素取周围 patch → CNN 分类中心像素 极其低效:相邻 patch 大量重复计算
全卷积(无下采样) 只用 convolutions,不下采样 → 直接输出 原始分辨率上的卷积计算代价极高
全卷积 + 上下采样(FCN) 编码器-解码器:下采样提取特征,上采样恢复分辨率 ✅ 实际可行方案

3.3 上采样方法

方法 说明
最近邻 复制最近的像素值
Bed of Nails 将输入值放在对应位置,其余填 0
Max Unpooling 在 Max Pooling 时记住最大值位置,上采样时放回原位
转置卷积(Transposed Conv) 可学习的上采样——输入值作为滤波器权重,在输出”涂抹”滤波器,重叠区域求和

转置卷积可视为”可学习上采样”:步长卷积是下采样(滤波器在输入移动),转置卷积是上采样(滤波器在输出移动)。

3.4 U-Net

  • 下采样路径:增大感受野,损失空间信息
  • 上采样路径:恢复高分辨率
  • 跳跃连接:将高分辨率特征从下采样路径拼接到上采样路径
  • 成为医学图像分割等任务的标准架构

$\large\star$ 四、目标检测

4.1 问题定义

输入图像 → 输出若干 (x, y, w, h, class) 的边界框。每张图像的输出数量不同。

4.2 方法演进

方法 年份 思路 速度
R-CNN 2014 Selective Search 生成~2K 候选区域 → 每个区域独立过 CNN → SVM 分类 + 边界框回归 极慢
Fast R-CNN 2015 整张图过一次 CNN → 在特征图上裁剪 RoI → 小网络分类+回归 快了很多
Faster R-CNN 2015 加入 RPN(区域提议网络):在特征图的每个位置预测 K 个 anchor box 是否为物体 + 边界框修正 端到端训练
YOLO / SSD 2016 单阶段检测:直接回归边界框+类别,无需 RPN。将图像分网格,每个网格预测 B 个框 实时
DETR 2020 Transformer 直接输出一组检测框,无 anchor、无 NMS。用二分图匹配训练 简洁优雅

4.3 RPN 工作原理

  1. 在特征图每个位置想象 K 个不同大小/比例的 anchor box
  2. 对每个 anchor 预测:是否是物体(二分类)× K
  3. 对正样本 anchor 预测:边界框修正 (dx, dy, dw, dh) × 4K
  4. 按 objectness 分数排序,取 top ~300 作为提议

4.4 YOLO 核心思想

  • 将图像划分为 S × S 网格
  • 每个网格预测 B 个边界框((x, y, w, h) + 置信度)+ C 个类别概率
  • 输出形状:S × S × (5B + C)
  • You Only Look Once:一次前向传播完成检测

$\large\star$ 五、实例分割 — Mask R-CNN

在 Faster R-CNN 基础上,为每个 RoI 添加一个小型掩膜网络:

  • 对每个 RoI 的特征预测一个 C × 28 × 28 的二进制掩膜
  • 分类、边界框回归、掩膜预测多任务联合训练
  • 还能做姿态估计(关键点预测)

$\large\star$ 六、可视化与可解释性

6.1 第一层滤波器可视化

直接可视化卷积滤波器的权重(RGB 值)。几乎所有 CNN 第一层都学出类似图案: - 定向边缘(水平、垂直、斜向) - 颜色对比(红-绿、蓝-黄) - 类似 Gabor 滤波器

AlexNet、ResNet、DenseNet 的第一层滤波器高度相似——这是卷积网络的通用现象!

6.2 显著图(Saliency Maps)

核心思想:计算分类分数对输入像素的梯度 → 哪些像素对决策影响最大?

$$\text{Saliency Map} = \left|\frac{\partial \text{Score}_c}{\partial \text{Image}}\right|_{\text{max over RGB}}$$

  • 无需额外训练,一次反向传播即可
  • 高亮对类别 c 最重要的像素区域

6.3 CAM(类激活映射)

适用:末尾使用全局平均池化 (GAP) 的网络

$$S_c = \sum_k w_k^c \cdot \underbrace{\frac{1}{HW} \sum_{i,j} A_{k,i,j}}_{\text{GAP}} = \sum_{i,j} \underbrace{\sum_k w_k^c A_{k,i,j}}_{\text{CAM}_{i,j}^c}$$

  • CAM 是特征图的加权组合,直接指示哪里的激活对判别类别 c 最重要
  • 局限:只能用于最后一层卷积层

6.4 Grad-CAM

解决 CAM 的局限——可用于任意层!

  1. 选择任意层,设激活为 Ak × H × W
  2. 计算 $\frac{\partial y^c}{\partial A^k}$ 并全局平均池化 → 得到权重 αkc
  3. Grad-CAMc = ReLU (∑kαkcAk)

Grad-CAM 可以定位任意层的”注意力区域”,广泛用于模型解释。

6.5 ViT 特征可视化

ViT 的 Self-Attention 天然提供了可视化的注意力图——可以直接观察每个 patch 在关注哪些其他 patch。


$\large\star$ 七、总结

主题 核心要点
ViT 图像切 patches → 线性投影 → Transformer → 分类
语义分割 FCN/UNet:下采样+上采样,输出逐像素标签
上采样 转置卷积 = 可学习的上采样
目标检测 R-CNN → Fast → Faster (RPN) → YOLO (单阶段) → DETR (Transformer)
实例分割 Mask R-CNN:检测 + 掩膜预测 + 姿态估计
Saliency Maps 梯度反传定位关键像素
CAM/Grad-CAM 特征图加权组合定位类别相关区域

下一讲:CS231n(拾叁)——生成模型