CS231n(玖)——检测分割与可视化
本讲涵盖: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 工作原理
- 在特征图每个位置想象 K 个不同大小/比例的 anchor box
- 对每个 anchor 预测:是否是物体(二分类)× K
- 对正样本 anchor 预测:边界框修正 (dx, dy, dw, dh) × 4K
- 按 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 的局限——可用于任意层!
- 选择任意层,设激活为 Ak × H × W
- 计算 $\frac{\partial y^c}{\partial A^k}$ 并全局平均池化 → 得到权重 αkc
- 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(拾叁)——生成模型
