An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
论文信息
文章题目:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
作者:Dosovitskiy, A., Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, M. Dehghani, Matthias Minderer, Georg Heigold, S. Gelly, Jakob Uszkoreit and N. Houlsby
时间:2020
来源:ICLR 2021 / ArXiv
paper:http://arxiv.org/pdf/2010.11929v1
code:https://github.com/google-research/vision_transformer , https://github.com/lucidrains/vit-pytorch , https://github.com/likelyzhao/vit-pytorch
引用:Dosovitskiy, A., Beyer, L., Kolesnikov, A., et al (2020). An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale.ArXiv, abs/2010.11929.
总体认知
- 研究的基本问题
将Transformer直接应用于图像领域,进行图像分类任务,而不修改Transformer架构,也不使用CNN。 - 主要想法
将image分割成大小一致的patch,对应于NLP中的token,再将其进行嵌入表示,成为Transformer的输入。在patch前加入一个class表示,对应全局信息(图片分类),进行最终的预测。 - 结果与结论
在中规模数据上,表现一般。在大规模数据集预训练下,表现优异。且节省训练开销。 - 不足与展望
1.无法保留图像的二维结构信息(局部特性,归纳偏置),要依靠大量数据来弥补。
2.预训练与微调的开销问题。如何更有效利用自监督的预训练。
3.将transformer应用于cv中的其他领域。
Introduction
先前的研究,attention经常要跟CNN结合使用,而在本篇文章中,在图像块(image patches)的序列上应用纯粹的Transformer模型也可以表现得很好。
将一个标准Transformer直接应用到图像上,尽可能少的修改。为此,我们将图像分割成小块,并将这些块转化为线性嵌入序列,作为Transformer的输入。图像块(image patches)就相当于NLP任务中的单词(token)来做处理。并以有监督的方式训练图像分类模型。
当在中等规模的数据集(如ImageNet)上进行训练时,模型的准确率比同等规模的resnet低几个百分点。这一看似令人沮丧的结果是意料之中的:Transformer缺乏cnn所固有的一些归纳偏置(inductive biases),如平移不变性(translation equivariance)和局部性(locality),因此在数据量不足的情况下训练时不能很好地泛化。
然而,如果在更大的数据集(1400 -300万张图像)上训练模型,情况就会发生变化。我们发现大规模的训练可以克服归纳偏置(inductive biases)。当ViT在足够的规模上进行预先训练,并迁移到具有较少数据量的任务时,可以获得出色的结果。
Method
VISION TRANSFORMER (VIT)
预处理
将一张图片(H×W×C)分割为N个图像块(P×P×C),图像块长宽为P和P,那么
N
=
(
H
∗
W
)
/
P
2
N=(H*W)/P^2
N=(H∗W)/P2
再把每个图像块展平后连接得到一个N×P^2×C的二维矩阵,这样就可以作
为Transformer的输入了。
但有一个问题,因为P是不固定的,那么得到的的每个patch的向量长度也是不一样的,为了模型不受patch size 大小的影响,作者引入了Linear Projection of Flattened Patches来把每个 P 2 × C P^2×C P2×C 维的patch大小线性映射成固定的D维,就是上图的淡粉色椭圆;
左边的淡紫色椭圆的就是transformer里面的位置编码,目的是为了方便增加注意力权重。在原文中作者提到,位置编码的维度大小是1D还是2D没什么太大区别,所以作者直接将位置编码和patches以同一个维度1D相结合了。
标准的接受token的一维嵌入向量作为输入。为了处理二维数据,要进行reshape。
原始图像输入:(H,W)是图片分辨率,C是通道数
x
∈
R
H
×
W
×
C
\mathrm{x}\in\mathbb{R}^{\mathrm{H}\times\mathrm{W}\times\mathrm{C}}
x∈RH×W×C
reshape之后,变为
其中P是patch的大小,N是patch的个数(Transformer的有效输入序列长度)
x
p
∈
R
N
×
(
P
2
.
C
)
\mathbf{x}_{p}\in\mathbb{R}^{N\times(P^{2}.C)}
xp∈RN×(P2.C)
flatten the patches然后利用可训练的线性投影E映射到D维
z
0
=
[
x
c
l
a
s
s
;
x
p
1
E
;
x
E
2
;
⋯
,
x
E
N
]
+
E
p
o
s
,
E
∈
R
(
P
2
⋅
C
)
×
D
,
E
p
o
s
∈
R
(
N
+
1
)
×
D
.
\mathbf{z}_0=\left[\mathbf{x}_{\mathrm{class}};\mathbf{x}^1_\mathbf{p}\mathbf{E};\mathbf{x}^2_\mathbf{E};\cdots,\mathbf{x}^N_\mathbf{E}\right]+\mathbf{E}_{\mathrm{pos}},\mathbb{E}\in\mathbb{R}^{\left(\mathbf{P}^2\cdot\mathbf{C}\right)\times\mathrm{D}},\mathbf{E}_\mathrm{pos}\in\Bbb{R}^{(\mathbf{N}+1)\times\mathrm{D}}.
z0=[xclass;xp1E;xE2;⋯,xEN]+Epos,E∈R(P2⋅C)×D,Epos∈R(N+1)×D.
映射后的结果称为 patch embeddings。
在patch前面添加一个可学习的xclass,代表着图片的标签信息(全局信息)
特征处理
- L×:重复L次这个结构
- Norm(LayerNorm,可以简称LN):目的是使特征图满足均值为0,方差为1的分布,加速网络的收敛。对于一个D维的输入X,对其每一个维度进行标准化处理。
- 由于BN不适合时序长度不固定的情形,所以提出LN,但是BN比LN在图像处理领域更有效.
- 多头注意力
- MLP:先Linear一次维度变为原来四倍,然后Linear维度回去
- 比如 z1 就是输入的 z0 先LN标准化后进行多头注意力机制提取特征,然后与 z0进行残差操作,进入公式3的MLP层,之后出来得到 z1
分类
经过transformer encoder之后,输出的shape仍然是没有变的,但是我们在最初的想法就是在[class]token中保存着特征信息以便分类,所以在MLP Head过程中,我们将输出的shape(197,768)进行切片成需要的分类shape(1,768)。
补充说明
归纳偏差(Inductive bias)
vit比cnn有更少的特定于图像的归纳偏差。在cnn中,局部性、二维邻域结构和平移不变性贯穿整个模型的每一层。在ViT中,只有MLP层是局部和平移等变的,而Self-attention是全局的。二维邻域结构使用地非常少:在模型开始时,将图像切割成小块,并在微调时对不同分辨率的图像进行位置嵌入调整。除此之外,初始化时的位置嵌入不包含块的二维位置信息,所有块之间的空间关系都需要从头学习。
归纳偏差是CNN固有的,
定义:从现实归纳出一定的规则,然后对模型做出相应的约束,从而实现模型的选择。
常见的归纳偏差:
- 局部相关性:图像的临近元素内容是相关的;
- 权重共享:图像的不同部分应该用相同方式处理,而不论位置在哪;
- 平移不变性:注意上面这些归纳偏差在CNN的每一层都会出现的,所以下一层可以继承上一层的空间关系。
- 然鹅ViT模型中,只有在图像切patch,以及进行高分辨率微调时的2D差值过程会有图像块的位置信息外, 初始化没有位置信息,所以空间信息要从头开始;
- 另外,只有MLP层有平移不变性和局部相关性,其他没有。
- 因为ViT模型缺少了归纳偏差,这就导致了在数据集不够大的情况下容易出现过拟合现象,模型的表现效果不如CNN。
可以看到在300M的时候ViT模型还可以继续增长,这说明:
(1)ViT性能上限大于ResTNet,抽象说,在数据量足够大的情况下,注意力机制可以完全替代CNN;
(2)归纳偏置只在中小数据集中做出表现,在大型数据集下,学习相关模式就可以;
transformer和CNN混合结构(Hybrid Architecture)
混合结构是transformer迁移到CV领域的另一种思路,在本文中,作者将原来的图像块patches替换为CNN的feature map,由结果来看,在中小型数据集上,该结构效果不错,但随着数据集的增大,被纯transformer所超过(surprising)
微调和更高的分辨率 (FINE-TUNING AND HIGHER RESOLUTION)
通常,在大型数据集上预训练ViT,并微调到(较小的)下游任务。
为此,我们去掉预先训练的预测头,并附加一个零初始化的D*K前馈层,其中K是下游类的数量。
作者对于高分辨率的图像使用了个小trick:训练大模型的时候并没有扩大patch的大小,而是使用相同patch大小,对应的,图像块 N 的个数增多,变为 N’ 。
这样做的结果就是position embedding个数不足。
因为预训练时,position embedding 和 patch embedding 的个数是相同的,然而现在换成了高分辨率图像,patch embedding 个数增多,所以缺少了 N’ - N 个位置编码。
所以作者进行了2D差值解决这个问题。
transformer的合理性
作者给出的实验结果中,位置编码在每个位置与其他位置的余弦相似度可以看出来,距离越近的图像块更相似,同一行/列的图像块相似度比较大,
而且随着网络深度的增加,MSA的注意力距离达到平衡,并且注意力距离 ≈ CNN中感受大小;
那么就可以说明,transformer在某种情况下和CNN有一定的关系
另外transformer学习到的感兴趣区域和图像中的物体轮廓基本吻合,进一步验证了在CV领域使用transformer的合理性。
实验(EXPERIMENTS)
评估了ResNet、Vision Transformer (ViT)和hybrid的学习能力。为了了解每个模型的数据需求,对不同大小的数据集进行了预训练,并评估了许多基准任务。在考虑模型预训练的计算成本时,ViT表现得非常好,以较低的预训练成本在大多数识别基准上达到了最先进的水平。
setup
数据集(datasets):各种大小的数据集以及测试baseline。
模型变体(Model Variants):基于BERT配置VIT,各种大小的VIT(base,large,huge),patch的大小P也是可调的,P越大,序列长度越小。P越小,长度越长,计算开销越大。
与当前最佳工作 STATE OF THE ART(SOTA)对比
在流行的图像分类benchmark上与现有技术进行比较
卷积归纳偏差对于较小的数据集是有用的,但对于较大的数据集,直接从数据中学习相关模式是足够的,甚至是有益的。
结论(CONCLUSION)
探讨了Transformer在图像识别中的直接应用。与之前在计算机视觉中使用Self-attention的工作不同,除了初始的patch提取步骤,我们不引入图像特有的归纳偏差到架构中。相反,我们将图像解释为一系列块,并使用NLP中使用的标准Transformer编码器来处理它。这种简单但可扩展的策略,在与大型数据集的预训练相结合时,效果惊人地好。因此,视觉Transformer 在许多图像分类数据集上匹配或超过了最先进的水平,同时相对低成本地进行预训练。
仍然存在许多挑战。一种是将ViT应用于其他计算机视觉任务,如检测和分割。我们的研究结果,以及Carion等人(2020年)的研究结果,表明了这种方法的前景。另一个挑战是继续探索自监督的预训练方法。我们的初步实验表明,自监督的预训练有所改善,但自监督的预训练与大规模监督的预训练之间仍有很大的差距。最后,进一步扩展ViT可能会提高性能。
参考https://zhuanlan.zhihu.com/p/422144659