Vision In Transformer——(VIT论文阅读)

An Image In Worth 16×16 Words:Transformers For Image Recognition At Scale

  • 1.摘要(Abstract)
  • 2.介绍(Introduction)
  • 3.相关工作(Related Work)
  • 4. 方法(Method)
    • 4.1.VIT
      • 归纳偏置
      • 混合架构
    • 4.2.微调和更高分辨率
  • 实验分析(Experiments)
  • 结论(Conclusion)

1.摘要(Abstract)

  当transformer已经变成 自然语言处理任务(NLP) 中的事实标准,但是它在计算机视觉的应用仍然是有限的,在计算机视觉任务中,注意力要么跟卷积神经网络一起使用 ,要么用来替换卷积神经网络的某些部分组件,同时保持整体的结构。
  作者他们表明,这种依赖于卷积神经网络是不必要的,一个 纯粹的transformer 直接应用于图像patch序列可以很好地执行图像的分类任务。当对大量数据进行预训练并且转移到多个中小型数据集时,VIT与最先进的卷积神经网络相比,获得了出色的结果,同时需要训练的计算资源大大减少。


2.介绍(Introduction)

  基于自注意力机制的架构,尤其是transformer已经变成了在NLP领域的模型选择,主要的方法就是在一个大的语料库进行预训练,然后再小的特殊的任务数据集上进行微调。由于transformer计算的效率以及可伸缩性,他已经变得可能去训练史无前例的尺寸的(超过100billion参数)模型,随着模型以及数据集的增加,目前还没有表现饱和的迹象。
  然而在计算机视觉领域,卷积的架构仍然处于主导地位,受NLP领域transformer架构成功的影响,多数工作尝试着将CNN式架构与自注意力相结合,其中一些完全地取代了卷积,这一部分模型虽然理论上是有效的,但由于使用了专门的注意力模式,在现代硬件加速器上还没有得到有效的扩展。因此,在大规模图像识别中,经典的resnet类别的卷积架构仍然是最好的。
  受NLP中Transformer缩放成功的启发,作者尝试将标准Transformer直接应用于图像,并尽可能减少修改。为此,作者将图像分割为 多个小块 ,并将这些 小块的线性嵌入序列 作为Transformer的输入。在NLP应用程序中,处理图像patch的方式与处理tokens(单词)的方式相同。以监督的方式训练模型进行图像分类。
当在中等规模的数据集(如没有强正则化的ImageNet)上训练时,这些模型的精度仅比同等规模的ResNets低几个百分点。这种看似令人沮丧的结果或许是意料之中的:transformer缺乏一些CNN固有的归纳偏置,例如平移不变性以及局部性,因此在数据量不足的情况下不能很好地归纳
然而,如果模型在更大的数据集(14M-300M图像)上训练,图像就会发生变化。我们发现大规模训练战胜了归纳偏见。我们的视觉transformer(Vision Transformer, ViT)在足够规模的预训练和转移到具有更少数据点的任务时取得了优异的结果。当在公共的ImageNet-21k数据集或内部的JFT-300M数据集上进行预训练时,ViT在多个图像识别基准上接近或超过了最先进的水平。其中,最佳模型在ImageNet上达到88.55%,在ImageNet- real上达到90.72%,在CIFAR-100上达到94.55%,在VTA上达到77.63%


3.相关工作(Related Work)

  transformer已成为许多NLP任务中的最先进方法。大型的基于transformer的模型通常在大型语料库上进行预训练,然后针对手头任务进行微调:BERT使用去噪的自我监督训练前任务,而GPT工作则使用语言建模作为其训练前任务。
  对图像进行单纯的自我注意力机制需要每个像素注意其他的像素。由于像素数量为二次,因此不能按实际输入大小缩放。因此,为了将transformer应用于图像处理,过去已经尝试了几种近似方法。Parmar等人(2018)只对每个query像素的局部邻域应用了自我关注,而不是全局。这种局部多头点积自我注意块可以完全替代卷积。在另一项工作中,稀疏transformer采用了可扩展的全局自我关注近似,以便适用于图像。衡量注意力的另一种方法是在不同大小的块上应用注意力,在极端情况下只沿着单个轴。这些专门的注意力架构在计算机视觉任务中展示了很好的结果,但需要复杂的工程在硬件加速器上有效地实现。
  与我们最相关的是Cordonnier et al.(2020)的模型,该模型从输入图像中提取大小为2 × 2的patch,并在上面应用完全自我注意。这个模型与ViT非常相似,但作者的工作进一步证明,大规模的训练前训练可以让普通的变形金刚与最先进的cnn竞争(甚至更好)。此外,Cordonnier et al.(2020)使用了2 × 2像素的小patch size,这使得该模型仅适用于小分辨率的图像,而作者的也适用于中等分辨率的图像。
  也有很多的兴趣结合卷积神经网络(CNN) self-attention形式,如通过增加特性地图图像分类(或进一步处理的输出使用self-attention CNN,例如对象检测,视频处理,图像分类,无监督对象发现,或统一的文本视觉任务。
  另一个近期的相关模型是图像GPT (iGPT) ,它在降低图像分辨率和颜色空间后,将transformer应用于图像像素。该模型以一种无监督的方式作为生成模型进行训练,然后可以对产生的表示进行微调或线性探测,以提高分类性能,在ImageNet上达到72%的最大精度。
  作者的工作增加了越来越多的论文,这些论文探索了比标准ImageNet数据集更大尺度的图像识别。使用其他数据源可以在标准基准上实现最先进的结果(Mahajan等人,2018年;Touvron等人,2019年;谢等,2020)。此外,Sun等人(2017)研究了CNN性能如何随数据集大小而变化,以及Kolesnikov等人(2020);Djolonga等人(2020)利用大型数据集,如ImageNet-21k和JFT-300M,对CNN迁移学习进行了实证探索。我们也关注后两个数据集,
****。

4. 方法(Method)

Vision In Transformer——(VIT论文阅读)_第1张图片
上述图是模型的概述。将图像分割成固定大小的小块,线性嵌入每个小块,添加位置编码,并将得到的向量tokens输入标准的Transformer编码器。为了进行分类,我们使用标准的方法,在序列中添加个额外的可学习的“分类标记”也就是图中的0。

4.1.VIT

  模型的概述如图1所示。标准的Transformer接收一个tokens嵌入的一维序列作为输入。处理2二维图像,我们重塑形象x∈H,W,C成扁平的二维序列补丁xp∈N×2 (P·C),在(H, W)是原始图像的分辨率,C是通道的数量,(P, P)是每个图像patch的分辨率,和N = HW / PP是最终的补丁,它也作为transformer的有效输入序列长度。Transformer在其所有层中使用恒定的潜在向量大小D,因此我们将patch拉直并使用可训练的线性投影(公式1)映射到D维。我们将这个投影的输出称为patch ebeddings
  与BERT的[class]标记相似,我们在嵌入patch序列前添加一个可学习的嵌入,其在Transformer编码器(z0 L)输出处的状态作为图像表示y (公式4)。在预训练和微调期间,分类头在训练前由一个隐含层的MLP实现,在微调时由一个线性层实现。
  在patch嵌入中加入位置嵌入以保留位置信息。我们使用标准的可学习的一维位置嵌入,因为没有观察到使用更先进的2d感知位置嵌入的显著性能提高。生成的嵌入向量序列作为编码器的输入。transformer编码器由交替多层的多头自注意(MSA)和MLP块组成。Layernorm (LN)在每个块之前应用,在每个块之后残差连接。

Vision In Transformer——(VIT论文阅读)_第2张图片

  
(1)将x:每个patch 编码映射到D维度。然后加上位置编码;
(2)然后进行层标准化输入到多头注意力中,要有残差连接;
(3)然后进行层标准化输入到多层感知器中,也要有残差连接;
(4)最后进行层标准化;
  
  以上就是一整个注意力block

归纳偏置

我们注意到Vision Transformer比cnn有更少的图像特异性诱导偏差。在cnn中,局部性、二维邻域结构和平移等方差被嵌入到整个模型的每一层中。在ViT中,只有MLP层是局部的、平移相等的,而自我注意层是全局的。二维邻域结构的使用非常谨慎:在模型开始时通过将图像切割成小块,在微调时调整不同分辨率图像的位置嵌入(如下所述)。除此之外,初始化时的位置嵌入不包含patch的二维位置信息,所有patch之间的空间关系都需要从零开始学习。

混合架构

  作为原始图像块的替代,输入序列可以由CNN的特征图形成。在该混合模型中,将patch embedding投影E (Eq. 1)应用于从CNN特征图中提取的patch。作为一种特殊情况,patch的空间大小可以是1x1,这意味着只需将feature map的空间维度进行扁平化,投影到Transformer维度,就可以得到输入序列。分类输入Embedding和位置Embedding是按照上面的描述添加的。

4.2.微调和更高分辨率

  通常,在大型数据集上预训练ViT,并微调到(较小的)下游任务。为此,我们去掉预先训练的预测头,附加一个零初始化的D × K前馈层,其中K为下游类的数量。与训练前相比,在更高的分辨率下进行微调通常是有益的。当输入更高分辨率的图像时,我们保持patch的大小不变,从而得到更大的有效序列长度。Vision Transformer可以处理任意长度的序列(直到内存限制),然而,预先训练的位置嵌入可能不再有意义(由于太长)。因此,我们根据其在原始图像中的位置,对预训练的位置嵌入进行2D插值。请注意,这种分辨率调整和patch提取是关于图像2D结构的归纳偏差被手动注入Transformer的唯一点。


实验分析(Experiments)

略…


结论(Conclusion)

略…


你可能感兴趣的:(论文阅读,transformer,人工智能,深度学习,计算机视觉,机器学习)