ViT
概括
论文题目:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
论文地址:https://openreview.net/pdf?id=YicbFdNTTy
作者来自 Google
亮点:
- 一些有趣的特性:
- CNN 处理不太好但是 ViT 可以处理好的例子:
- 遮挡
- 数据分布偏移
- 加入对抗性的 patch
- 排列
作者认为:
- 对于 CNN 的依赖是不必要的
- 纯 Transformer 可以做到和 CNN 媲美的结果
- Transformer 需要更少的训练资源,即使如此,也需要 2500 TPUv3 天数。这里说的少,只是跟更耗卡的模型做对比。
- 在 CV 使用 Transformer
- 难点:
- 像素点过多,而 maxlength 太短
- 于是前人提出许多思路,降低 length 长度:
- 用 ResNet 最后的特征图 \(14 \times 14=196\) 输入 transformer
- 用局部小窗口或者把图像这个二维的拆成两个一维的向量
- 没有硬件加速,模型都无法做到太大
- 大规模还是 ResNet 效果最好
- 难点:
- 于是 ViT 做法:
- 模型
- 把一张图片分成很多 patch,每一个 patch 的大小为 16 * 16
- 由于 224 / 16 = 14,因此共有 14 * 14 个 patch
- 所以 length 为 14 * 14 = 196
- 然后把每一个 patch 通过一个 linear embedding,这些再作为输入传给 Transformer
- 训练
- 用有监督的方式训练,原因是 cv 还是需要有监督的
- 有钱
- 之前有一个思路一样的,但是那个作者没钱
- 模型
- 一些结果
- 中型大小数据集上,ViT 比同等大小的 ResNet 要弱几个点,作者认为原因有
- Transformer 模型缺少一些 CNN 的归纳偏置
- 局部临近 locality
- 相邻的图片有相邻的特征
- 平移等变性 translation equivariance:
- \(f(g(x)) = g(f(x))\)
- 即函数顺序变换最后结果也一样。
- 在 CNN 中,即为相同的物体无论平移到哪里,只要遇到相同的卷积核,那么输出一样。
- 局部临近 locality
- 因此 Transformer 缺少一些 CNN 拥有的前置知识,需要自己从数据里学。
- Transformer 模型缺少一些 CNN 的归纳偏置
- 于是作者又在大规模的数据集上学习,效果很好,得到与 ResNet 相近或者更好的结果。
- 中型大小数据集上,ViT 比同等大小的 ResNet 要弱几个点,作者认为原因有
模型
模型介绍
- 首先给定一张图,然后把这张图打成许多个 patch
- 然后每个 patch 通过一个线性的投射层得到一个特征。
- 再通过 Patch + Position Embedding 的方式,把位置编码弄上去。
- 丢进 TFM enc。
- 然后拿 [CLS] 最后对应的 representation 丢进一个 MLP Head 里。
图像的维度从 \(224 \times 224 \times 3\),变成了一个有 196 个有的 \(16 \times 16 \times 3 = 768\) 维度的 patch。
线性投射层是一个全连接层,维度是 \(D \times D = 768 \times 768\).
然后要加上 [CLS] token
最后加上位置编码信息
- 具体是把位置编码编成一张表,每一个位置对应一个向量
- 位置编码,三种效果差不多
- 作者做了 1D 的位置编码。常规方法。
- 2D 的做法:假设之前 1D 的位置编码维度是 D,2D 的位置编码横坐标有 \(\frac{D}{2}\) 的维度,纵坐标亦然,然后直接拼在一起。
- 相对位置编码:两个 patch 之间的距离可以用相对距离来表示
归纳偏置,ViT 比 CNN 少了很多归纳偏置
- CNN 中,局部性和平移等变性在模型每一层都有所体现,因此先验知识贯穿模型始终。
- 而 ViT 中,只有 MLP 这个层有局部性和平移等变性,自注意力层是全局的。
作者还做了一个混合的网络,前面 CNN,后面 TFM
预训练以及更大的图片
图片更大,patch 的个数也变了,于是位置编码也会变。
- 作者直接用了 pytorch 官方自带的 interpolate 函数做 2D 插值。
- 这个插值只能算一个临时解决方案,是 ViT 的局限性。
实验
主要对比 ResNet,ViT,hybrid
下游任务主要是分类
实验结果
、
ImageNet 结果
- 中型大小数据集上,ViT 比同等大小的 ResNet 要弱几个点
- 大型数据集上,ViT 几乎全面超过 ResNet
线性 5-shot 评估
- 没有经过微调
- 结果同上
- 同等预训练计算复杂度下,ViT 比 ResNet 强
- 预训练计算次数小时,混合模型最强
- 数据越来越大时,ViT 越来越强,接近超越混合模型和 ResNet
- ViT 和 ResNet 模型似乎都没有饱和,仍然可以继续往上走