ViT论文分享
原论文如下:

动机
基于自注意力机制的架构,特别是Transformer,已经成为自然语言处理(NLP)中的首选模型。主导的方法是在大型文本语料库上进行预训练,然后在较小的任务特定数据集上进行微调。由于Transformer的计算效率和可扩展性,可以训练具有超过100B参数的前所未有大小的模型。随着模型和数据集的增长,性能仍然没有出现饱和的迹象。
然而,在计算机视觉中,卷积架构仍然是主导的。受到Transformer在NLP中的扩展成功的启发,本文作者尝试直接将标准Transformer应用于图像,进行尽可能少的修改。
相关工作
本文作者介绍了一些尝试将Transformer替换CNN的相关操作,并提到了两个与本文十分相似的工作:
- 与本文最相关的是Cordonnier等人在2020年发布的模型,这个模型从输入图像中提取2×2大小的补丁,并在其上应用全自注意力。该模型使用了2×2像素的小补丁大小,这使得该模型仅适用于小分辨率图像,而本文方法还可以处理中分辨率图像。
- 另一个相关的模型是image GPT(iGPT),该模型在减小图像分辨率和色彩空间后将Transformer应用于图像像素。该模型以无监督的方式作为生成模型进行训练,在ImageNet上达到72%的最大准确性。
方法
实验方法步骤可分为如下图(此图复制自原论文)五部分:

- 将图片分割为相同大小的补丁;
- 将分割完的补丁传入Linear Projection中,进行展平投射;
- 将得到的image_token进行加工;
- 将加工之后得到的embedding传入Transformer Encoder中;
- 将最后的结果输入到MLP Head中进行分类。
之后会介绍实验的关键部分。
第一个步骤:将图片分割为相同大小的补丁

在这里我们将整个图片进行分割,分割为几个大小相同的正方形补丁;
如上公式,将一个原始图片x(大小为H×W×C)的图片进行分割,分割成N个大小为P×P×C的补丁。公式中N代表补丁的个数,H、W代表原图像的长宽像素块个数,C代表通道数,P代表每个补丁边长的像素块个数,N代表补丁数量。
第二步骤:将分割完的补丁传入Linear Projection中,进行展平投射

因为再Transformer Encoder中所在层要使用一个恒定的潜在向量D,为此我们要将图片补丁展平在经过线性投影映射到D维,与所需要的潜在向量D大小一致。
其中,向量D的大小与patch大小有关,
假设:patch大小设置为16×16,那么D的大小就应该为16×16×3=768。
第三步骤:将得到的image_token进行加工

这一步骤一共有两次操作:分别是在token序列前添加CLS(class embedding)和加入位置信息(position embedding)。
首先,先在得到的image token序列前面合并一个CLS,这是一个可学习的embedding。它在Transformer Ecoder输出处,可以表示整个图片进行分类操作。
之后,再将合并后的这个新的image token序列加上位置信息也就是加上位置embedding,这里加入位置信息相加而非合并,所以在这一步并不会改变token序列的大小。
如下是此操作的过程图:
CLS(1×768大小)和image token(196×768大小)先进行合并,得到一个newimage token(197×768大小)再加入位置信息(positional Encoding)(197×768大小),最终得到要输入得到Transformer Encoder模块的输出(197×768大小)。
第四步骤:将加工之后得到的embedding传入Transformer Encoder中
ViT整体过程如下,右侧为Transformer Encoder的一个模块。

图中右侧为Transformer Encoder的一个模块,而Transformer Encoder是由L个这样的模块构成。
首先,第三步骤最后得到的Embedded Patches输入到模块中,先经过一个LN正则化,然后通过多头注意力模块,然后和正则化前的输入相加(记为Z),之后将Z进行一个正则化再输入到MLP模块中,将得到的输出与Z进行相加,然后再将结果输入到下一个相同的模块,直到进行L次这样的操作,最终得到输出。
整体公式表示如下:

如上公式是第三步骤和第四步骤的合集;
(1)中:Z0是Transformer Encoder模块的输入 ;X1P是P个图片补丁中的第一个补丁;E代表Linear Projection操作,Xclass是CLS(class embedding);Epos是位置信息。第一步操作意思是图片补丁经过线性投影(E),然后和CLS合并,再加上位置信息,得到Z0。
(2)Z’l是中间结果,它是由Zl-1经过正则化和MSA,再加上Zl-1本身得到的;LN是正则化操作;MSA是多头注意力操作。
(3)Zl是一个模块的输出,也是下一个模块的输入;它是由Z’l经过正则化和MLP,再加上Z’l其本身得到的结果。
(4)y是最终输出,Z0L是Transformer Encoder最终输出序列中的第一个;这个Z0L也就是我们之前提到的CLS。
附一张简单的位置解释图:

第五步骤:
将最后的结果输入到MLP Head中进行分类。这一步和正常的图片分类一样是进行最后的分类。这里ViT是将最后得到的CLS进行分类。
即:CLS输入到通用的MLP Head,得到Class。
问题
- 最后进行分类需要通过全图,为什么要用CLS?
本文用到了注意力机制,因为多头注意力中,需要token亮亮两两进行交互,所以在经过这一系列操作之后,CLS以及和全图各部分token均进行了交互,所以最后CLS也就携带了全图的特征,用他进行最后的分类也就合情合理了。 - 为什么需要位置信息?
注意力机制是token与token之间进行两两交互,其中与位置没有任何关系,但是每个image token都是在图片中有相应的位置,加上位置信息可以更好的进行训练和识别。
实验
数据集
本文使用了三个数据集:
- 包含1千个类别和1.3百万张图片的ILSVRC-2012 ImageNet数据集;
- 其超集ImageNet-21k,包含2.1万个类别和1,400万张图片;
- 包含1.8万个类别和3,030万高分辨率图片的JFT。
本文还在19个任务的VTAB分类套件上进行评估。VTAB评估了对多样化任务的低数据迁移,每个任务使用1,000个训练样本。这些任务分为三组:自然类任务,例如上述的任务,Pets,CIFAR等;专业类任务,包括医学和卫星图像;结构化类任务,需要几何理解,比如定位任务。
模型变种

如上图,本文一共有三个模型:
基于用于BERT的配置来设计ViT,"Base"和"Large"模型直接采用自BERT,并添加更大的"Huge"模型。
与当时最新技术相比

本文中最大型的模型ViT-H/14在几乎所有数据集中均比另外两个模型正确率高;
最重要的是本文达到相同的训练程度所需的资源比另外两个模型少,这是本文主要的竞争点。
总结
本文探索了将Transformer直接应用于图像识别。与先前在计算机视觉中使用自注意力的工作不同,本文除了初始补丁提取步骤外,没有引入图像特定的归纳偏差到架构中。相反,本文将图像解释为补丁的序列,并通过标准的Transformer编码器进行处理,就像在自然语言处理中使用的那样。这种简单而可扩展的策略在与大型数据集的预训练相结合时表现出色。因此,Vision Transformer在许多图像分类数据集上达到或超越了现有技术水平,同时相对便宜地进行了预训练。
尽管这些初步结果令人鼓舞,但仍然存在许多挑战。其中之一是将ViT应用于其他计算机视觉任务,如检测和分割。另一个挑战是继续探索自监督的预训练方法。作者的初步实验显示了自监督预训练的改善,但自监督和大规模监督预训练之间仍存在很大差距。最后,对ViT的进一步扩展可能会导致性能的提高。
2万+






