第2章

第2章:视觉基础模型

从零实现 ViT、MAE 预训练、DINO 自监督学习,掌握 Swin Transformer、Deformable DETR 等层次化视觉架构。

ViTMAEDINO/DINOv2Swin TransformerDeformable DETR

ViT, MAE, DINO — 奠定视觉 AI 的基础


第一部分:Vision Transformer (ViT)

1.1 核心思想:An Image is Worth 16x16 Words

ViT 的核心洞察:图像可以被视为由 patch(类似于 NLP 中的 token)组成的序列。这意味着:

- 打破 CNN 范式:不再依赖卷积的局部感受野

- 统一架构:视觉和语言可以使用相同的 Transformer 处理

- 全局理解:第一层起每个 patch 就能看到所有其他 patch

1.2 Patch Embedding — 图像的 Tokenizer

一张 224×224 的 RGB 图像,使用 16×16 的 patch:

- 产生 14×14 = 196 个视觉 tokens

- 每个 token 是 16×16×3 = 768 维向量

- 通过线性投影映射到 hidden_dim

Patch Embedding 实际上等价于一个 kernel_size=stride=16 的大卷积核 Conv2d。

1.3 [CLS] Token — 全局信息聚合器

ViT 在所有 patch tokens 前面添加一个可学习的 [CLS] token。经过 Transformer 处理后,[CLS] 的输出包含了整张图像的全局表示。

这个设计来自 BERT,但 ViT 不能简单地用平均池化替代吗?可以,经验上差距不大,但 [CLS] token 通过 attention 学习到了"哪些 patch 重要"。

1.4 ViT vs CNN — 归纳偏置的权衡

特性 CNN ViT
感受野 从小到大(逐层扩大) 全局(第一层起)
归纳偏置 局部性、平移不变性 几乎没有
数据需求 较少 需要大规模数据
全局理解 需要深层 天然全局
多尺度 天然支持 需要特殊设计

1.5 自动驾驶视角

ViT 的全局理解能力对自动驾驶很有价值:

- 场景理解:同时关注车辆、行人、交通灯

- 多视角融合:天然的全局注意力适合多相机输入

- 统一架构:与 LLM 共享结构,便于后续 VLA 设计


第二部分:Masked Autoencoder (MAE)

2.1 自监督预训练的动机

标注数据昂贵,但未标注的驾驶视频几乎是无限的。MAE 提供了一种从海量未标注数据中学习强大视觉表示的方法。

2.2 "遮住 75%,然后重建"

MAE 的训练过程:

1. 随机遮住图像 75% 的 patches

2. Encoder 只处理可见的 25% patches

3. Decoder 从编码特征 + mask tokens 重建完整图像

4. 只计算被遮住位置的 L2 重建 loss

2.3 为什么 75% 的掩码比例?

- 30%: 太简单,模型可以靠局部插值填充

- 75%: 迫使模型理解全局语义才能重建

- 这个比例是论文通过实验找到的"甜蜜点"

2.4 不对称设计

MAE 的高效关键:

- Encoder(大)只处理 25% 的 patches → 训练速度 ~4x

- Decoder(小)处理所有 patches → 足够进行重建

- 这种不对称使得预训练可以规模化

2.5 自动驾驶中的应用

- 处理遮挡:从部分相机图像重建全景

- 占据预测:从稀疏观测重建稠密 3D 场景

- 世界模型:预测未来的场景状态

- 预训练 backbone:在大量未标注驾驶数据上预训练


第三部分:DINO 自监督学习

3.1 自蒸馏框架

DINO 的核心是 Teacher-Student 自蒸馏:

- Student 通过梯度下降学习

- Teacher 是 Student 的 EMA

- Teacher 引导 Student 学习一致的表示

3.2 多裁剪策略

DINO 的创新之一:同时使用全局裁剪和局部裁剪

- 全局裁剪(2 个):覆盖 >50% 图像 → 场景级语义

- 局部裁剪(8 个):覆盖小区域 → 细节

Student 从局部裁剪学习匹配 Teacher 对全局裁剪的理解。

3.3 Centering + Sharpening

两个防止表示坍缩的技巧:

- Centering:减去表示空间的移动平均中心

- Sharpening:Teacher 用极小温度(0.04)→ 输出尖锐

- 两个技巧形成对抗:centering 防止坍缩到单点,sharpening 防止坍缩到均匀分布

3.4 DINOv2

DINOv2 是 Meta 的最新版本,在 DINO 基础上:

- 更大模型、更大数据

- 更精细的训练策略

- 特征质量接近有监督方法

- 已经成为许多视觉任务的标准 backbone


第四部分:Swin Transformer 与层次化架构

4.1 为什么需要层次化?

标准 ViT 所有层输出相同分辨率 → 不适合检测/分割等多尺度任务。

Swin 的解决方案:

- Patch Merging:阶段性降低分辨率

- 从 H/4 × W/4 → H/8 × W/8 → H/16 × W/16 → H/32 × W/32

- 类似 CNN 的层次化特征金字塔

4.2 Window Attention

局部窗口内的 Self-Attention:

- 复杂度从 O(N²) 降到 O(W²×N/W²) = O(W²)

- W 是窗口大小(7),N 是总 token 数

- 大大降低了高分辨率特征的计算量

4.3 Shifted Window

偶数层:标准窗口

奇数层:偏移窗口(移动 W/2)

→ 窗口之间通过偏移实现通信

→ 不需要全局 attention 也能获得全局感受野


第五部分:DETR — 端到端检测

5.1 重新定义目标检测

DETR 将检测问题重新定义为集合预测

- 不需要 anchor boxes

- 不需要 NMS(非极大值抑制)

- 端到端可微

5.2 Object Queries

DETR 使用可学习的 object queries(检测"问题"):

- N 个 query,每个代表一个潜在目标

- 通过 Cross-Attention 与图像特征交互

- 输出该位置是否有目标 + 目标的类别和位置

5.3 匈牙利匹配

训练时将 N 个预测与 M 个 GT 做最优二分匹配:

- 代价 = -log P_class + L1_bbox + GIoU

- 确保一对一匹配(不重复)

- 自然地解决了重复检测问题


第六部分:迁移学习到驾驶场景

6.1 三种迁移策略

策略 做法 适用场景
Linear Probing 冻结 backbone,只训练分类头 快速评估、数据少
Full Fine-tuning 全部训练 数据充足、追求最佳效果
LoRA 只训练低秩适配器 参数高效、快速适配

6.2 驾驶场景多任务

将预训练 ViT 用于驾驶场景:

1. 目标检测 → 车辆、行人、交通标志

2. 可行驶区域 → 哪里可以开

3. 交通灯状态 → 红灯/黄灯/绿灯


总结

本章建立的核心能力:

1. ✅ ViT 从零实现 → 理解"图像即 Token"

2. ✅ MAE 自监督预训练 → 从遮挡中学习

3. ✅ DINO 自蒸馏 → 无标签的特征学习

4. ✅ Swin/DETR → 层次化 + 端到端检测

5. ✅ 注意力可视化 → 理解模型决策

6. ✅ 下游迁移 → 适配驾驶场景


下一章:视觉-语言对齐 (CLIP) — 将视觉与语言统一起来