TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

Vision Transformer: 将图像读作 16×16 图块的句子,以及为什么需要大量数据

状态:草稿(2026-10-13),部分实测。 示例是在笔记本电脑 CPU 上直接运行的值(code/07_vit.py,1 秒以内)。论文中的数据来自原文并连同条件一并复制,硬件则按等级记录。 编写规则:实测数据为基本原则,无法测量的数据标记为「未实测」。

目录

1. 注意力:观察所有配对的关系

Transformer(2017)是为翻译而创建的模型。其核心运算是 自注意力机制。它为句子中的每个单词创建三个向量。

通过单词 i 的查询与单词 j 的键进行点积来决定「i 应该关注 j 多少」,并按该比例混合值。

Attention(Q, K, V) = softmax( Q·Kᵀ / √d_k ) · V

论文这样解释了除以 √d_k 的原因。如果维度 d_k 很大,点积值就会变大(如果各分量均值为 0,方差为 1,则点积的方差为 d_k),这会导致 softmax 偏向一侧,从而使梯度变得非常小。通过相除将方差拉回 1 附近。

与卷积相比,差异非常明显。卷积的一个输出单元仅查看 3×3 的邻域,若要看远处则必须堆叠层(第 1 篇中的感受野)。而注意力机制 从第一层开始就查看所有位置。 关注谁不是由固定的窗口决定的,而是由数据(Q·K)决定的。

2. ViT:将图像视作图块组成的句子

ViT: 그림을 16×16 조각으로 자르면 「단어」가 된다 224×224 → 196조각(14×14) (4×4 로 줄여 그림) 선형 투영 = 16×16 합성곱 CLS 토큰 + 위치 임베딩(+) 트랜스포머 인코더 × L 셀프 어텐션: 모든 토큰 쌍을 본다 CLS 출력 → 분류 합성곱은 「가까운 것끼리」가 구조에 박혀 있다. ViT 는 첫 층부터 그림 전체를 볼 수 있는 대신, 그 규칙을 데이터에서 스스로 배워야 한다 → 데이터가 많이 든다
图:ViT 的结构,将图像切割为 16×16 的图块并进行线性投影,附加 CLS 标记和位置嵌入后输入到 Transformer 编码器中

Dosovitskiy 等人的 ViT 将图像变得像句子一样。

  1. 将 224×224 的图像切分为 16×16 的图块。14×14 = 196 个图块。
  2. 将单个图块(16×16×3 = 768 个数字)展平,并通过 线性投影转换为 D 维向量(标记)。
  3. 在最前面附加一个可学习的 CLS 标记。在最后一层中,使用该标记的输出来表示整幅图像并进行分类。
  4. 为每个标记加上 位置嵌入(可学习的向量)。
  5. 堆叠 L 层标准的 Transformer 编码器(自注意力机制 + MLP,均带有残差连接和层归一化)。
模型 层数 隐藏维度 D MLP 头数 参数量
ViT-Base 12 768 3072 12 8600万
ViT-Large 24 1024 4096 16 3.07亿
ViT-Huge 32 1280 5120 16 6.32亿

名称中的「/16」、「/14」表示图块大小。第 9 篇中的 SAM 所使用的图像编码器就是这个 ViT-Huge(图块大小 16)。

动手实践 1:图块 + 线性投影 = 步幅 16 的卷积

将图像切成图块并与矩阵相乘,与用步幅 16 滑动 16×16 滤镜的卷积是相同的计算。我们用相同的权重计算并比较了这两种方法(实测)。

224×224 → 패치 196개(14×14), 패치 하나 768개 숫자 → 64차원 토큰
「잘라서 선형 변환」과 「보폭 16 합성곱」의 최대 차 2.7e-15

唯一的差异是浮点数四舍五入带来的误差。实际实现中,这部分绝大多数也都是用单层卷积编写的。ViT 的第一层是「窗口不重叠的超大卷积」,而具备卷积特性的部分也就仅此而已。

动手实践 2:如果没有位置嵌入,就无法知道顺序

自注意力机制 不关心标记的顺序。 如果打乱输入标记,输出也只会跟着被同样打乱(置换等变性)。因此,即使将图像左上角的图块和右下角的图块互换,模型也无从知晓(实测)。

토큰 순서를 섞어 넣은 출력 == 원래 출력을 같은 순서로 섞은 것: 최대 차 1.3e-15
위치 임베딩을 더하면 같은 패치를 섞었을 때 출력이 달라진다: 상대 차 0.28

这就是为什么需要位置嵌入。在 ViT 论文的实验中(ViT-B/16,基于 ImageNet 每类 5 张图进行线性评估),如果没有位置嵌入则是 0.614,1D 可学习嵌入为 0.642,2D 嵌入为 0.640,相对位置为 0.640。 有与没有的差距很大,但具体是哪种类型则几乎没有区别。 这意味着在图块级别(14×14)下,即便只给出 1D 编号,模型也能自己学会 2D 布局。

3. 分辨率的代价

由于注意力机制会查看所有标记对,因此其开销是标记数量 N 的 平方(实测计算)。

输入单边长度 标记数量 N 注意力矩阵 N² 相比 224px
224 196 38,416 1.0倍
384 576 331,776 8.6倍
512 1,024 1,048,576 27.3倍
1024 4,096 16,777,216 436.7倍

SAM 的输入是 1024×1024。因此 SAM 的 ViT-H 在绝大多数层中仅在 14×14 窗口内部 进行注意力计算,而全局注意力仅保留在 4 层中(第 9 篇)。如果在分辨率很重要的任务中使用 ViT,就需要做出这种折中。

4. 为什么需要大量数据

ViT 论文最重要的结果不是准确率的数字,而是 随数据规模大小而发生的逆转。

模型(预训练数据) ImageNet top-1 预训练成本(TPUv3 核心·天)
ViT-H/14(JFT-300M) 88.55% 2,500
ViT-L/16(JFT-300M) 87.76% 680
ViT-L/16(ImageNet-21k) 85.30% 230
BiT-L(ResNet152×4, JFT-300M) 87.54% 9,900
Noisy Student(EfficientNet-L2) 88.4–88.5% 12,300

(论文表 2. ViT-H/14 微调分辨率为 518px,ViT-L/16 为 512px。)

论文用 归纳偏置来解释这个原因。卷积天生具有“相邻像素之间关系密切(局部性)”和“相同的图案在任何地方都一样(平移等变性)”的结构(第 1 篇)。在 ViT 中,具有这种性质的只有图像块(patch)内部的 MLP,而自注意力是全局的。因此,“多关注相邻图像块”这一规则 必须从数据中自行学习 ,如果数据较少,它会在学会该规则之前就把训练数据死记硬背下来。相反,如果数据充足,这种自由度就会变成优势。由于结构没有强制限定,它能够找到更适合数据的规则。

仔细观察实际训练好的 ViT,“ 即使在最底层 ”,一些注意力头也会观察整张图片的大部分区域,而另一些注意力头只关注附近区域,并且层数越深,观察的距离越远(论文第 4.5 节)。这相当于它自己生成了类似卷积那样进行局部观察的注意力头。

成本方面也很有趣。在上表中,ViT-H/14 比 BiT-L 更准确,而预训练成本约为后者的 1/4。只要数据充足,Transformer 在计算效率上也具有优势。

5. DeiT:仅使用 ImageNet 进行训练

大多数人无法获取 3 亿张私有数据。Touvron 等人提出的 DeiT(2021)展示了 仅使用 ImageNet-1k 就能很好地训练 ViT 的方法。秘诀有两个。

  1. 强数据增强与正则化。 全面使用了 RandAugment、mixup、CutMix、随机擦除(Random Erasing)、随机深度(Stochastic Depth)和重复增强(Repeated Augmentation)。在消融实验(DeiT-B,224px)中,同时去掉 mixup 和 CutMix 会使准确率从 81.8% 下降到 75.8%,去掉重复增强会下降到 76.5%,而去掉随机擦除或随机深度则会导致训练直接失败。这相当于通过扩大数据量来教给模型原本需要从数据中学习的归纳偏置。
  2. 蒸馏标记(Distillation Token)。 在 CLS 标记旁额外添加一个“模仿教师模型答案”的标记。教师模型是卷积网络(RegNetY-16GF,82.9%)。可以说,这是通过教师模型的答案继承了卷积的归纳偏置。
模型(仅 ImageNet-1k) 224px 384px
DeiT-B 81.8% 83.1%
DeiT-B + 蒸馏 83.4% 84.5%

训练仅需一台配备 8 张 GPU 的服务器 2–3 天(300 个轮次耗时 53 小时)。论文的其他地方也有“4 张 GPU 训练 3 天”的表述,原文中的条件前后略有出入。

6. 回归分层结构:Swin、Hiera

ViT 从头到尾都保持 14×14 的单一分辨率。对于检测和分割这样需要处理不同大小物体的任务,人们开始怀念卷积的 金字塔结构(高分辨率 → 低分辨率)。

诸如 MAE 等自监督预训练的原理将在姊妹系列(自监督·视频·姿态·体育)中进行探讨。

7. 局限性与我们的项目

因此,在 TT Score 中分工明确。 寻找球由卷积(HRNet 系列)负责, ,分割球台由 Transformer(SAM 2.1 的 Hiera)负责 。球台很大且结构简单,比赛开始时找一次即可,因此可以使用较重的 Transformer;而球很小且每帧都需要寻找,所以轻量且局部的卷积更为合适(TT Score 模型解剖第 1 篇)。

接下来的文章是使用 Transformer 重写检测的 DETR。它没有 Anchor,也没有 NMS。

TT 总结: 如果打乱拼图块的顺序,如果没有位置嵌入(Position Embedding),模型就察觉不到。这就好比把图像看作一堆拼图块。只有贴上编号标签,拼图才能拼好。

参考文献

登录后即可点赞

评论

还没有评论。

登录后即可发表评论