Vit
一个图像相当于16 x 16的单词:用于大规模图像识别的Transformer。
概要
Transformer架构已经变成了实际上自然语言处理任务的的标准,但用于计算机视觉领域仍有所受限。在视觉中,注意力要么被永远在结合卷积网络中,或者被用在替换卷积网络必然的组件,同时保证整体结构不变。我们展示了依赖于CNN不是必须的并且将纯Transformer直接应用图像块序列可以在图像分类任务上做的非常好。当在大的数据量上进行预训练,并传输到多个中型或者小型的图像识别基准测试时(ImageNet,CIFAR-100,VTAB,等)vision Transformer(Vit)对比SOTA的卷积神经网络到达了优秀的结果,同时需要更少的计算资源来进行训练。
1 介绍
现实中,基于自注意力架构的Transformer已经变成了自然语言处理的选择模型。主要的方法是预训练一个大文本的预料然后在特定的小任务上微调数据集。多亏了Transformer的计算效率和可扩展性,它让训练史无前例大小的模型成为可能,对于超过100B的并行。随着模型和数据集的增长,它仍然没有出现性能饱和的现象。
然而在计算机视觉领域中卷积架构仍然占主导地位。受到NLP成功的启发,多个工作尝试结合类似CNN的架构和自注意力,一些完全替换了卷积。后者在理论上是有效的,由于使用了专门的注意力模式,现在还没有在硬件加速器上有效缩放。在大尺度的图像识别上,经典的类似resnet架构仍然是SOTA的。
受到Transformer在NLP成功的启发,我们实验了标准Transformer使用最少的修改直接用于图像。为此,我们将图像切分成块并且提供了。并且提供了这些块的线性嵌入序列作为Transformer的输入。图像块使用NLP应用中处理token类似的方法进行处理。我们用有监督的方式训练图像分类模型。
Translation equivariance(平移等变性)是计算机视觉和深度学习中的一个概念,指的是当输入图像发生平移时,模型的输出也会相应地发生平移,但输出的整体特性保持不变。换句话说,如果对输入应用某种平移变换,网络的输出将以相同的方式平移,而不会改变它提取的特征。
先卷积再平移和先平移再卷积是一样的。
当在中间尺寸数据集上进行训练时,类似imageNet没有强正则化。这些模型的准确度在同规模下笔resnet低几个百分点。这个看起来沮丧的结果是可以预料到的:Transformer缺少一些CNN的内在偏置,例如平移等变性和局部性,因此在数据不足的情况下不能进行很好的泛化。
然而如果在大数据集下训练情况就会发生变化(14M-300M 图像)。我们发现大尺度的训练胜过归偏见。当足够规模的并行训练兵转移到数据点减少的任务时,我们的vision Transformer(Vit)实现了优秀的返回。当预训练在开放的ImageNet-21K数据集或者 in-house JFT-300M数据集,在图像识别基准上,Vit接近或超过了最先进的水平。事实上,最好的模型在ImageNet上准确率达到了88.55%,在ImageNet-ReaL上为90.72%, CIFAR-100为94.55%,77.63%在VTAB套件的19个任务。
2 相关工作
Transformer被Vaswani等人在2017年于机器翻译上提出。并且因此在NLP任务上达到了先进水平。大的基于Transformer的模型通常被用于大预料上预训练,然后对手上的任务进行微调:BERT使用了去噪自监督预训练任务,而GPT的工作则使用语言建模作为预训练任务。
原始的自注意力应用到图像中需要每个像素和所有其他的像素进行计算。像素的代价是二次方的,这不能扩展到实际的输入大小。因此,为了应用Transformer到图像处理上下文,过去尝试过几种方法。对每个与本地相邻的像素使用自注意力机制而不是对所有。这种多头点积注意力块可以完全替换卷积。在不同领域的工作中,稀疏Transformer使用了可扩展的近似全局关注,以便应用于图像。另一种扩展注意力的方法是应用它到不同大小的块中,在极端情况下紧沿单个轴。许多这些特定的注意力架构在计算机任务重展示出有希望的结果,但是需要复杂的工程才能在硬加加速器上实现。
与我们工作最相关的是 Cordonnier 等人(2020)的模型,该模型从输入图像中提取 2 × 2 尺寸的补丁,并在此基础上应用完全的自注意力机制。该模型与 ViT 非常相似,但我们的工作进一步展示了大规模预训练使得普通的 Transformers 能够在性能上与最先进的 CNNs 竞争,甚至在某些情况下优于它们。此外,Cordonnier 等人(2020)使用了 2 × 2 像素的小补丁,这使得该模型仅适用于小分辨率图像,而我们则能够处理中等分辨率的图像。
近年来,人们对将卷积神经网络(CNNs)与自注意力机制结合起来表现出极大的兴趣,例如通过增强用于图像分类的特征图(Bello 等人,2019),或通过自注意力进一步处理 CNN 的输出,用于目标检测(Hu 等人,2018;Carion 等人,2020)、视频处理(Wang 等人,2018;Sun 等人,2019)、图像分类(Wu 等人,2020)、无监督目标发现(Locatello 等人,2020)或统一的文本-视觉任务(Chen 等人,2020c;Lu 等人,2019;Li 等人,2019)。
另一个近期相关的模型是 image GPT(iGPT)(Chen 等人,2020a),它在降低图像分辨率和颜色空间之后,将 Transformers 应用于图像像素。该模型作为生成模型以无监督的方式进行训练,得到的表示可以用于微调或通过线性探测进行分类,最高可在 ImageNet 上实现 72% 的准确率。我们的工作也加入了越来越多探索比标准 ImageNet 数据集更大规模的图像识别的研究中。使用额外的数据源可以在标准基准测试上取得最先进的结果(Mahajan 等人,2018;Touvron 等人,2019;Xie 等人,2020)。此外,Sun 等人(2017)研究了 CNN 性能如何随数据集大小扩展,而 Kolesnikov 等人(2020);Djolonga 等人(2020)则对 CNN 从大规模数据集(如 ImageNet-21k 和 JFT-300M)进行迁移学习的效果进行了实证探索。我们也专注于这两个数据集,但与之前使用基于 ResNet 的模型不同,我们训练的是 Transformers。
3 方法
图1:模型总览。我们切分模型到几个固定大小的块中,线性嵌入它们,添加位置位置embedding,并将向量结果序列送到标准的Transformer编码器中。以实现执行分类,我们使用了标准的方法添加额外的可学习对象的分类token序列。Transformer插图的灵感来自于Vaswani等人。
在模型设计中我们遵循原始的Transformer尽可能的进阶。这种有意的简单步骤优点是它可以扩展NLP中Transformer的架构--以及它们的有效实现--几乎开箱即用。
3.1 vision Transformer
因为所有的token都在和所有的token做交互,所以他相信第一个token可以从中学习到有用的信息。只需要根据它的输出进行判断就可以了。
假设有个图片x维度为224x224x3。它的维度为$(224*224)/(16*16)=196$。每个图像块的维度是$16*16*3=768$。
也就是最后的结果为167个patch,每个patch的维度为768。图中的线性投射层就是全连接层。它的维度是768*768(前面的D是从图像中算出来的(不可变),后面的D是可以变的。也就是文章中所说的D。也就是神经元的大小)。
经过这个线性投射就拿到了patch embbding。$X\times E=(196\times 768)\times (768\times 768)=196\times 768$维度抵消了。
这时候就成功的把视觉问题变成了NLP问题。输入变成了1d的token而不是2d的图片了。这里还要加一个cls token的维度。它的维度也是768。
所以最后进入序列的长度为$(196+1)*768$。图中的位置编码1-9只是一个序号,而不是真正使用的。
具体的做法是有一个表。表中的每一行代表了1234这个序号。每一行都是一个向量,而这个向量是可以学习的。(向量的维度也是768)然后将这个向量加(直接sum)到原本的数据上。所以原来的形状不变。
所以图中embedded patches是一个197*768的输入。然后做多头自注意力。QKV中的每一个都是$197\times 768$
假如说使用的是vit基础版本,那么将会有12个头。那么维度就变成了768/12=64也就是说变成了$197\times 64$但是有12个头。最后把12个输出拼接起来。
最后输出并经过norm层还是$197\times 768$然后是NLP它会把维度相对应的放大四倍所以就是$197\times 3072$然后再缩小投射回去变成$197\times 768$
因此输入和输出维度是一样大的。可以任意叠加维度大小。最后又L层的模型就是Transformer Encoder
模型的预览在图1中描述了。标准的Transformer接受1Dtoken embedding序列。为了处理2D图片我们reshape了图像$x\in\mathbb R^{H \times W \times C}$到序列平整的2Dpatch序列 $\mathbf{x}_{p}\in\mathbb{R}^{N\times(P^{2}\cdot C)}$。求中(H,W)是原图的分辨率,C是通道数(P,P)是每个图片patch的分辨率,$N=\bar{HW/P^2}$是patches的返回数量,它也是Transformer有效输入序列的长度。Transformer使用了固定的隐向量大小D贯穿于它全部层,所以我们碾平这个patch并且映射到D维度可训练的线性投影(EQq.1)。我们将这个投影的输出成为patch embedding。
类似BERT的class token,我们提出了科学系embedding到嵌入的patch序列中($\mathbf{z}_{0}^{0}=\mathbf{x}_{\mathrm{class}}$),其在Transformer编码器的输出状态($\mathbf{z}_L^{0}$)作为图像的表示y(Eq. 4)。在预训练和微调中,分类器的头链接在$\mathbf{z}_L^{0}$。分类器的头在预训练时由一个隐藏层的MLP实现,在微调时由一个线性层实现。
位置embeddings被添加到了patch embeddings以维护位置信息。我们使用标准的科学系1D位置embeddings,因为使用更先进的2d感知位置embedding时,我们没有明显的观察到性能提升。embedding向量的结果序列作为输入到encoder中。
Transformer encoder包含了多层交替多头注意力(MSA,见附录A)和MLP 块。层归一化(LN)被用在每个块之后,并且再每一个块之后使用残差链接
NLP包含了俩个GELU非线性层
$$ \begin{gathered} \mathbf{z}_{0} =[\mathbf{x}_{\mathrm{class}}; \mathbf{x}_p^1\mathbf{E}; \mathbf{x}_p^2\mathbf{E};\cdots; \mathbf{x}_p^N\mathbf{E}]+\mathbf{E}_{pos} \mathbf{E}\in\mathbb{R}^{(P^{2}\cdot C)\times D}, \mathbf{E}_{pos}\in\mathbb{R}^{(N+1)\times D} \\ \mathbf{z}^{\prime}\ell =\mathrm{MSA}(\mathrm{LN}(\mathbf{z}_{\ell-1}))+\mathbf{z}_{\ell-1}, \ell=1\ldots L \left(2\right) \\ \mathbf{z}_{\ell} =\mathrm{MLP}(\mathrm{LN}(\mathbf{z'}_\ell))+\mathbf{z'}_\ell, \ell=1\ldots L \left(3\right) \\ \text{J} v=\mathrm{LN}(\mathbf{z}_{L}^{0}) \left(4\right) \end{gathered} $$
归纳偏置是用于指导学习过程中的特定先验假设或约束,比如局部性,平移不变性,都是归纳偏置。
归纳偏置:我们记录了vision Transformer 有着比CNN小的多的特定图像的归纳偏置。在CNN中,局部性和二维邻域结构和平移等价性是贯穿整个模型的每一层。在ViT中,只有MLP层是局部和平移等价的,而自注意力层是全局的。二维的邻域结构被用的非常稀少:在模型的开始,通过裁剪图像到patch并且微调时调整不同分辨率的图像位置嵌入(如下描述)。除此之外,初始时间的位置嵌入不携带关于patches的2D位置信息,所有patch的空间关联需要从0开始学习。
混合结构:如同可选择的原始图像patch,输入序列可以来自CNN中的特征映射。在混合模型中,patch embedding 投影E(eq. 1)被用于从CNN特征图中提取patch。作为特例,这个patch可以包含1x1的空间,这意味着,自个儿输入序列通过简单的压平特征映射的空间维度并投影到Transformer维度来得到。分类的输入embedding和位置embedding通过如上的描述进行相加。
3.2 微调和更高的分辨率
典型的,我们在大规模的数据集上预训练vit,并且在下游的小任务上微调。为此,我们删除了预训练预测头并且附上初始为0的$D\times K$前馈层,其中K是下游类型数量。在更高分辨率下的微调通常比预训练更有意义。当输入更高分辨率的图像时,我们保持patch size大小相同,这导致了更大的有效序列长度。vision Transformer可以处理任意的序列长度(直到内存限制),然而,预训练的位置 embedding可能可能不再有意义。因此我们根据他们的原始图像位置,对于预训练的位置embedding执行了2D差值。记住,这个分辨率条件和块抽取是将图像的归纳偏置手动注入到vision Transformer的唯一一点。
4 实验
我们评估了ResNet、Vision Transformer和混用他们的表示学习能力。为了理解每个模型的数据需要,我们在不同大小的数据集上预训练,并且评估了很多基准测试任务。当考虑预训练模型的计算代价,Vit具有非常好的性能,在低代价的预训练的识别基准测试中达到了SOTA的表现。最后,我们使用自监督进行了小实验,并且展示了自监督的Vit在未来是有希望的。
。。。。懒得翻译了xdm。实验看原文吧!
5 结论
我们探索了Transformer对图像识别的直接应用。不像之前的工作在计算机视觉中使用自注意力,我们没有引入特定图像的归纳偏置到架构中,除了最初的图像块提取步骤。相反,我们将图像解释为一系列的小块并且用标准的Transformer编码器架构进行处理,就如同NLP一样。它简单然而可伸缩,当在大数据集上预训练后策略效果非常好。因此在图像分类数据集中vision Transformer不亚于甚至超过了SOTA,同时预训练还相对便宜。
这个初始结果是鼓舞人心的,但是仍然有很多挑战。其中之一是将Vit用于其他计算机视觉任务上,比如探测和分割。我们的结果,我们的结果和Carion等人的结果,表明了这种方法的前景。另一个挑战是继续探索自监督预训练方法。我们开始了自监督,预训练的改善。但是它仍然在自监督和大尺度的有监督和预训练之间留了很大的空隙。最后,进一步扩展Vit可能会提高性能。