【论文阅读】【ViT系列】ViT:一张图片用于大规模图像识别的Transformers(手动翻译)

论文:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
代码:https://github.com/google-research/vision_transformer

1 摘要

虽然Tranformer架构已经成为了自然语言处理任务中事实上的标准,但它在计算机视觉中的应用仍然有限。在视觉中,注意力要么和卷积网络一起应用,要么被用于在保持卷积网络的整体结构的同时替换其某些组件。我们证明了这种对CNN的依赖是不必要的,一个直接应用于图像块序列的纯transformer可以在图像分类任务中表现得很好。用大量数据进行预训练后迁移到中小型的图像识别基准数据集(ImageNet,CIFAR100,VTAB等)时,与最先进的卷积网络相比,Vision Transformer(ViT)取得了出色的结果,同时对计算资源的需求大幅减少。

2 介绍

基于自注意力的架构,尤其是Transformers,已经成为了自然语言处理选择的模型。主要的方法是在一个大型文本语料库上进行预训练,然后在一个小的特定任务的数据集上进行微调。由于Transformers的计算效率和可扩展性,训练空前大的、具有一千亿参数的模型已经成为可能。并且随着模型和数据集的增长,目前仍没有性能饱和的迹象。

然而在计算机视觉中,卷积架构仍然占据主导地位。受到NLP成功的启发,很多工作试图将类似于CNN的架构与自注意力相结合,其中一些完全取代了卷积。这种模型虽然在理论上很高效,但由于使用了专门设计的注意模式而尚未在现代硬件加速器上得到有效的扩展。因此,在大规模图像识别中,传统的类似于ResNet的架构仍然是最优的。

受到NLP中Transformers重大成功的启发,我们经过尽可能少的修改,直接将标准的Transformer应用在了图片上。为此,我们将图片分割成若干块,并将这些块的线性嵌入的序列作为Transformer的输入。图像块的处理与NLP应用中的令牌(单词)相同。我们以有监督的方式在图像分类上训练此模型。

当在中等大小的数据集,例如ImageNet上进行没有强正则化的训练时,这些模型只取得了比类似大小的ResNets低若干百分点的准确率。这种看似令人沮丧的结果是可以预见的:Transformers缺少一些CNNs固有的归纳偏差,例如平移不变性和局部性,因此在不充足的数据量下不能很好地泛化。

然而,如果模型在更大的数据集(14M-300M张图像)上进行训练,情况就会发生变化。我们发现,大规模的训练胜过了归纳偏差。我们的Vision Transformer(ViT)在足够的规模下进行预训练后迁移到数据点较少的任务上时,取得了出色的结果。当在公开的ImageNet-21k数据集或室内的 JFT-300M数据集上进行预训练时,ViT在多个图像识别基准上接近或击败了现有的最佳技术。特别地,最好的模型在ImageNet上准确率达到88.55%,在ImageNet-ReaL上达到90.72%,在CIFAR-100上达到94.55%,在VTAB的19个任务的组上准确率达到77.63%。

3 相关工作

Transformers是由Vaswani等人在2017年为机器翻译提出的,并已成为许多NLP任务的最佳方法。大型的基于Transformer的模型通常在大型语料库上进行预训练,然后针对手头的任务进行微调:BERT使用了一个去噪的自监督预训练任务,而GPT工作线程将语言模型作为预训练任务。

自注意力对图像的朴素应用要求每个像素关注每个其他像素。由于像素数的二次代价,这种应用不能扩展到实际的输入尺寸。因此,为了在图像处理中应用Transformers,过去已经尝试过几种近似方法。Parmar等人只在每个查询像素的局部邻域中应用自注意力,而不是全局应用。这种局部的多头点积自注意力块可以完全取代卷积。在另一项工作中, Sparse Transformers采用了对全局自注意力的可扩展近似,使其适用于图像。另一种扩展注意力的方法是将其应用于不同大小的方块中,甚至极端情况下只沿着单个轴应用。许多这些专门的注意力架构在计算机视觉任务上显示出了有前景的结果,但需要复杂的工程才能在硬件加速器上有效地实现。

与我们的模型最相关的是Cordonnier等人的模型,它从输入图像中提取大小为2×2的小块,并在顶部应用完全的自我注意。这个模型与ViT非常相似,但我们的工作进一步证明,大规模的预训练使普通的Transformers能够与最先进的CNN竞争(甚至比之更好)。此外,Cordonnier等人使用了2×2像素的小尺寸块,这使得该模型只适用于小分辨率的图像,而我们也能处理中等分辨率的图像。

人们对卷积神经网络(CNN)与自注意力形式的结合也很感兴趣,例如通过增强特征图来进行图像分类;或使用自注意力进一步处理CNN的输出,例如目标检测、视频处理、图像分类、无监督对象发现或统一的文本视觉任务。

另一个近期的相关模型是图像GPT(iGPT),它在降低图像分辨率和色彩空间后,将Transformers应用于图像像素。该模型以无监督的方式像生成模型一样进行训练,然后可以对结果的表示进行微调或线性探测以获得分类性能,它在ImageNet上达到了72%的最高准确率。

我们的工作属于越来越多的探索比标准ImageNet数据集更大规模的图像识别的论文之一。使用额外的数据源有助于在标准的基准中取得最佳的结果。此外,Sun等人研究了CNN的性能如何随数据集大小而变化,而Kolesnikov、Djolonga等人对从ImageNet-21k和JFT-300M等大规模数据集进行的CNN迁移学习进行了实证探索。我们也关注这两个数据集,但训练的是Transformers而不是在先前工作中使用的基于ResNet的模型。

image-20220115225536833
图1:模型概述。我们将一个图像分割成若干个固定大小的块,并对每一块都进行线性嵌入,添加位置嵌入,并将得到的向量序列提供给一个标准的Transformer编码器。为了进行分类,我们使用了在序列中额外添加一个可学习的“分类标记”的标准方法。对Transformer编码器的说明是受到Vaswani等人的启发。

4 方法

在模型设计中,我们尽可能接近地遵循原始的Transformer。这种有意的简单设置的一个优点是,可扩展的NLP中Transformer架构及其高效实现几乎可以开箱即用。

4.1 Vision Tranformer (ViT)

图1是该模型的概述。标准Transformer接收一个标记嵌入的一维序列作为输入。为了处理二维图像,我们将图像 x ∈ R H × W × C \mathbf{x}\in\mathbb{R}^{H\times W\times C} xRH×W×C变形为扁平的二维块序列 x p ∈ R N × ( P 2 ⋅ C ) \mathbf{x}_p\in\mathbb{R}^{N\times(P^2\cdot C)} xpRN×(P2C),其中 ( H , W ) (H,W) (H,W)是原始图像的分辨率, C C C是通道的数量, ( P , P ) (P,P) (P,P)是每个图像块的分辨率, N = H W / P 2 N=HW/P^2 N=HW/P2是由此得到的块的数量,它也是Transformer的有效输入序列长度。Transformer使用恒定的潜在向量大小 D D D通过它所有的层,所以我们将图像块扁平化,然后用一个可训练的线性投影映射到 D D D​维(等式1)。我们将这个投影的输出称为块的嵌入。

类似于BERT的[class]标记,我们在嵌入的块序列中准备了一个可学习的嵌入( z 0 0 = x c l a s s \mathbf{z}_0^0=\mathbf{x}_{class} z00=xclass​),其在Transformer编码器输出处的状态( z L 0 \mathbf{z}_L^0 zL0​)用作图像表示 y \mathbf{y} y​(等式4)。在预训练和微调过程中,都有一个分类头连接到( z L 0 \mathbf{z}_L^0 zL0​​)。在预训练时分类头用有一个隐藏层的MLP实现,在微调时由一个单一的线性层实现。

位置嵌入被添加到块嵌入中以保留位置信息。我们使用标准的可学习的一维位置嵌入,因为我们没有观察到使用更先进的二维感知位置嵌入可以带来显著性能提高。由此得到的嵌入向量序列是编码器的输入。

Transformer编码器由多层的多头自注意力(MSA)和MLP块组成。在每个块之前使用层归一化(LN),在每个块之后使用残差连接。MLP包含两个具有GELU非线性的层。

image-20220116204757685

归纳偏差 我们注意到Vision Transformer的图像特异性归纳偏差比CNN少得多。在CNN中,局部性、二维邻域结构和平移不变性被融合到整个模型的每一层中。在ViT中,只有MLP层是局部的和平移不变的,而自注意力层是全局的。二维邻域结构的使用非常少:在模型的开始通过将图像切割成块,和在微调时为不同分辨率的图像调整位置嵌入(如下所述)。除此之外,初始化时的位置嵌入不包含块的二维位置信息,块之间的所有空间关系都必须从头开始学习。

混合架构 作为原始图像块的替代方案,输入序列可以来自于CNN的特征图。在这个混合模型中,块嵌入投影 E \mathbf{E} E(等式1)被应用于从CNN特征图中提取的块。一种特殊情况是,块的空间大小可以为1x1,这意味着输入序列是通过简单地将特征图的空间维度扁平化并投影到Transformer维度来获得的。分类输入嵌入和位置嵌入是如上所述添加的。

4.2 微调和更高的分辨率

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

5 实验

我们评估了ResNet、Vision Transformer(ViT)和混合结构的表示学习能力。为了理解每个模型的数据需求,我们在不同大小的数据集上进行了预训练,并在多个基准任务上进行评估。当考虑模型预训练的计算成本时,ViT表现非常好,以较低的预训练成本在大多数识别基准上达到了最先进的水平。最后,我们进行了一个使用自监督的小实验,并证明了自监督的ViT很有未来前景。

5.1 设置

数据集 为了探索模型的可扩展性,我们使用具有1k类和1.3M图像的ILSVRC-2012图像数据集(以下称为ImageNet),其具有21k类和14M图像的超集ImageNet-21k和具有18k类和303M高分辨率图像的JFT。我们根据Kolesnikov等人,从预训练数据集中删除下游任务测试集的数据。我们将在这个数据集上训练的模型迁移到几个基准测试任务中:ImageNet的原始验证标签和清理后的ReaL标签、CIFAR-10/100、Oxford-IIIT Pets和Oxford Flowers-102。对这些数据集的预处理根据Kolesnikov等人进行。

我们还评估了包含19个任务的VTAB分类组。VTAB对不同任务的低数据传输进行评估,每个任务使用1000个训练样本。这些任务被分为三组:自然任务,如上述的宠物,CIFAR等任务;专业任务——医疗和卫星图像;以及结构化的任务,它们需要几何理解,比如定位。

image-20220116223116912
表1:Vision Tranformer模型变体的细节

模型变体 ViT的配置基于那些用于BERT的配置来设定,总结如表1。“Base”和“Large”模型直接采用BERT的设定,并且我们添加了更大的“Huge”模型。在接下来的内容中,我们使用简短的符号来表示模型大小和输入块大小:例如,ViT-L/16意味着具有16×16输入块大小的“Large”变体。请注意,Transformer的序列长度与块大小的平方成反比,因此具有较小块大小的模型在计算上更昂贵。

对于基线CNN,我们使用ResNet,但使用Group Normalization取代Batch Normalization层,并使用了标准化的卷积。这些修改改善了转移,且我们将修改后的模型表示为“ResNet(BiT)”。对于混合模型,我们将中间特征映射输入到具有一个“像素”的块大小的ViT。为了对不同的序列长度进行实验,我们要么(i)取常规ResNet50的阶段4的输出,要么(ii)删除阶段4,在阶段3中放置相同的层数(保持层数总数不变),然后取这个扩展的阶段3的输出。选项(ii)导致了一个4倍长的序列长度,和一个更昂贵的ViT模型。

训练和微调 我们使用 β 1 = 0.9 , β 2 = 0.999 \beta_1=0.9,\beta_2=0.999 β1=0.9,β2=0.999的Adam、4096的batch size和一个高权重衰减0.1来训练所有的模型,包括ResNets,我们发现这对所有模型的转移都很有用(与常见的做法相比,在我们的设置中,Adam对于ResNets的效果略好于SGD)。我们使用线性学习率进行warmup和decay。对于微调,我们使用具有动量的SGD和512的batch size,用于所有模型。对于表2中的ImageNet结果,我们以更高的分辨率进行了微调:ViT-L/16为512,ViT-H/14为518,还使用了系数为0.9999的平均化。

度量标准 我们通过小样本精度或微调精度来报告下游数据集的结果。微调精度在各自的数据集进行微调后获得每个模型的性能。小样本精度是通过解决一个正则化最小二乘回归问题获得的,该问题将训练图像子集的(冻结)表示映射到 { − 1 , 1 } K \{-1,1\}^K {1,1}K目标向量。这个公式允许我们以封闭的形式恢复精确的解。虽然我们主要关注微调性能,但我们有时会使用线性的小样本精度来进行快速的实时评估,因为微调成本太高。

5.2 与SOTA的比较

我们首先将我们最大的模型ViT-H/14和ViT-L/16与文献中最先进的CNN进行了比较。第一个比较点是Big Transfer(BiT),它使用大型ResNets执行监督迁移学习。第二个是Noisy Student,它是一个大型的EffificientNet,使用删除标签的ImageNet和JFT-300M进行半监督训练。目前,Noisy Student是ImageNet上最先进的,而BiT-L是这里报告的其他数据集上最先进的。所有模型都在TPUv3硬件上进行训练,我们报告了对每个模型进行预训练所需的TPUv3核天数,即用于训练的TPUv3核数(每个芯片2个)乘以训练时间的天数。

image-20220117185427370

表2展示了结果。在JFT-300M上进行预训练的较小的ViT-L/16模型在所有任务上都优于BiT-L(在同一数据集上进行预训练),且而训练所需的计算资源要少得多。更大的模型ViT-H/14进一步提高了性能,特别是在更具挑战性的数据集——ImageNet、CIFAR-100和VTAB组上。有趣的是,这个模型仍然比之前的最先进模型花费更少的计算资源。然而,我们注意到,预训练的效率不仅会受到架构选择的影响,而且还会受到其他参数的影响,如训练计划、优化器、权重衰减等。我们在第4.4节中提供了对不同架构的性能 vs. 计算的控制变量研究。最后,在公开的ImageNet-21k数据集上预训练的ViT-L/16模型在大多数数据集上也表现良好,且花费更少的资源:它可以在大约30天内使用8核的标准云TPUv3进行训练。

image-20220117185445459

图2将VTAB任务分解为各自的组,并与此基准上之前的SOTA方法进行比较:BiT、VIVI——在ImageNet和Youtube上共同训练的ResNet以及S4L——在ImageNet上监督加半监督学习。ViT-H/14在自然任务和结构化任务上优于BiT-R152x4和其他方法。在专业任务上,这两种模型的性能相似。

5.3 预训练数据的要求

Vision Transformer在一个大型的JFT-300M数据集上进行预训练时表现良好。ViT比ResNets对视觉的归纳偏差更少,那么数据集的大小有多重要呢?我们做了两个系列的实验。
image-20220117224329895

首先,我们在规模不断增大的数据集上预先训练了ViT模型:ImageNet、ImageNet-21k和JFT-300M。为了提高在较小的数据集上的性能,我们优化了三个基本的正则化参数——权重衰减、dropout和标签平滑。图3显示了对ImageNet进行微调后的结果(在其他数据集上的结果如表5所示)。当在最小的数据集ImageNet上进行预训练时,ViT-Large模型的表现不如ViT-Base模型,尽管有(合适的)正则化。通过ImageNet-21k的预训练,它们的表现是相似的。只有使用JFT-300M,我们才能看到更大模型的全部好处。图3还显示了由不同大小的BiT模型所跨越的性能区域。BiT CNNs在ImageNet上的表现优于ViT,但随着数据集的增大,ViT超过了它。

随后,我们在9M、30M和90M的随机子集以及完整的JFT-300M数据集上训练我们的模型。我们不对较小的子集执行额外的正则化,而是对所有设置使用相同的超参数。通过这种方式,我们评估了模型的内在性质,而不是正则化的影响。然而,我们使用了提前停止,并报告了在训练过程中获得的最佳验证准确率。为了节省计算量,我们报告了小样本的线性精度,而不是完全的微调精度。图4包含了这些结果。在较小的数据集上,相同计算成本的ViT比ResNets的过拟合更严重。例如,ViT-B/32比ResNet50略快;它在9M子集上表现得要差得多,但在90M+子集上表现得更好。ResNet152x2和ViT-L/16也是如此。这一结果强化了一种直觉,即卷积归纳偏差在较小的数据集中是有作用的,但对于较大的数据集,直接从数据中学习相关模式是足够的,甚至是有益的。

总的来说,ImageNet上的小样本结果(图4)以及VTAB上的低数据结果(表2)似乎很适合非常低的数据传输。进一步分析ViT的小样本特性是未来工作的一个令人兴奋的方向。

image-20220117224347088

5.4 尺度研究

我们通过评估来自JFT-300M的传输性能,对不同的模型进行了控制变量的尺度研究。在这种设置下,数据大小不会瓶颈模型的性能,我们评估每个模型的性能 vs. 预训练成本。模型集包括:7个ResNets,R50x1、R50x2、R101x1、R152x1、R152x2,预训练7个epoch,加上R152x2和R200x3,预训练14个epoch;6个Vision Tranformer,ViT-B/32、B/16、L/32、L/16,预训练7个epoch,外加L/16和H/14,预训练14个epoch;和5个混合模型,R50+ViT-B/32、B/16、L/32、L/16预训练7个epoch,加上R50+ViT-L/16,预训练14个epoch(对于混合模型,模型名称末尾的数字不代表块大小,而是代表ResNet主干中的总降采样比)。

图5包含了传输性能 vs. 预训练的总计算量。每个模型的详细结果见附录中的表6。可以观察到一些模式。首先,ViT在性能/计算性价比上全面优于ResNet。ViT使用大约2−4倍的计算来获得相同的性能(5个数据集的平均)。其次,混合模型在较小的计算预算下略优于ViT,但在较大的模型中差异消失了。这个结果有些令人惊讶,因为人们可能会期望使用卷积局部特征处理来提升任何尺寸的ViT。第三,ViT似乎没有在试验范围内饱和,这激励着未来的扩展努力。

5.5 理解Vision Tranformer

image-20220118141351209
image-20220118141412349

为了开始理解Vision Tranformer如何处理图像数据,我们分析了它的内部表示。ViT的第一层线性地将扁平的块投影到一个低维空间(等式1)。图7(左)显示了学习到的嵌入滤波器的最主要的主成分。这些成分类似于每个块中的精细结构的低维表示的合理基函数。

投影结束后,将学习到的位置嵌入添加到块表示中。从图7(中间)可以看出,模型学会了根据位置嵌入的相似性对图像内的距离进行编码,即更近的块倾向于具有更多相似的位置嵌入。此外,还会出现行列结构;同一行/列中的块具有类似的嵌入。最后,对于较大的网格,正弦结构有时很明显。位置嵌入学习了如何表示二维图像拓扑,这解释了为什么手动的的2D感知嵌入变体没有带来改进。

自注意力允许ViT整合整个图像的信息,即使是在最低的层。我们将研究该网络在多大程度上利用了这种能力。具体来说,我们根据注意力的权重来计算信息被整合的图像空间中的平均距离(图7,右)。这种“注意距离”类似于CNN中的感受野的大小。我们发现,一些头关注在浅层就已经关注了图像的大部分,这表明模型确实使用了全局集成信息的能力。其他的注意力头在浅层的注意力距离一直很小。这种高度局部化的注意在Transformer之前应用ResNet的混合模型中不那么明显(图7,右),这表明它可能发挥了和CNN中浅层卷积层类似的功能。此外,注意距离随着网络深度的增加而增加。全局上看,我们发现模型关注的是在语义上与分类相关的图像区域(图6)。

5.6 自监督

Transformer在NLP任务上的表现令人印象深刻。然而,它的成功不仅源于其优秀的可扩展性,还源于大规模的自监督预训练。我们还模拟了BERT中使用的掩码语言建模任务,对掩码块预测进行了初步的探索。通过自监督预训练,我们较小的ViT-B/16模型在ImageNet上达到了79.9%的准确率,比从头训练显著提高了2%,但仍然比监督的预训练低了4%。我们将对比性预训练的探索留给未来的工作。

6 结论

我们探索了Transformer在图像识别中的直接应用。与之前在计算机视觉中使用自我注意的工作不同,除了最初的补丁提取步骤外,我们没有在架构中引入特定图像的归纳偏差。相反,我们将一个图像解释为一系列的块,并通过一个在NLP中使用的标准Transformer编码器来处理它。这种简单但可扩展的策略在大型数据集上的预训练相结合时,工作得出奇的好。因此,Vision Transformer达到或超过了许多图像分类数据集最先进的水平,并且预训练消耗较少。

虽然这些初步结果令人鼓舞,但仍存在许多挑战。一是将ViT应用于其他计算机视觉任务,如检测和分割。我们的研究结果,与Carion等人的研究结果相结合,表明了这种方法的前景。另一个挑战是继续探索自监督预训练方法。我们的实验表明,自监督预训练有了改善,但自监督预训练和大规模有监督预训练之间仍存在很大的差距。最后,ViT的进一步扩展可能会提高性能。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ViT(Vision Transformer)是一种将Transformer架构应用于计算机视觉领域的创新方法。它最初是由Google的研究团队在2021年的论文《ImageNet Classification with Vision Transformers》中提出的,将传统的CNN架构中的局部感受野和局部连接替换为全局自注意力机制,从而实现了对图像的全局理解。 ViT的基本思想是将图像分割成多个固定大小的patch(通常是16x16或32x32),然后将这些patch作为输入序列,通过线性投影(Linear Embedding)转化为Token,这些Token经过Transformer的编码器层进行处理,学习到图像的抽象特征。这样,Transformer原本设计用于自然语言处理的自注意力机制在这里被扩展到了图像数据上。 与CNN结合时,通常是在ViT的前几层使用CNN来提取一些底层特征,随后再输入Transformer,这样既可以利用Transformer的全局特征捕捉能力,又能保留CNN在局部细节方面的优势。 在实际的代码实现中,例如在PyTorch或TensorFlow等深度学习框架中,你可以找到这样的例子: 1. 导入必要的库模块: ```python import torch from torchvision.models import vit_base_patch16_224 from torchvision.transforms import ToTensor ``` 2. 加载预训练的ViT模型(可能需要下载预训练权重): ```python model = vit_base_patch16_224(pretrained=True) ``` 3. 对图像进行预处理,如转换为张量并归一化: ```python def preprocess_image(image_path): image = Image.open(image_path).convert("RGB") return ToTensor()(image) / 255.0 input_tensor = preprocess_image("path_to_your_image.jpg") ``` 4. 使用模型进行前向传播: ```python with torch.no_grad(): output = model(input_tensor.unsqueeze(0)) # Add batch dimension probabilities = torch.softmax(output, dim=1) # Get class probabilities ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值