第9讲 深度学习(六)
一、基于 Transformer 的图像识别
1.1 Vision Transformer
序列模型能否用于视觉任务,要先看到 NLP 与 CV 的差别:NLP 文本语义密集,CV 图像冗余度高;NLP 重建通常预测离散文本,CV 重建预测像素;骨干网络也分别以 Transformer 和 CNN 为代表。把 Transformer 用于图像,关键是把二维图像转成序列,并在序列中保留二维空间位置。
一种办法是先用 CNN 提取特征图,再把特征图展平成序列;ViT 则直接把图像分块,每个图像子块经线性映射后送入 Transformer。这样的“分块+线性映射”也可以用卷积实现。
Vision Transformer(ViT)把图像子块序列输入类似 BERT 的 Transformer Encoder,并添加 [CLS] token;[CLS] 对应输出再经全连接分类头完成图像分类。具体流程如下:
- 把输入图像分成固定大小的 patch,如 \(16\times16\) 或 \(32\times32\)。一幅 \(224\times224\)、3 通道 RGB 图像按 \(16\times16\) 分块,共有 \((224/16)^2=196\) 块。
- 每个 patch 展平并线性映射成 token,再在开头加入
[CLS]。例中序列长度为 197,每个 token 维度为 768。 - 给 token 序列加可学习位置编码,可以采用一维或二维方案。
- 将序列送入标准 Transformer Encoder。
- 用
[CLS]对应分类头输出结果。
ViT 论文中的典型网络规模为:ViT-Base 含 12 层、隐藏维 768、MLP 维 3072、12 个头、约 86M 参数;ViT-Large 含 24 层、隐藏维 1024、MLP 维 4096、16 个头、约 307M 参数;ViT-Huge 含 32 层、隐藏维 1280、MLP 维 5120、16 个头、约 632M 参数。
课件给出的迁移结果和训练资源如下:
| 数据集或资源 | Ours-JFT,ViT-H/14 | Ours-JFT,ViT-L/16 | Ours-I21k,ViT-L/16 | BiT-L,ResNet152x4 | Noisy Student,EfficientNet-L2 |
|---|---|---|---|---|---|
| ImageNet | \(88.55\pm0.04\) | \(87.76\pm0.03\) | \(85.30\pm0.02\) | \(87.54\pm0.02\) | 88.4/88.5* |
| ImageNet ReaL | \(90.72\pm0.05\) | \(90.54\pm0.03\) | \(88.62\pm0.05\) | 90.54 | 90.55 |
| CIFAR-10 | \(99.50\pm0.06\) | \(99.42\pm0.03\) | \(99.15\pm0.03\) | \(99.37\pm0.06\) | — |
| CIFAR-100 | \(94.55\pm0.04\) | \(93.90\pm0.05\) | \(93.25\pm0.05\) | \(93.51\pm0.08\) | — |
| Oxford-IIIT Pets | \(97.56\pm0.03\) | \(97.32\pm0.11\) | \(94.67\pm0.15\) | \(96.62\pm0.23\) | — |
| Oxford Flowers-102 | \(99.68\pm0.02\) | \(99.74\pm0.00\) | \(99.61\pm0.02\) | \(99.63\pm0.03\) | — |
| VTAB,19 tasks | \(77.63\pm0.23\) | \(76.28\pm0.46\) | \(72.72\pm0.21\) | \(76.29\pm1.70\) | — |
| TPUv3 core-days | 2.5k | 0.68k | 0.23k | 9.9k | 12.3k |
这张表同时比较准确率和训练资源;ViT-H/14 的多项迁移结果最高,而相较 BiT-L 和 Noisy Student,其 TPUv3 core-days 明显更少。课件没有展开星号注释,因此表中原样保留 88.4/88.5*。
课件给出的 patchify 实现接收 (N,3,H,W),令 patch 边长为 \(p\)、\(h=w=H/p\),先变形为 (N,3,h,p,w,p),再用 torch.einsum('nchpwq->nhwpqc', x) 调整维度,最后变成 (N,h*w,p**2*3)。[CLS] 与位置编码可定义为:
self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim))
self.pos_embed = nn.Parameter(
torch.zeros(1, num_patches + 1, embed_dim),
requires_grad=True,
)
实验使用 ImageNet(1000 类、1.3M 图像)和用于预训练的 JFT(18k 类、303M 图像),计算量以 TPU v3 core-days 衡量。初始 RGB 线性嵌入权重的可视化很像 CNN 底层卷积核,能感知边缘与颜色;学习到的位置编码能有效区分 patch 位置,其余位置与某个 patch 的余弦相似度也呈现二维邻近结构。随着层数加深,一部分注意力头的平均注意距离扩大,另一部分仍保持局部关注,说明 ViT 能同时利用局部和全局信息。
ViT 有明显的数据规模效应:预训练数据越大,大模型越占优势。在小数据集上预训练时,ViT 对数据量更敏感,大型 ViT 甚至不如 BiT ResNet;在大数据集预训练时,ViT 的优势变得明显,并超过采用大规模预训练的 BiT ResNet。
1.2 掩码自编码器 MAE
MAE(Masked Autoencoder)以 ViT 为基础,在随机舍弃 75% 图像 patch 的条件下做自监督预训练。课件流程为:
- 图像分块,经线性层和位置编码得到 image tokens;
- 随机打乱 token,按 masking ratio 丢弃后半部分;
- 只把未掩码 token 送入 Encoder,获得隐含表示;
- 将 Encoder 输出与可学习的 masked tokens、被掩码 patch 的位置编码组合,经 unshuffle 恢复原顺序;
- 把完整顺序送入轻量 Decoder,重建原图;
- 在 ImageNet-1K 上完成自监督预训练后,只取编码器,通过下游任务监督学习得到最终模型。
重建示例表明,即使随机遮掉 75% patch,模型仍可恢复图像主体;这种预训练迫使编码器学习图像的空间上下文依赖。
1.3 Swin Transformer
Swin Transformer 采用层次化结构和窗口局部注意力。相邻层的窗口发生位移,使不同窗口间也能交换信息;每层还使用可学习的窗口内相对位置编码,而 ViT 只在输入处加入可学习位置编码。它可用于图像分类、目标检测和语义分割等多种视觉任务。
以 Swin-T 为例,初始通道数 \(C=96\),四阶段层数为 \(\{2,2,6,2\}\),相邻 Transformer block 交替使用普通窗口与 shifted window。课件列出的变体为:
| 模型 | \(C\) | 四阶段层数 |
|---|---|---|
| Swin-T | 96 | \(\{2,2,6,2\}\) |
| Swin-S | 96 | \(\{2,2,18,2\}\) |
| Swin-B | 128 | \(\{2,2,18,2\}\) |
| Swin-L | 192 | \(\{2,2,18,2\}\) |
实验在 ImageNet-1K 上比较这些分类变体,并用 Swin-T 做消融,覆盖 ImageNet 分类、COCO 目标检测与实例分割、ADE20K 语义分割。
ImageNet-22K 预训练模型的比较为:
| 方法 | 图像尺寸 | 参数量 | FLOPs | 吞吐量,image/s | ImageNet top-1 |
|---|---|---|---|---|---|
| R-101x3 | \(384^2\) | 388M | 204.6G | — | 84.4 |
| R-152x4 | \(480^2\) | 937M | 840.5G | — | 85.4 |
| ViT-B/16 | \(384^2\) | 86M | 55.4G | 85.9 | 84.0 |
| ViT-L/16 | \(384^2\) | 307M | 190.7G | 27.3 | 85.2 |
| Swin-B | \(224^2\) | 88M | 15.4G | 278.1 | 85.2 |
| Swin-B | \(384^2\) | 88M | 47.0G | 84.7 | 86.4 |
| Swin-L | \(384^2\) | 197M | 103.9G | 42.1 | 87.3 |
Swin-T 的消融结果是:
| 设置 | ImageNet top-1 | ImageNet top-5 | COCO \(AP^{box}\) | COCO \(AP^{mask}\) | ADE20K mIoU |
|---|---|---|---|---|---|
| w/o shifting | 80.2 | 95.1 | 47.7 | 41.5 | 43.3 |
| shifted windows | 81.3 | 95.6 | 50.5 | 43.7 | 46.1 |
| no pos. | 80.1 | 94.9 | 49.2 | 42.6 | 43.8 |
| abs. pos. | 80.5 | 95.2 | 49.0 | 42.4 | 43.2 |
| abs.+rel. pos. | 81.3 | 95.6 | 50.2 | 43.4 | 44.0 |
| rel. pos. w/o app. | 79.3 | 94.7 | 48.2 | 41.9 | 44.1 |
| rel. pos. | 81.3 | 95.6 | 50.5 | 43.7 | 46.1 |
shifted windows 在三类任务上都优于不移位窗口;完整的相对位置编码配置在分类、检测、实例分割和语义分割上取得这组消融中的最好或并列最好结果。
1.4 基于视觉提示学习的手写文字识别
手写文字风格多变,模型既要关注字符局部笔画,也要利用全局结构。课件借鉴大语言模型提示学习以及图像分类中的 CoCoOp(Conditional Context Optimization),采用可学习向量作为视觉提示,使文字表征能随风格自适应。
编码器用视觉提示聚合手写文本行的局部与全局上下文,并加入几何结构约束,使提示关注文字几何结构;解码器则由字符视觉特征引导,以更好地对齐文本表示和视觉表示。
实验数据集 SCUT-HCCDoc 含 93,254 幅训练文本行和 23,484 幅测试文本行。若真值字符总数为 \(N_t\),识别结果相对真值的删除、替换、插入数分别为 \(D_e,S_e,I_e\),字符识别率为
对比结果如下:
| 方法 | 字符识别率 |
|---|---|
| Peng et al. | 90.71% |
| Li et al. | 92.72% |
| 基线方法 | 91.29% |
| 本方法 | 92.78% |
| 本方法(额外训练数据) | 93.18% |
可视化显示,编码器视觉提示的注意系数突出笔画边缘。解码器末层注意力也更准确:基线把“丹心照夙昔,鬓发日已改。”中的“夙”误成“凤”,本方法能正确识别“夙”。主要错误仍包括相似字错误,如把“宽阔之处是生活的至高境界”识成“主高境界”;以及连写字错误,如把“可能我自己都描述不出来”识成“可能我自己都牺述不妹”。对相似字混淆,可以在解码阶段引入基于 GPT 的语言模型纠错,把“主高境界”修正为“至高境界”。
二、基于 Transformer 的图像分割
2.1 SegFormer
SegFormer 是面向语义分割的 Transformer,由层次化 Transformer 编码器和轻量级 All-MLP 解码器组成。编码器先用 Overlap Patch Embeddings 生成第一层特征,每个 Transformer block 内依次使用 Efficient Self-Attention 和 Mix-FFN,block 之间通过 Overlap Patch Merging 逐级降低空间分辨率、提高通道数。四个阶段的输出尺寸依次为
对第 \(i\) 级特征,解码器先用 MLP 把通道统一为 \(C\),再上采样到 \(H/4\times W/4\)。四级特征拼接后得到
最后经一个 MLP 输出
的语义分割结果。这个结构直接融合粗粒度语义和细粒度空间信息,课件将其概括为“hierarchical Transformer encoder + lightweight All-MLP decoder”,论文标题是 Simple and Efficient Design for Semantic Segmentation with Transformers。
2.2 Segment Anything Model
SAM(Segment Anything Model)由 Meta AI 于 2023 年 4 月 5 日发布。它接受点、物体外接框等多种分割提示,用 1100 万幅图像和超过 10 亿个实例掩膜训练。数据标注分三阶段:程序交互辅助人工标注、半自动标注、利用规则网格点提示自动标注;自动阶段平均约产生 100 个 mask/图像。SAM 能以 zero-shot 方式适应具有不同图像分布、不同任务要求的下游分割,并可输出高质量语义/实例区域。
三、基于 Transformer 的目标检测
3.1 DETR
DETR(End-to-End Object Detection with Transformers)先用 CNN 提取图像特征并加入位置编码。Transformer Decoder 并行解码:object queries 是待预测物体的可学习表示,图像特征作为 keys 和 values。它的优点是端到端检测和并行处理;缺点是计算复杂度高、object query 数量固定、输入特征分辨率较低。
3.2 Deformable DETR
Deformable DETR 引入可变形注意力:每个参考点只关注邻域内少量采样点,不再对全局所有位置计算注意力;同时使用多层次特征融合、迭代边界框校正和两阶段检测模式,以改进 DETR。
本讲要求
本讲应掌握自监督预训练,以及基于 Transformer 的图像识别、语义分割和目标检测。编程实践为网络学堂第 9 讲的“基于 Vision Transformer 的 Masked Autoencoders”。