AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
将transformer直接用到了图像分类。
本文证明了图像对CNN的依赖不是必要的,将纯transformer直接用于图像patch序列可以很好地执行图像分类任务。
当对大量图像进行预训练并转移到多个中型或小型的图像识别基准数据库(ImageNet、CIFAR-100、VTAB等)时,和最先进的CNN相比,vision transformer(ViT)可以获得出色的结果,同时训练所需的计算资源也相对较少。
transformer的计算效率和可伸缩率,可以训练很大的模型,比如超过100B的参数,当模型和数据集增加时仍没有饱和现象。受NLP方向transformer缩放成功的启发,本文尝试将标准的transformer应用于图像,只做了很少的改动。将图像分成patches,提供这些patches的线性嵌入序列作为transformer的输入。图像patches和在NLP应用中的token相似,本文采用了有监督的方式对图像分类模型进行训练。
当在中等规模的数据集(例如ImageNet)上训练时,此类模型的精度比规模相当的ResNets低几个百分点。因为Transformer相较CNNs,缺少一些固有的归纳偏置,例如:平移不变性
和空间局部性
(translation equivariance and locality),滑动卷积在共享权重,降低参数空间的同时,也引入归纳偏置),因此在不充足数据下训练,会导致模型泛化性不足。
然而当在更大型数据集(14M-300M)上训练时,大规模训练可以越过inductive bias。在预先训练好的情况下,可以迁移到略小数据集上。当在ImageNet-21k或in-house JFT-300M数据集上预训练时,ViT在多项图片识别benchmarks上取得了很好的结果:ImageNet上取得88.55%,在ImageNet-ReaL上取得90.72%,在CIFAR-100上取得94.55%,在VTAB的19个基础任务上取得77.63%。
Transformer由Vaswani等人(2017)提出,用于机器翻译,此后成为许多NLP任务中的最先进方法。基于Transformer的大型模型通常在大型语料库上进行预训练,然后针对当前的任务进行微调。BERT
使用去噪自监督预训练任务,而GPT
系列则使用语言建模作为其预训练任务。
简单地将自注意力应用于图像,需要每个像素关注每一个其他像素。随着像素数量的二次方成本,这并不能扩展到现实的输入大小。因此,为了在图像处理的背景下应用Transformers,过去已经尝试了几种近似方法。Parmar等人只在每个查询像素的局部邻域中应用自注意力,而不是全局应用。这样的局部多头点积自注意力块可以完全取代卷积。另外,诸如稀疏变形器等作品采用了可扩展的全局自我注意力近似,以便适用于图像。缩放注意力的另一种方法是在不同大小的块中应用它,在极端情况下,只沿着个别轴线应用。许多这些专门的注意力架构在计算机视觉任务上展示了有希望的结果,但需要复杂的工程才能在硬件加速器上有效地实现。
在将卷积神经网络(CNN)与自注意力的形式相结合
方面也有很多,例如通过增强图像分类的特征图
或使用自注意力进一步处理CNN的输出
,例如用于对象检测
、视频处理
、图像分类
、无监督
的对象发现、视频处理、图像分类、无监督对象发现或统一文本视觉任务
。
我们不知道之前有transformer与全局自注意力的整个图像的应用。与我们的模型最接近的是iGPT
,它在降低图像分辨率和色彩空间后将Transformers应用于图像像素。该模型以无监督的方式训练为生成式模型,然后可以对生成的表示进行微调或线性探究分类性能,在ImageNet上实现了72%的最大精度。
图1 描述了该模型。标准Transformer接收一个1D的嵌入序列作为输入。为了处理二维图像,我们将图像 x ∈ R H × W × C x∈R^{H×W×C} x∈RH×W×C重塑为一个扁平化的二维patch序列 x p ∈ R N × ( P 2 ⋅ C ) x_p∈R^{N×(P^2·C)} xp∈RN×(P2⋅C),其中 ( H , W ) (H,W) (H,W)是原始图像的分辨率,C是通道数, ( P , P ) (P,P) (P,P)是每个patch的分辨率, N = H W / P 2 N=HW/P^2 N=HW/P2是产生的补丁数,也是Transformer的有效输入序列长度。Transformer的所有层使用恒定的向量大小D,因此我们通过可训练的线性投影(式1)映射到D维将补丁扁平化,这个投影的输出称为补丁嵌入物。
类似于BERT的[class]
令牌,我们将一个可学习的分类标记嵌入到补丁序列中 ( z 0 0 = X c l a s s ) (z^0_0=X_{class}) (z00=Xclass),其在Transformer编码器输出处的状态( z L 0 z^0_L zL0)作为图像的表达(式4)。在预训练和微调时, z L 0 z^0_L zL0上都附加了一个分类头。分类头是多层感知器,在预训练时由一个隐藏层的MLP
实现,在微调时由一个单独的线性层
实现。
位置嵌入
被添加到补丁嵌入中以保留位置信息。我们使用标准的一维位置嵌入,因为更高级维度的位置嵌入并没有带来显著性能提升。由此产生的嵌入向量序列作为编码器的输入。
Transformer编码器(Vaswani等人,2017)由多头注意力
(MSA)和MLP块
的交替层组成(式2,3)。在每个区块之前应用Layernorm(LN)
,在每个区块之后应用残差
连接。MLP包含两个具有GELU
非线性的层。
图 1 :将一幅图像分割成固定大小的patch
,对每个patch进行线性嵌入
,添加位置嵌入
,并将产生的向量序列传入标准transformer编码器。为了执行分类,使用标准方法在序列中添加一个额外的可学习的分类标记
。
除了原始图像补丁,patch也可以是CNN的feature map。在这种混合模型中,补丁嵌入投影E(Eq.1)被应用于从CNN特征图中提取的补丁。作为一种特殊情况,补丁的空间尺寸可以是1x1,这意味着通过简单地将特征图的空间维度扁平化并投影到Transformer维度来获得输入序列。如上所述添加分类输入嵌入和位置嵌入。
通常在大型数据集上预训练ViT,并对较小的下游任务进行微调。为此,移除预训练的预测头,并附加一个零初始化的前馈层 D × K D×K D×K,其中 K K K是下游类的数量。在比预训练更高的分辨率下进行微调通常是有益的。当输入更高分辨率的图像时,我们保持补丁大小不变,这将导致更大的有效序列长度,不过ViT可以处理任意序列长度(在内存限制下),但预先训练的位置嵌入失去意义。因此,本文根据原始图像中的位置,对预训练位置嵌入进行二维插值。注意,这里的分辨率调整和补丁提取是图像2D结构唯一的归纳偏差,被人为加入到ViT中。
评估了ResNet、Vision Transformer(ViT)和混合体的表示学习能力。为了了解每个模型的数据需求,在不同规模的数据集上进行预训练,并评估许多基准任务。当考虑到预训练模型的计算成本时,ViT的表现非常出色,以较低的预训练成本在大多数识别基准上达到了最先进的水平。最后,我们使用自监督进行了一个小实验,并表明自监督的ViT在未来很有前景。
为了探索模型的可扩展性,使用了ImageNet(1k类,1.3M图像),ImageNet-21k(21k类,14M图像),以及JFT(18k类,303M图像)。按照Kolesnikov等人的方法去重复预训练数据集与下游任务的测试集。我们将这些数据集上训练的模型转移到几个基准任务上。ImageNet对原始验证标签和清理后的ReaL标签,CIFAR-10/100,Oxford-IIIT Pets和Oxford Flowers-102。
还在19个任务的VTAB分类套件上进行评估。VTAB评估低数据转移到不同的任务,每个任务使用1000个训练例子。这些任务被分为三组。
使用了多个ViT变体。如表1,以BERT使用的ViT配置为基础。Base和Large模型直接采用BERT,另外增加了更大的Huge模型。ViT-L/16表示具有16×16输入补丁大小的 Large变体。Transformer的序列长度与补丁大小的平方成反比,因此补丁大小较小的模型在计算上更昂贵。
对于标准CNNs,使用了ResNet,但用组归一化替换Batch归一化层,并使用标准化卷积。将修改后的模型表示为 ResNet(BiT)。
对于混合体,我们将中间特征图输入到ViT中,补丁大小为一个pixel。为了实验不同的序列长度,我们要么(i)取常规ResNet50的第4阶段的输出,要么(ii)去掉第4阶段,在第3阶段放置相同数量的层数(保持总层数),并取这个扩展的第3阶段的输出。选择(ii)的结果是序列长度增加了4倍,ViT模型的成本更高。
我们使用Adam训练包括ResNets在内的所有模型,β1=0.9,β2=0.999,批次大小为4096,并应用0.1的高权重衰减,我们发现它对所有模型的转移都很有用(附录D.1显示,与常见的做法相反,在我们的环境中,Adam对ResNets的效果略好于SGD)。我们使用线性学习率预热和衰减。对于微调,我们使用SGD与动量,批量大小512。对于表2中的ImageNet结果,我们以更高的分辨率进行微调。ViT-L/16为512,ViT-H/14为518,还使用了Polyak & Juditsky (1992)的平均值,系数为0.9999。
我们通过少数镜头或微调精度来报告下游数据集的结果。微调精度反映了每个模型在各自数据集上微调后的性能。少镜头精度是通过求解一个正则化线性回归问题获得的,这个问题将训练图像子集的(冻结)表示映射到 − 1 , 1 K {-1,1}^K −1,1K个目标向量。虽然我们主要关注微调性能,但有时我们也会使用线性少拍精度来进行快速的即时评估,因为微调的成本太高。
首先将我们最大的模型ViT-H/14和ViT-L/16,与文献中最先进的CNN进行比较。
第一个比较点是BiT(Kolesnikov等人,2020),它用大型ResNets进行监督transform学习。
第二个是Noisy Student(Xie等,2020),它是在ImageNet和JFT- 300M上使用半监督学习训练的大型EfficientNet,并去除标签。目前,Noisy Student在ImageNet上是最先进的技术,而BiT-L在这里报道的其他数据集上是最先进的技术。所有的模型都是在TPUv3硬件上训练的,每个模型预训练所需的TPUv3-核-天数,即训练所用的TPU v3核数(每个芯片2个)乘以训练时间(天数)。
从表2中可以看出,规模较小的 ViT-L/16 模型在所有数据集上的性能堪比或者超过 BiT-L,同时需要的算力也少得多。较大的 ViTH-14 模型进一步提升了性能,尤其在更具挑战性的数据集上,如 ImageNet、CIFAR-100 和 VTAB。ViTH-14 模型在所有数据集上的性能匹配或超过 SOTA,甚至在某些情况下大幅超过 SOTA 模型(如在 CIFAR-100 数据集上的性能高出 1%)。在 ImageNet 数据集上,ViT 模型的性能比 Noisy Student 低了大约 0.1%,不过在具备更干净 ReaL 标签的 ImageNet 数据集上,ViT 的性能超过 SOTA 模型。
图 2 将 VTAB 任务分解为多个组,并对比了 ViT 与 SOTA 方法的性能,这些方法包括 BiT
、VIVI
和 S4L
。
在 Natural 任务中,ViT-H/14 的性能略低于 BiT-R152x4;在 Specialized 任务中,ViT 的性能超过 BiT 等方法;而在 Structured 任务中,ViT 显著优于其他方法。
Vision Transformer 在大型 JFT-300M 数据集上进行预训练后表现出了优秀的性能。在 ViT 的归纳偏置少于 ResNet 的情况下,数据集规模的重要性如何?
首先,在规模逐渐增加的数据集(ImageNet、ImageNet-21k 和 JFT300M)上预训练 ViT 模型。下图 3 展示了模型在 ImageNet 数据集上的性能。其次,研究者在 JFT300M 数据集的 9M、30M 和 90M 随机子集以及完整数据集上进行了模型训练。结果参见下图 4。
在较小的数据集和相同的计算成本下,Vision Transformer 比 ResNet 更加过拟合。该结果强化了这一认知:卷积归纳偏置对于规模较小的数据集较为有用,但对于较大的数据集而言,学习相关模式就足够了,甚至更加有效。
对不同模型执行了受控可扩展性研究(scaling study)。图 5 展示了模型在不同预训练计算成本情况下的迁移性能。
结果表明,Vision Transformer 在性能 / 算力权衡中显著优于 ResNet。
混合模型在较小计算成本的情况下略优于 ViT,但在计算成本较高时,这一现象消失。
Vision Transformer 在实验尝试的算力范围内似乎并未饱和,未来可以进行更多可扩展性研究。
本文探索了Transformers 在图像识别中的直接应用。不像以前的工作在计算机视觉使用self-attention ,我们没有引入 image-specific inductive biases 的结构。相反,将一个图像解释为一系列patches,并使用标准的Transformer 对其进行处理,就像在NLP中使用的那样。这种简单但可扩展的策略在与大型数据集的预训练相结合时,效果惊人地好。因此,Vision Transformer 匹配或超过许多图像分类数据集的最新水平,同时具有相对便宜的预训练。
仍存在许多的挑战:
Reference:
- 论文地址:https://arxiv.org/abs/2010.11929
- GitHub地址:https://github.com/google-research/vision_transformer
A u t h o r : C h i e r Author: Chier Author:Chier