An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
核心思想
ViT 将图像切分为固定大小的 patch(如 16x16),将每个 patch 线性映射为 token,然后直接输入标准 Transformer Encoder 进行分类。这一工作证明了在大规模数据集预训练的条件下,纯 Transformer 架构可以在图像分类任务上匹配甚至超越 CNN。
方法详解
- Patch Embedding:将输入图像 $H \times W \times C$ 切分为 $N = HW/P^2$ 个 patch,每个 patch 展平后通过线性投影映射到 $D$ 维
- Position Embedding:使用可学习的 1D 位置编码
- [CLS] Token:在序列头部添加一个可学习的分类 token
- Transformer Encoder:标准的多头自注意力 + FFN 结构
- 分类头:取 [CLS] token 的输出接 MLP Head
实验结果
- 在 JFT-300M 上预训练后,ViT-L/16 在 ImageNet 上达到 87.76% top-1 准确率
- 在中小规模数据集上,ViT 表现不如 CNN(缺乏归纳偏置)
- 预训练数据量越大,ViT 的优势越明显
个人思考
- ViT 的成功关键在于大规模预训练,这体现了 Transformer 的 scaling law
- Patch 大小是一个关键超参数,直接影响计算量和性能
- 后续 DeiT 证明了通过蒸馏可以在 ImageNet-1K 上高效训练 ViT