跳转至

第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] 对应输出再经全连接分类头完成图像分类。具体流程如下:

  1. 把输入图像分成固定大小的 patch,如 \(16\times16\)\(32\times32\)。一幅 \(224\times224\)、3 通道 RGB 图像按 \(16\times16\) 分块,共有 \((224/16)^2=196\) 块。
  2. 每个 patch 展平并线性映射成 token,再在开头加入 [CLS]。例中序列长度为 197,每个 token 维度为 768。
  3. 给 token 序列加可学习位置编码,可以采用一维或二维方案。
  4. 将序列送入标准 Transformer Encoder。
  5. [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 的条件下做自监督预训练。课件流程为:

  1. 图像分块,经线性层和位置编码得到 image tokens;
  2. 随机打乱 token,按 masking ratio 丢弃后半部分;
  3. 只把未掩码 token 送入 Encoder,获得隐含表示;
  4. 将 Encoder 输出与可学习的 masked tokens、被掩码 patch 的位置编码组合,经 unshuffle 恢复原顺序;
  5. 把完整顺序送入轻量 Decoder,重建原图;
  6. 在 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\),字符识别率为

\[ AR=\frac{N_t-D_e-S_e-I_e}{N_t}. \]

对比结果如下:

方法 字符识别率
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 逐级降低空间分辨率、提高通道数。四个阶段的输出尺寸依次为

\[ \frac H4\times\frac W4\times C_1,\qquad \frac H8\times\frac W8\times C_2,\qquad \frac H{16}\times\frac W{16}\times C_3,\qquad \frac H{32}\times\frac W{32}\times C_4. \]

对第 \(i\) 级特征,解码器先用 MLP 把通道统一为 \(C\),再上采样到 \(H/4\times W/4\)。四级特征拼接后得到

\[ \frac H4\times\frac W4\times4C, \]

最后经一个 MLP 输出

\[ \frac H4\times\frac W4\times N_{cls} \]

的语义分割结果。这个结构直接融合粗粒度语义和细粒度空间信息,课件将其概括为“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”。

评论