AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
摘要:
当Transformer成为NLP任务中的标准结构时,但它在机器视觉的应用中仍然存在很多限制。在视觉任务中,注意力机制已经与卷积神经网络结合使用,或者被用作替换卷积中的某些组件来保持其结构完整性。卷积神经网络不是必要的,我们能够将原始的transformer直接应用在图像序列块上,且能够在图像分类任务中很好的work。当在大型数据集上进行预训练时,然后迁移到中小型数据集上进行识别(如,ImageNet、CIFAR-100、VTAB等),ViT能够比最先进的卷积神经网络模型还要达到更好的结果,相比而言还能够用更少的资源去训练。
分析:此篇论文是Google发表在ICLR 2021的一篇论文,它是计算机视觉领域的开山之作。这篇论文提出的Vison Transformer打破了CV和NLP在模型上的鸿沟,在这篇论文发表后的一年之内,各种基于VIT的开源论文已经有了上百篇,它开启了CV的一个新时代。
1 介绍
基于自我注意力的架构,特别是Transformers(V aswani et al, 2017),已经成为自然语言处理(NLP)的首选模型。主要的方法是在大型文本语料库上进行预训练,然后在较小的特定于任务的数据集上进行微调(Devlin等人,2019)。得益于Transformer的计算效率和可扩展性,训练具有超过100B个参数的空前规模的模型成为可能(Brown et al, 2020;Lepikhin等人,2020)。随着模型和数据集的增长,性能仍然没有饱和的迹象。
分析:介绍Transformer在自然语言处理领域扩展得很好,越大的数据或者模型去训练transformer的性能就会一直上升。
然而,在计算机视觉中,卷积架构仍然占主导地位(LeCun等人,1989;Krizhevsky等人,2012;He et al, 2016)。受到NLP成功的启发,很多工作都在努力尝试结合卷积和自注意力(Wang et al, 2018;Carion等人,2020),一些工作完全去掉了卷积层(Ramachandran等人,2019;Wang et al, 2020a)。后一种模型虽然理论上是有效的,但由于使用了特殊的注意力模式,它未能在现代硬件加速器上进行有效的扩展。因此,在大规模的图像分类中,基于ResNet的骨架网络仍然是最先进的(Mahajan等人,2018;谢等,2020;科列斯尼科夫等人,2020)。
分析:介绍前人的一些工作的结果如何,包括结合卷积和自注意力的Local Network,还有完全去掉卷积层的Stand-Alone Attention和Axial Attention,但是从来没有工作直接把Transformer用到视觉领域,而且都没有很好的扩展效果。
受到Transformer在NLP领域大规模成功的启发,我们实验时直接将一个标准的Transformer应用到图像上,并伴随着尽可能少的改动。我们把图像划分成patch块并让它们经过序列映射linear embeddings,作为像Transformer一样的输入。图像块patch的处理方式与NLP中的token词向量是相同的。我们在图像分类中用有监督的方式训练模型。
分析:介绍了Vit这篇论文做了什么事,它如何去处理输入的长序列,所使用的是标准的Transformer模型,这样彻底可以把一个视觉问题理解成是一个NLP问题,能够实现CV和NLP领域的大一统。
当在中等规模的数据集如ImageNet上训练没有很强的正则化,这些模型的结果比同等规模的ResNet准确率要低几个百分点。这个看起来令人沮丧的结果似乎是可以预期的: Tranformers与CNN相比缺乏固定的inductive biases感应偏差,就像平移不变性、尺度不变性等,因此在数据量不足的训练集上训练没有产生一个很好的预期。
分析:解释为什么Transformer比起CNN在中小型的数据集上去做训练为什么准确率低,接着换一种思路,将数据集扩大看训练效果如何。
然而,如果模型在更大的数据集(14M-300M图像)上训练,情况就会发生变化。我们发现在大规模数据集进行训练能够比卷积的归纳偏置更好。我们的ViT在足够规模数据进行预训练后再迁移到更小规模的任务中能够达到更好的结果。当在共有数据集ImageNet-21K或者JFT-300M上进行预训练后,ViT能够打败其它基于各种的识别骨干网络。特别的,在ImageNet上达到88.55%准确率、在ImageNet-ReaL上为90.72%、CIFAR-100为94.55%,在VTAB的19种任务中达到77.63%。
分析:展示结果,让Transformer在更大的数据集上去做预训练,通过一系列的结果去证明只要在有足够数据去预训练的情况下Vit就能在很多数据集上取得很好的效果。
2 相关工作
Transformer由Vaswani等人(2017)在机器翻译中提出,并已成为许多NLP任务中的最先进方法。大型基于Transformer的模型,通常都是基于大型语义库预训练,然后微调去处理手头的工作:BERT (Devlin等人,2019) 使用去噪的自监督预训练任务,同时GPT工作线将语言建模作为其训练前的任务(Radford等人,2018;2019;Brown et al, 2020)。
分析:介绍了Transformer在NLP领域当中的应用。
单纯的应用自注意力到图像需要每一个像素点都关注其它像素点。由于像素平方级的计算开销,无法扩展到实际的图像输入。因此,为应用Transformer到图像处理中,过去类似的工作在被展开。Parmar等人(2018) 应用自注意力时仅仅是基于局部像素而不是全局。这样的局部多头自注意力块,能够完全取代卷积(Hu et al, 2019;Ramachandran等人,2019;Zhao等,2020)。在不同的工作,Sparse Transformer (Child等人,2019)采用近似可伸缩的全局注意力,以便适用于图像。一种可替代的方式是应用缩放的注意力针对其不同大小的块(Weissenborn等人,2019),在极端案例下仅沿单个轴进行操作(Ho等人,2019;Wang et al, 2020a)。许多不同的特定注意力结构都很好的证明了Transformer在机器视觉任务中是很有前景,但是需要复杂的工程量以及高效的可加速计算的硬件。
分析:介绍了自注意力在视觉当中的应用。
与我们模型最接近的是Cordonnier et al(2020)的工作,从图像输入中提取2×2大小的patch并在顶部完全应用自注意力。这个模型和ViT非常相似,但我们的工作从更加长远的角度证明了在大规模预训练后Transformer能够取得甚至比sota-CNN模型更好的结果。此外,Cordonnier et al(2020) 使用一个2×2像素的小patch仅仅把模型应用在小分辨率的图像上,同时,我们处理了中等分辨率的图像。
分析:介绍了一些和Vison Transformer相似的工作,指出Vison Transformer的优势所在,Vison Transformer用了更大的patch和更多的数据集去训练了一个更好的Transformer。
也有很多人对将卷积神经网络(CNN)与自我注意力的形式相结合感兴趣,例如增强特征映射图用于图像分类(Bello等人,2019)或利用自我注意力处理CNN的输出,例如用于目标检测(Hu等人,2018;Carion等人,2020),视频处理(Wang等人,2018;Sun等人,2019),图像分类(Wu等人,2020),无监督的对象发现(Locatello等人,2020),或统一的文本视觉任务(Chen等人,2020c;Lu等,2019;Li等人,2019)。
分析:介绍了CNN和自我注意力相结合的图像处理相关工作,涵盖了计算机视觉里的很多任务。
另一个近期相关的模型是图像GPT (iGPT) (Chen et al, 2020a),应用Transformer到减小分辨率之后的图像及颜色空间。这个模型是一种无监督的生成模型,结果表明模型能够被预训练微调或线性探测用于提高分类性能。在ImageNet实现了72%的准确率。
分析:介绍了和他们工作相近的一些工作。
我们的工作增加了比标准ImageNet数据集更大范围内探索图像识别论文的数量。使用额外的数据源可以在标准基准上实现最先进的结果(Mahajan等人,2018;Touvron等人,2019;谢等,2020)。此外,Sun等人(2017)研究了CNN的性能与数据大小的关系,和Kolesnikov等人(2020);Djolonga等人(2020) 从大规模数据集ImageNet-21K和JFT-300M对CNN迁移学习进行实证探索。我们更加倾向这两个数据集,训练Transformer替代以前基于ResNet的模型。
分析:介绍了Vison Transformer所用的数据集,去看当在更大的数据集上去做预训练迁移学习的效果会怎么样。
3 方法
图1:模型概述。我们把图像划分成固定大小的图像块,对全部进行线性映射,增加位置信息编码,然后把序列的结果向量传入标准的Transformer Encoder。为了分类,我们使用标准的方法往序列中添加一个额外的可学习参数“classification token”。上图右边的Transformer Encoder插图灵感来源于Vaswani(2017)
在模型设计中,本篇论文尽可能遵循原始的Transformer(V aswani等人,2017)。这种有意简化设计的一个优点就是,可扩展的NLP Transformer架构及能够及拿及用的高效的实现。
3.1 VISION TRANSFORMER (VIT)
模型概述如图1所示。标准的Transformer接收的是一维的token embedding序列。为了处理二维的图像,我们reshape图像x∈RH×W ×C重塑为一个二维的patch块xp∈RN×(p2·C),其中(H, W)为原始图像的分辨率,C为通道数,(P, P)为每个图像块的分辨率,N = HW/ p2为得到的patch块的数量,这也作为Transformer的有效输入序列长度。Transformer所有层使用的都是固定的向量,大小为D;所以我们将patch块flatten拉平成一维序列然后通过线性映射到D维(如图1)。我们称线性映射层this projection的输出为patch embedding。
与BERT的[class] token相似,我们给序列映射后的编码准备了一个可学习的映射x_class,Transformer encoder的输出用序列的(z_0) 图像表示y(Eq.4)。基于预训练和微调,z_0用于分类头。分类头在预训练时,由一个隐含层的MLP实现,在微调时由简单的线性层来实现。
位置编码被用于增加patch embedding的原始位置信息。我们使用1维的位置信息编码,因为二维的位置信息编码并没有发现有更好的性能(D.4)。生成的序列向量被用于encoder的输入。
Transformer encoder包含交替的多头注意力机制及MLP块(Eq. 2,3)。LN层被用在每个MLP块前面,在每个块之后进行残差连接。MLP多层感知机包含两层以及GELU非线性激活函数。
图二:Tranformer中各公式
分析:Vit的结构十分简洁,它的特殊之处在于如何把一张图片变成一系列的token。它首先是把图片打成许多patch块,其中包含了原本的信息和所在的位置信息;接着就得到了Transformer编码器的输入,即一个一个的token,在这些token中还要增加一个特殊的分类字符cls,增加的cls能从别的token中去学到有用的信息,只用根据它的输出去做一个最后的判断;经过线性投射层就得到了patching embeding;之后通过MLP Head即一个通用的分类头,使用交叉熵函数去进行模型的训练。
归纳偏置。我们注意到Vision Transformer比起CNN针对图像而言有更少的归纳偏置。CNN中,每一层卷积核的局部性、二维领域结构、平移不变性等始终贯穿整个模型。在ViT中,只有MLP层有这些特性,自注意力层都是全局信息。二维的结构很少被用在ViT中:模型最初,把图像剪切成很多图像块,在微调时调整不同图像分辨率的位置信息(如下所述)。位置信息编码在初始化时没有携带任何的二维图像块信息,所有位置信息的空间关系都需要从头开始学习。
混合模型。作为原始图像块的替代,输入的序列可以由卷积获取的特征图来替代。在这个hybrid模型中,patch embedding projection从CNN特征图中进行提取。特别的,特征图的大小可以是特殊的1×1,这意味着可以简单的把卷积的特征图拉平并投影变换到Transformer的维度。如上所示,添加了分类的输入及位置编码。
分析:混合模型是指一整张图片输入进来,通过一个CNN之后得到特征图,将得到的特征图拉直之后再去和全连接层进行操作。
3.2 FINE-TUNING ADN HIGHER RESOLUTION
典型的,我们在大数据集上预训练ViT模型,在更小的下游任务中进行微调。我们移除了预训练好的预测头,从新加上一个全零初始化的D×K的前馈神经网络,K是下游任务的分类数。与训练前相比,使用更高分辨率的图像进行微调更有益。我们输入更高分辨率的图像,当保持相同大小的patch块时,可以得到更有效的序列长度。ViT尽管能够处理任意的序列长度(往往因为内存的限制),所以会导致这个预训练的位置编码不在有意义。因此,我们根据预训练位置编码在原始图像的位置进行二维的插值。因此,分辨率的调整以及patch块的提取是将二维结构对图像的归纳偏置传入Transformer的唯一的点。
分析:微调的目的是使输入图片的尺寸变大,图片扩大,序列长度就会增加,Vit从理论上来说在硬件允许的情况下可以处理任意长度的序列。
4 实验部分
我们评估了ResNet、Vision Transformer(ViT)和混合模型的表达学习能力。为了理解每个模型的数据需求,在不同规模的数据集上进行预训练,并评估了许多基准任务。当考虑预训练模型的计算成本时,ViT表现非常出色,比较低的预训练成本在大多数识别基准上达到了最先进的状态。最后,进行了一个使用自我监督的小规模实验,并表明自我监督的ViT对未来时有前景的。
4.1 准备工作
数据集。为了探索模型的可扩展性,预训练阶段使用了ILSVRC-2012 ImageNet(包含了1k个类别和1.3M张图像),ImageNet-21k(包含了21k个类别和14M张图像),JFT(包含18k个类别和303M张高分辨率图像)三个数据集。作者还在19个任务的VTAB分类事件进行评估。VTAB评估不同任务的低数据传输,每个任务用1000个任务示例。
模型变体。如表所示,“Base”和“Large”模型直接采用BERT模型,但是增加了更大的“Huge”模型。其中:
Layers:Transformer Encoder中重复堆叠Encoder Block的次数。
Hidden Size:对应通过Embedding层后每个token的dim
MLP size:Transformer Encoder中MLP Block第一个全连接的节点个数(是Hidden Size的四倍)
Heads:代表Transformer中Mutil-Head Attention的heads数
表1:ViT三个版本的各参数设置
训练和微调。我们使用Adam训练所有的模型,包括ResNets,β1 = 0.9, β2 = 0.999,批大小为4096,并应用0.1的高权重衰减,同时使用了学习率warmup策略。为了进行微调,使用了动量SGD,批量大小为512。
4.2 实验结果
图3:三种模型的性能对比
结果表明在JFT-300M数据集上预训练的较小的ViT-L/16模型在所有任务上都优于BiT-L(在相同数据集上进行预训练)模型,同时预训练所需的计算资源大幅减少。更大的模型ViT-H/14进一步提高了性能,特别是在更具挑战性的数据集(imageNet、CIFAR-100和VTAB)上。与现有的技术相比,该模型的预训练所需的计算量仍然大大减少。然而,我们注意到,预训练效率可能不仅受到架构选择的影响,还受到其他参数的影响,如训练计划、优化器、权重衰减等。在较小的公共ImageNet-21K数据集上预训练的ViT-L/16模型在大多数数据集上也表现良好,同时占用了很少的资源进行预训练:它可以在大约30天内使用8核的标准云TPUv3进行训练。
图4:BiT和ViT模型的比较
上面的实验显示,当在很小的数据集上预训练时,ViT模型的性能要比BiT差,但在较大数据集上进行预训练时,ViT模型的性能要好很多。随着数据集的增长,较大的ViT变体会取代较小的ViT变体。
当在最小的数据集ImageNet上进行预训练时,ViT-Large模型与ViT-Base模型相比表现不佳,效果远远比不上ResNet。在中等数据集ImageNet-21k上与训练是,两者效果相当;当在很大的数据集JFT-200M上预训练时,ViT的效果要更好。所以当我们只有较小的数据集上,更适合用ResNet(并不是所有的数据据集都适合硬套Transformer)。
图5:ResNet和ViT模型的比较
如图,在同一个数据集(JFT),分别抽取不同数量的数据(10M,30M,100M,300M),避免不同数据集之间的gap,同时不适用额外的Regularization,超参数保证相同,linear evaluation是指直接把预训练模型当做特征提取器,不fine-tune,拿提取到的特征直接做logistic regression。few-shot是指在evaluation的时候,每一类只sample五张图片。
图6:在不同任务上的性能对比
可以看到当数据集很小时,CNN预训练模型表现更好,证明了CNN归纳偏置的有效性,但是当数据集足够大时,归纳偏置和Transformer比较就失去了优势,甚至没有归纳偏置,直接从数据learn patterns会更有效。提示细心观察会发现即使与训练的数据集很大,最后ViT的性能提升也不是很明显,因此如何使用ViT来做这种小样本学习任务,是一个有待继续研究的方向。
图7:Tranformer,ResNet以及Hybrid模型性能对比
上图的实验证明了ViT的预训练比ResNet要更好,即在相同的与训练计算复杂度下,ViT的效果要比ResNet更好。可以看到的是,当模型较小时,混合模型的表现要更好,但是随着模型的增大,ViT的表现超过了混合模型。
4.3模型可视化
左边这幅图为ViT-L/32的RGB值初始线性嵌入的滤波器,中间这幅图为ViT-L/32位置嵌入的相似性,Tiles表示具有指定行和列的块的位置嵌入与所有其他块的位置嵌入之间的余弦相似度。右边夫人这幅图时按人头核网络深度划分的关注区域大小。每个点表示16个头中的一个在一个图层上的平均注意力距离。
5 总结
该论文将目光聚焦于NLP领域非常火热的Transformer架构,寻求将原始Transformer架构用于CV领域的方法。面对将Transformer用于CV领域输入量过大的问题,在总结了前人的工作后,该篇论文的作者提出将图像分成一个个小patch按顺序输入当作Transformer的输入,这样有效解决了输入序列过长的问题;同时,针对非常大的数据集训练,训练得到的效果比传统卷积神经网络更优,所用训练资源也相对较少。
存在的问题:
1. 因为Transformer并没有引进任何先验知识,它所有学习到的东西都是完完全全靠自己的,所以在比较小的数据集上,性能甚至并不如卷积神经网络。
2. Transformer中的无监督学习使得我们不需要过多的标注信息,而本身的图像领域我们常需要预先标注,这将非常费时费力,如果能将无监督学习用于图像领域并保证良好性能将会是一个重大的突破。
3. CV领域不仅有分类任务,还有目标检测以及分割任务,若要真正探究Transformer在CV任务上的性能,这两个任务也应能实现,否则小领域的应用,实用性不高。
4. 作者提出,其实有更大的数据集,但是并没有尝试,根据前面的结论,数据集越大,性能应当越好。(在此之后该作者团队又跑了更大的数据集,验证了这一猜想)