最容易理解的AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE(VIT)解析

        之前连载了很多CNN中的注意力机制的相关paper,也介绍了Transformer的原理,包含encoder、decoder、multi-head attention等。如果有兴趣的朋友或者对attention方面基础较差的朋友可以找一下我之前发的相关博客。这篇文章介绍一下将transformer引入到CNN中的文章(Vision Transformer)Vit,它虽然没有BERT早,但是它是将transformer原有结构直接引入CV中的第一篇文章。所以,继上一篇最容易理解的Transformer解析之后,开始正式将transformer引入CV的连载。


        这里主要对Vit原文进行详解,有一些原文比较好理解的地方直接就用通俗语言直译过来了,有些在CNN中理解较费劲的地方再进行个人方式的阐述,方便新来的小伙伴学习,下面正式开始。

Vit的前言及背景介绍

        现在transformer已经在NLP中成为了实际上的标准结构,但是在CV中使用还是有很大的限制条件。目前的CV中,transformer要么与CNN结合使用,要么只是作为代替CNN网络模型中的一个模块进行使用。Vit要说明的是在图像分类中并不一定要依赖CNN,一个原始的transformer结构可以直接应用于图像块的序列分类任务(这里的图像块是直译的,原文说的是sequences of image patches)。当Vit在巨量的数据集上进行预训练,并在中小数据集上进行微调,它可以达到现在CNN中SOTA的结果,同时大大减少了训练需要的资源。(说的挺好,其实Vit并不适用于我们的图像分类任务,我们没有像Google那么大的数据集进行预训练,尤其是一些个性化的领域)。

        自注意力机制已经非常常用了,尤其是在NLP领域使用transformer中。并且transformer中主要方法就是在巨大的数据集上进行预训练,然后在中小数据集中微调。得益于Transformers的计算效率和可扩展性,使用100B以上的参数来训练史无前例的模型成为可能,有意思的是随着数据量和模型规模的增长,它还没有达到性能的瓶颈。

        在CV中,CNN结构仍然占主导地位。但是受transformer在NLP成功的启发,许多工作尝试将CNN与自注意力结合起来,甚至有些工作则完全取代了卷积操作。纯粹的注意力机制理论上是有效的,但由于使用了专门的注意力模式(比如transformer),在现代硬件加速器上还没有得到有效的扩展(就是说你需要很多张卡^_^)。因此,在图像识别或者分类任务中,经典的ResNet的架构仍然是SOTA。

        受到transformer在NLP成功的启发,作者在尽量减少改变transformer结构的情况下,把transformer引入到CV中。为此,作者将一副图像分割成若干小块,并将这些小块的线性的序列化操作作为Transformer的输入(provide the sequence of linear embeddings of these patches as an input to a Transformer)。这些被分割的图像块(patches)采用类似NLP中的token方式进行操作。然后利用监督的方式对图片分类任务进行训练。

        在中等规模数据集中,比如ImageNet这种规模的数据集中,transformer比RestNet的准确率略低几个百分点。作者任务这种结果是预料之中的,作者认为transformer缺乏像CNN中的归纳偏置,比如平移不变性或者卷积这种局部特征等,这些都是transformer中不具备的,所以导致在数据量不足的情况下结果并不如CNN。但是如果在大规模的数据集的情况下,这种情况就改变了。作者发现经过大规模训练之后,模型的结果就可以超过归纳偏置的效果了。Vit在大规模数据集进行预训练,再利用中小数据集进行微调的训练方式,取得了非常好的效果。当Vit在ImageNet-21k或者JFT-300M数据集进行预训练,Vit结果可以比现在图像分类的SOTA模型效果还要好。 其中,作者认为的最佳模型在ImageNet上的准确率为88.55%,在ImageNet- real上的准确率为90.72%,在CIFAR-100上的准确率为94.55%,在包含19个任务的VTAB套件上的准确率为77.63%。

        Transformer在2017年在机器翻译中被提出,并且已经是NLP领域的SOTA模型。基于transformer的大型模型通常在大规模的数据集上进行预先训练,然后再根据自己的任务进行微调。例如,BERT使用去噪的自监督方式进行预训练,而GPT则使用语言建模作为其预训练任务。

        图像中的自注意力其实是每个像素都要对其他像素进行权重分配的处理过程。由于像素数量为二次方成本,因此无法缩放到实际的输入大小(原文说的是:With quadratic cost in the number of pixels, this does not scale to realistic input sizes.我没太理解这个意思,欢迎同学在评论区留言)。因此,为了在图像处理的上下文中应用transformer,过去已经尝试了几种近似方法:Parmar等人仅针对每个查询像素在局部邻域而不是全局中应用了自注意力。这样的局部multi-head点积自注意力块可以完全替代卷积。或者,Sparse Transformers的工作采用可扩展的近似值利用全局的自注意力,以适用于图像。缩放注意力的另一种方法是将其应用于不同大小的块,在极端情况下仅沿着单个轴进行注意力计算。许多专门的注意力架构在计算机视觉任务中显示出很有前景的结果,但需要在硬件加速器上有效地实现复杂的工程。

        作者认为与自己工作最相近的是“On the relationship between self-attention and convolutional layers. In ICLR, 2020”,这篇paper将一幅图像划分为若干个大小为2×2的patches,并将自注意力机制应用到了上面。虽然这篇paper与Vit很相识,但是作者认为他的工作是更进一步的,他证明了在大数据集上进行预训练后的transformer比CNN的SOTA模型更据竞争力。此外,作者认为虽然这篇paper使用了2 × 2像素的小patch尺寸,但这使得模型只适用于小分辨率的图像,而Vit也可以处理中等分辨率的图像。

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

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

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

研究方法

        作者并没有对Transformer进行多少更改,目的是证明transformer可以胜任CV任务的研究,使用传统的transformer模型(就是之前讲的“Attention is all you need”这篇paper)。这么做的优点就是证明了再NLP领域的transformer可以拿来直接应用到CV领域。

VISION TRANSFORMER (VIT)

        图1就是Vit模型的整体概述。利用标准的transformer的结构,以一个带token的一维向量作为输入。与自然语言处理不同,CV的图像都是二维数据,为了处理图像,Vit将图像由H×W×C拉平并进行序列化,从而形成大小为N×(P²·C),其中(H, W)为原始图像的分辨率,C是图像通道数,(P,P)是每个patch的size,并且N=(H×W)/P²,N表示patch的数量,也就是Vit的输入数据的长度。Transformer的所有层都使用恒定的向量大小D(就是输入和输出的数据大小是一样的,不懂的同学可以看一下我之前对transformer的讲解),因此我们将patch拉平,并通过可训练的线性投影映射到D维大小。这个线性投影过程,请参看图1(从图1看的话经过embedding之后的D就是N)。线性投影过程就是公式(1):

        类似于BERT的[class]的token,Vit预先定义了一个可学习的序列化的embedding序列(z_{0}^{0}=x_{class}),它的输出在transformer的encoder的输出(z_{0}^{L})表示一幅图像的输出结果y,这个过程就是公式(4):

         在预训练和微调期间,都将分类head连接到 z_{0}^{L}。分类头部在训练前由一个隐层MLP实现,在微调时由一个线性层实现(应该就是全连接层)。

        位置embedding被添加到了patch的embedding里面,用来保存位置信息(是Add,不是concat,不同的同学可以参考我前面讲的transformer)。Vit使用标准的可学习一维的位置embedding,因为作者说没有观察到使用更高级的二维感知位置embedding可显着提高其性能。embedding向量的结果序列用作transformer的encoder的输入。

        Tranformer的encoder由multi-head self-attention(MSA)和MLP块的层组成。在每个块之前应用Layernorm(LN),在每个块之后应用残差连接。MLP包含具有GELU非线性的两全连接层。MSA和MLP由公式2和公式3表达:

 Inductive Bias

        作则发现,Vit比CNN的归纳偏置更少。在cnn中,局域提取特性、二维邻域结构和平移不变性等被应用到整个模型的每一层。在ViT中,只有MLP层是局部提取特性并且具有平移不变性,而自注意模块是全局性的。二维邻域结构的使用非常少:在模型开始时将图像切割成小块,在微调时调整不同分辨率图像的位置嵌入(如下所述)。除此之外,初始化时的位置embedding不携带关于patch的二维位置信息,所有的patch之间的空间关系都需要从头学习。

混合结构

        作为将原始图像切分patch的替代方案,输入序列可以由CNN的feature Map组成。可以与公式(1)一样的序列化数据作为输入,不同的是,上面将的纯transformer是将图片划分为patch之后进行embedding操作,这种混合结构是利用CNN提取图像的feature map代替patch进行操作。作为一种特殊情况,patch的空间大小可以是1x1,这意味着输入序列是通过简单地将特征图的空间维度压平并投影到Transformer维得到的。并且与如上所述一致,增加了类别和位置embedding操作。

微调和更高的分辨率

        通常,我们在大数据集上预先训练ViT,然后利用更小的数据集微调到下游任务。通常,我们在大型数据集上对ViT进行预训练,并微调到(较小的)下游任务。为此,我们删除了预训练的预测head,并附加了一个以零初始化的D×K的前馈层,其中K是下游类的数量。以比预训练更高的分辨率进行微调通常是有益的。当提供更高分辨率的图像时,我们将图块大小保持不变,这会导致更大的有效序列长度。ViT可以处理任意序列长度(直到内存限制),但是,预训练的位置embedding可能不再有意义。因此,我们根据预先训练的位置嵌入在原始图像中的位置执行2D插值。请注意,只有在分辨率调整和色块提取中,将有关图像2D结构的感应偏差手动注入到Vision Transformer中。

实验

        作者评估了RestNet、Vit和他们的混合架构。为了了解每个模型对数据要求,我们对不同大小的数据集进行了预训练,并评估了许多基准任务。考虑到预训练模型的计算代价,ViT表现非常好,以较低的预训练成本在大多数认可基准上达到最好水平。最后,作者利用自监督学习进行了一个小的实验,实验结果非常好,作者对Vit的未来充满希望。

        数据集:为探索模型的可扩展性,我们使用具有1k类和1.3M图像的ILSVRC-2012 ImageNet数据集(以下将其称为ImageNet),具有21k类和14M图像的超集ImageNet-21k和具有18k类和303M高分辨率图像的JFT。作者参照Big transfer (BiT): General visual representation learning.”完全复刻了其下游任务。我们将在这些数据集上训练的模型转移到几个基准任务上:原始验证标签上的ImageNet、CIFAR-10 / 100、Oxford-IIIT Pets数据集上。

 模型变种:我们将ViT配置基于BERT所使用的配置,如下表所示。BERT直接采用了“Base”和“ Large”模型,并添加了较大的“Huge”模型。在下面的内容中,我们使用简短的符号表示型号和输入图块大小:例如,ViT-L/16表示输入图块大小为16×16的“大型”变体。请注意,transformer的序列长度与图块大小的平方成反比,因此图块大小较小的模型在计算上会更费时。

结论

        作者探索了transformer在图像识别中的直接应用。与之前在计算机视觉中使用自注意的工作不同,除了初始的patch提取步骤,作者没有将图像特定的归纳偏差引入到体系结构中。相反,作者将图像解释为一系列patches,并使用NLP中使用的标准Transformer编码器来处理它。这种简单但可伸缩的策略在结合对大型数据集的预训练时效果惊人地好。因此,Vision Transformer匹配或超过了许多图像分类数据集的先进水平。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值