[论文笔记] ViT - 飞外
发布时间: 2023-07-06
[论文笔记] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale说在前面

个人心得:

  1. ViT得拿超大数据集来练
  2. 要注意位置编码和类别编码
  3. patch直接拉平送进去,有些暴力

谷歌,原文链接:http://arxiv.org/abs/2010.11929

原文开源代码:https://github.com/google-research/vision_transformer

Pytorch版本代码:https://github.com/lucidrains/vit-pytorch

本文作于2021年3月10日。

摘要

尽管Transformer体系结构已成为自然语言处理任务的实际标准,但其在计算机视觉中的应用仍然受到限制。在视觉上,注意力要么与卷积网络结合使用,要么用于替换卷积网络的某些组件,同时将其整体结构保持在适当的位置。我们表明,这种对CNN的依赖不是必需的,直接应用于图像图块(patch)序列的纯转换器可以很好地执行图像分类任务。当对大量数据进行预训练并将其传输到多个中型或小型图像识别基准(ImageNet、CIFAR-100、VTAB等)时,与SOTA的卷积网络相比,Vision Transformer(ViT)获得了出色的结果,同时所需的计算资源也大大减少。

1. 前言

基于自注意力的体系结构,尤其是Transformer,已成为自然语言处理(NLP)的首选模型。主要方法是在大型文本语料库上进行预训练,然后在较小的特定于任务的数据集上进行微调。得益于Transformers的计算效率和可扩展性,使用100B以上的参数来训练史无前例的模型成为可能。 随着模型和数据集的增长,性能上仍然没有饱和的迹象。

但是,在计算机视觉中,卷积体系结构仍然占主导地位。受NLP成功的启发,许多作品尝试将CNN式架构与自注意力结合起来,有些工作则完全取代了卷积。后者模型虽然理论上很有效,但由于使用了专门的注意力模式,因此尚未在现代硬件加速器上有效地扩展。因此,在大规模图像识别中,经典的类似于ResNet的体系结构仍然是SOTA。

受NLP中Transformer扩展成功的启发,我们尝试将标准Transformer直接应用于图像,并进行最少的修改。为此,我们将图像拆分为小块,并提供这些小块的线性嵌入序列作为transformer的输入。图像图块与NLP应用程序中的token(words)的处理方式相同,以监督方式对模型进行图像分类训练。

当对中等规模的数据集(例如ImageNet)进行训练时,此类模型所产生的适度精度要比同等规模的ResNet低几个百分点。 这种看似令人沮丧的结果可能是预期的:transformer缺乏CNN固有的一些感应偏差,例如平移不变性和局部性,因此在训练不足的数据量时不能很好地概括。

但是,如果在更大的数据集上训练模型(14M-300M图像),则图片会发生变化。 我们发现大规模的训练胜过归纳偏见。ViT经过足够的预培训并转移到数据点较少的任务时,可以获得出色的结果。当在公共ImageNet-21k数据集或内部JFT-300M数据集上进行预训练时,ViT在多个图像识别基准上达到或超越了最新水平。特别是,最佳模型在ImageNet上达到88.55%的精度,在ImageNet-ReaL上达到90.72%的精度,在CIFAR-100上达到94.55%的精度,在19个任务的VTAB上达到77.63%的精度。

2. 相关工作

Transformer是由Vaswani等人提出的,用于机器翻译,自此成为许多NLP任务中最先进的方法。基于大型Transformer的模型通常在大型语料库上进行预训练,然后针对手头的任务进行微调:BERT使用降噪自监督式预训练任务,而GPT工作线使用语言建模作为其预训练任务。

朴素地将自注意力应用于图像将需要每个像素都与每个其他像素相关。由于像素数量为二次方成本,因此无法缩放到实际的输入大小。因此,为了在图像处理的上下文中应用transformer,过去已经尝试了几种近似方法:Parmar等人仅针对每个查询像素在局部邻域而不是全局中应用了自注意力。这样的局部multi-head点积自注意力块可以完全替代卷积。或者,Sparse Transformers之类的工作采用可扩展的近似值来吸引全局的自注意力,以适用于图像。

将卷积神经网络(CNN)与自注意力的形式结合起来也引起了人们的极大兴趣,例如通过增加用于图像分类的特征图或通过使用自注意力来进一步处理CNN的输出,例如用于对象检测、视频处理、图像分类。

我们尚不了解transformer在全局范围内对全尺寸图像的工作。与我们的模型最接近的是iGPT,它在降低图像分辨率和色彩空间之后将transformer应用于图像像素。该模型作为生成模型以无监督的方式进行训练,然后可以对所得表示进行微调或线性探查分类性能,从而在ImageNet上实现72%的最大准确性。

与标准ImageNet数据集相比,我们的工作增加了越来越多的论文探索图像识别的范围。使用其他数据源可以在标准基准上获得最新的结果。此外,Sun等人研究了CNN性能如何随数据集大小而扩展,而Kolesnikov等人则研究了CNN性能如何随数据集大小而扩展。Djolonga等人从诸如ImageNet-21k和JFT-300M之类的大规模数据集中进行了CNN迁移学习的经验探索。我们也将重点放在后面的这两个数据集上,但是训练的是Transformers,而不是先前工作中使用的基于ResNet的模型。

3. 方法

在模型设计中,我们尽可能地遵循原始的transformer。这种特意简单的设置的一个优点是,几乎可以立即使用可扩展的NLP transformer体系结构及其有效的实现。

3.1 Vision Transformer(ViT)

上图是ViT的结构。标准的transformer的输入是1维的token embedding。为了处理二维图像,我们将尺寸为 的图像reshape为拉平的2维图块,尺寸为 。其中, 为图块的大小, 。 是图块的数量,会影响输入序列的长度。Transformer在所有图层上使用恒定的隐矢量D,因此我们将图块拉平,并使用可训练的线性投影映射到D的大小,将此投影的输出称为patch embedding。

类似BERT的[class] token,我们在可嵌入的补丁序列( )之前准备了可学习的embedding向量,该序列在Transformer编码器的输出( )的状态用作图像表示y。 在预训练和微调期间,都将分类head连接到 。分类head是通过在预训练时具有一个隐藏层的MLP以及在微调时通过一个线性层的MLP来实现的。

位置embedding会添加到patch embedding中,以保留位置信息。我们使用标准的可学习1D位置embedding,因为我们没有观察到使用更高级的2D感知位置embedding可显着提高性能。embedding向量的结果序列用作编码器的输入。

Tranformer编码器由multi-head self-attention(MSA)和MLP块的层组成。在每个块之前应用Layernorm(LN),在每个块之后应用残差连接。MLP包含具有GELU非线性的两全连接层。

混合架构:作为原始图像图块的替代,可以从CNN的特征图形成输入序列。在该混合模型中,将patch embedding投影E应用于从CNN特征图提取的图块。作为一种特殊情况,patch的空间大小可以为1x1,这意味着通过简单地展平特征图的空间尺寸并投影到transformer尺寸即可获得输入序列。如上所述,添加了分类输入embedding和位置embedding。

3.2 微调和更高的分辨率

通常,我们在大型数据集上对ViT进行预训练,并微调到(较小的)下游任务。为此,我们删除了预训练的预测head,并附加了一个零初始化的 前馈层,其中K是下游类的数量。以比预(安徒生童话有哪些?《海的女儿》、《丑小鸭》、《屎壳郎》、《野天鹅》、《夜莺》、《雪人》、《瓶颈》、《拇指姑娘》、《园丁与主人》、《冰雪女皇》、《小猪倌》、《笨蛋杰克》、《豌豆上的公主》《坚定的锡兵》、《肉肠签子汤》、《老爹做的事总是对的》、《飞箱》等。)训练更高的分辨率进行微调通常是有益的。当提供更高分辨率的图像时,我们将图块大小保持不变,这会导致更大的有效序列长度。ViT可以处理任意序列长度(直到内存限制),但是,预训练的位置embedding可能不再有意义。因此,我们根据预先训练的位置嵌入在原始图像中的位置执行2D插值。请注意,只有在分辨率调整和色块提取中,将有关图像2D结构的感应偏差手动注入到Vision Transformer中。

4. 实验

我们评估了ResNet、ViT和混合模式的表示学习能力。为了了解每个模型的数据要求,我们对不同大小的数据集进行了预训练,并评估了许多基准任务。当考虑预训练模

微信