Transformers in Vision: A Survey
原论文下载地址:Transformers in Vision: A Survey
0.摘要
本综述旨在提供计算机视觉学科中transformer模型的全面概述。我们首先介绍transformer成功背后的基本概念,即自我注意、大规模的预训练和双向特征编码。然后,我们涵盖了transformer在视觉中的广泛应用,包括流行的识别任务(例如,图像分类,目标检测,动作识别和分割),生成建模,多模态任务(例如,视觉问题回答,视觉推理和视觉基础),视频处理(例如,活动识别,视频预测)、低水平视觉(如图像超分辨率、图像增强和彩色化)和3D分析(如点云分类和分割)。我们比较了流行技术在建筑设计方面的各自优势和局限性以及它们的实验价值。最后,对开放的研究方向和未来可能的工作进行了分析。
1.概述
语言任务中:文本分类、机器翻译和问答
- BERT(来自transformer的双向编码器表示)
- GPTv1-3(生成预训练transformer)
- RoBERTa(Robustly Optimized BERTPre-training)
- T5(Text-to-Text Transfer Transformer)
视觉数据遵循典型的结构(例如,空间和时间一致性),因此需要新颖的网络设计和训练方案。因此,Transformer模型及其变体已成功用于图像识别、目标检测、分割、图像超分辨率、视频理解、图像生成、文本图像合成和视觉问答,以及其他几个用例. Transformer架构基于一种自我注意机制,该机制学习序列元素之间的关系。与递归处理序列元素且只能处理短期上下文的递归网络不同,转换器可以处理完整序列,从而学习长期关系。尽管注意模型在前馈网络和递归网络( feed-forward and recurrent networks)中都得到了广泛的应用,但Transformer完全基于注意机制,并且有一个独特的实现(即多头注意)为并行化而优化。这些模型的一个重要特征是可扩展到高复杂性模型和大规模数据集。Transformer与其他一些备选方案(如硬注意])相比,硬注意本质上是随机的,需要对注意位置进行蒙特卡罗抽样。由于Transformers与卷积和循环Transformers相比,假定对问题结构的先验知识最少,因此通常使用大规模(未标记)数据集上的前置任务对Transformer进行预训练
pretext tasks 通常被翻译作“前置任务”或“代理任务”, 有时也用“surrogate task”代替。 pretext task 通常是指这样一类任务,该任务不是目标任务,但是通过执行该任务可以有助于模型更好的执行目标任务。其本质可以是一种迁移学习:让网络先在其他任务上训练,使模型学到一定的语义知识,再用模型执行目标任务。这里提到的其他任务就是pretext task。
这样的预训练避免了昂贵的手动注释,因此,编码高度表达和概括的表示,为给定数据集中存在的实体之间的丰富关系建模。然后,以有监督的方式对所学习的表示在下游任务上进行微调,以获得有利的结果。 本文全面概述了为计算机视觉应用开发的Transformer模型。我们开发了网络设计空间的分类法,并强调了现有方法的主要优点和缺点。其他文献综述主要集中在NLP领域或涵盖基于注意的一般方法。通过关注视觉Transformer这一新兴领域,我们根据自我注意的内在特征和调查任务,综合整理了最近的研究方法。我们首先介绍了Transformer网络的基本概念,然后详细介绍了最新的视觉Transformer的细节。在可能的情况下,我们将NLP领域中使用的Transformer与针对视觉问题开发的Transformer进行比较,以展示主要的新奇之处和有趣的特定领域见解。最近的方法表明,**卷积运算可以完全被基于注意力的Transformer模块所取代,并且在单一设计中也被联合使用,以鼓励两组互补运算之间的共生。**这项调查最后详述了开放性研究问题,并对未来可能的工作进行了展望。
2.基础
两个关键思想:
- 第一个是自注意力机制(Self-Attention),它允许捕获序列元素之间的“长期”依赖关系,而传统的循环模型发现编码这种关系很困难。
- 第二个关键思想是以(自我)监督的方式对大型(未)标记语料库进行预训练,然后使用小型标记数据集对目标任务进行微调
2.1.自注意力机制
2.1.1.基本自注意力机制
给定一系列项目,自注意力机制评估一个项目与其他项目的相关性(例如,在一个句子中哪些单词可能组合在一起)。自我注意机制是Transformers不可分割的组成部分,它明确地为结构化预测任务建模序列中所有实体之间的交互。基本上,自注意力层通过聚合来自完整输入序列的全局信息来更新序列的每个项目。 对于给定的序列X=(x1 ,x2 ,……,xn )∈Rn×d ,d代表每个实体的维度,自注意的目标是通过根据全局上下文信息对每个实体进行编码来捕获所有元素之间的相互作用。这是通过定义三个可学习的权重矩阵来实现的: 查询矩阵WQ ∈Rn×dq ,关键字矩阵WK ∈Rn×dk ,值矩阵WV ∈Rn×dv 输入序列X首先投影到这些权重矩阵上,以获得Q=XWQ,K=XWKand V=XWV 输出Z=sofmax(QKT/dq 1/2) 对于序列中的给定实体,自注意基本上计算查询与所有键的点积,然后使用softmax运算符对点积进行规范化,以获得注意分数。然后,每个实体成为序列中所有实体的加权和,其中权重由注意分数给出(图2和图3,左上排方框)。
图2:在视觉领域中使用的示例自我注意块。给定图像特征的输入序列,计算三元组(键、查询、值),然后进行注意力计算,并应用它重新加权值。这里显示了一个单头,最后应用输出投影(W)以获得与输入尺寸相同的输出特征。
2.1.2.带掩膜的自注意力
标准的自我注意层关注所有实体,带掩膜的自注意力解码器中使用的自我注意块被屏蔽,以防止关注后续的未来实体。这只需使用掩膜M∈Rn×n进行元素相乘运算即可完成,M是一个上三角矩阵。带掩膜的自注意力定义为: 输出Z=sofmax((QKT/dq 1/2)·M(逐元素乘积)
2.1.3.多头自注意力机制
为了封装序列中不同元素之间的多个复杂关系,多头部注意包括多个自我注意块,每个块都有自己的一组可学习的权矩阵(WQi ,WKi ,WVi ),在多头注意中,自我注意块的输出被连接成一个矩阵[Z1,Z2 ,……,Zh-1]∈Rn×h·dv 投影到一个权矩阵上W∈Rh·dv×d 卷积操作的自我注意的主要区别是:
- 滤波器是动态计算的,而不是像卷积情况的静态滤波器(对任何输入保持不变)
- 自我注意对输入点数的排列和变化是不变的。因此,与需要网格结构的标准卷积不同,它可以很容易地对不规则输入进行操作
- 自注意(使用位置编码)在理论上是一种更灵活的操作,它可以模拟卷积模型对局部特征进行编码的行为。
- 多头自注意(具有足够的参数)是一种更一般的操作,它可以作为特例模拟卷积的表达性。
实际上,自注意提供了学习全局和局部特征的能力,并提供了自适应学习核权值和接受域的表达能力
2.2.(自我)监督预训练
基于自我注意的Transformer模型通常以两阶段的训练机制运行。
- 首先,在大规模数据集(有时是几个可用数据集的组合)上以监督式或自监督式]进行预训练。
- 然后,利用中小规模数据集将预先训练的权重调整到下游任务。(下游任务的例子包括图像分类、目标检测、零镜头分类、问答和动作识别
Vision Transformer模型(VIT-L)在ImageNet测试集上仅在ImageNet训练集上训练时,与在包含3亿张图像的JFT数据集上训练时相比,其在ImageNet测试集上的准确率绝对下降了13%。
第一种被称为Self-supervised learning(SSL)SSL的基本思想是填补空白,即尝试预测图像中被遮挡的数据,时间视频序列中未来或过去的帧,或预测一个前置任务,通过对输入数据使用旋转变换,对图像块或灰度图像使用排列组合。 另一种施加自我监督约束的有效方法是通过对比学习。在不改变底层类语义(例如,图像样式化、裁剪)的情况下,使用nuisance transformations来创建同一图像的两种类型的修改版本,修改部分语义(例如,用同一场景中的另一个对象替换一个对象,或者通过对图像的轻微对抗性更改来改变类)。随后,对模型进行训练,使其对nuisance transformations的转换保持不变,并强调对可能改变语义标签的微小更改进行建模。 自监督学习提供了一种很有前途的学习范式,因为它能够从大量现成的非注释数据中进行学习。在基于SSL的预训练阶段,通过解决一个前置任务,训练模型学习底层数据的有意义表示。根据数据属性和任务定义自动生成前置任务的伪标签(无需任何昂贵的手动注释)。因此,前置任务定义是SSL中的一个关键选择。我们可以根据其前置任务将现有SSL方法大致分类为:
- 合成图像或视频的生成方法(给定条件输入,解决例如蒙版图像建模和图像着色、蒙版对象分类、预测旋转等几何变换或验证视频帧的时间序列
- 利用多个数据模式的跨模式方法。验证两类数据的对应关系,如文本&图像、音频&视频或RGB&流
2.3.Transformer Model
图3-Transformer模型
编码器(中间行)由六个相同的块(即,图3中的N=6)组成,每个块有两个子层:一个多头自我注意网络和一个简单的位置完全连接的前馈网络。在每个块之后使用与层规范化相邻的剩余连接(Residual connection)。与同时执行特征聚合和特征转换的常规卷积网络不同(例如,卷积层之后是非线性),这两个步骤在Transformer模型中解耦。自关注层仅执行聚合,而前馈层执行转换。 解码器(底部行)包含六个相同的块。每个解码器块具有三个子层,前两个子层(多头自注意和前馈)类似于编码器,而第三个子层对相应编码器块的输出执行多头注意 以机器翻译模型为例:编码器的输入是一种语言中的一系列单词(句子)。位置编码添加到输入序列中,以捕获序列中每个单词的相对位置。位置编码与input(d=512)具有相同的尺寸,可以通过正弦或余弦函数学习或预定义。作为一个自回归模型,Transformer的解码器使用先前的预测输出序列中的下一个字。因此,解码器接收编码器的输入以及先前的输出,以预测翻译语言中句子的下一个单词。为了便于残余连接,所有层的输出尺寸保持相同:d=512。多头注意中查询、键和值权重矩阵的维度设置为dQ=64、dk=64、dv=64。
2.4.双向表示( Bidirectional Representations)
原始Transformer模型的训练策略只能关注句子中给定单词左侧的上下文。这是有限的,因为对于大多数语言任务来说,左右两侧的上下文信息都很重要。Transformers的双向编码器表示(BERT)提出将句子中单词的左右上下文联合编码,从而以自我监督的方式改进文本数据的学习特征表示。为此,BERT引入了两个前置任务,以自我监督的方式预先训练Transformer模型:蒙蔽语言模型和下一句预测:
- 蒙蔽语言模型(MLM):句子中固定百分比(15%)的单词被随机蒙蔽,并使用交叉熵损失对模型进行训练以预测这些蒙蔽的单词。在预测蒙面词时,该模型学习合并双向上下文
- 下一句预测(NSP)-给定一对句子,该模型预测一个二进制标签,该对是否在原始文档中有效。这方面的训练数据可以很容易地从任何单语文本语料库生成。例如,在50%的时间里,B是实际的句子(紧挨着a),在另外50%的时间里,B是随机的句子。NSP使该模型能够捕获句子间的关系,这在许多语言建模任务(如问答和自然语言推理)中至关重要。
3.视觉任务中的自注意力机制
3.1.单头注意力机制
3.1.1.卷积神经网络架构中的自注意力机制
受主要用于图像去噪的非局部均值运算的启发,Wang提出了一种用于深度神经网络的可微非局部运算(Non-Local),以前馈方式捕获空间和时间上的长距离依赖关系。给定一个特征图,他们提出的算子将某一位置的响应计算为特征图中所有位置特征的加权和。通过这种方式,Non-Local操作能够捕获特征图中任意两个位置之间的交互,而不管它们之间的距离如何。视频分类是像素之间在空间和时间上都存在远程交互的任务的一个例子。具备远程交互建模能力,非局部深层神经网络在动力学数据集上进行更精确视频分类的优越性。 然而存在问题——计算复杂度高o(N2 ),为了减少这种计算负担,Huang提出了交叉注意模块,该模块仅在交叉路径上为每个像素位置生成交叉注意图,如图5(b)所示。此外,通过反复应用交叉注意,每个像素位置可以从所有其他像素捕获上下文。与非局部块相比,criss-cross占用的GPU内存少11倍,复杂度为O(2√N) 卷积算子的另一个缺点是在训练后,不管视觉输入有什么变化,卷积算子都会应用固定权重。Hu等人提出了局部关系网络( local relation networks ),以在局部窗口中自适应地合成像素。他们引入了一个新的可微分层,该层根据局部窗口内像素/特征之间的组成关系(相似性)调整其权重聚合。这种自适应权重聚合将几何先验引入网络,这对识别任务非常重要 卷积被认为是一种自上而下的算子,因为它在位置上保持个固定不变,而非局部Non-Local运算是一种自底向上的方法,因为它在整个图像上聚集输入特征。局部关系层属于自底向上方法的范畴,但它仅限于固定的窗口大小(7x7)。Belloet等人探讨了将自我注意作为卷积算子的替代方法的可能性。他们采用二维的相对位置编码来开发一种新的自我注意机制,这种机制可以保持平移不变性,这是处理图像的理想特性。尽管这种自我关注作为一种独立的计算原语提供了有竞争力的结果,但结合卷积运算可以获得最佳性能。作者指出,对于不同的体系结构,注意力增强可以提高图像分类和目标检测的系统性能
3.1.2.作为独立原始的自我注意(Self-Attention as Stand-alone Primitive)
总结卷积层的特性:1)具有平移等变性;2)不能用大的感受野进行缩放,因此不能捕获长程相互作用。关注输入的所有空间位置的全局注意力是计算密集型的,并且优选用于下采样的小图像、图像块或增大卷积特征空间。 Ramachandran等人提出用局部自我注意层取代深层神经网络中的卷积层,该层可以应用于小或大的输入,而不会增加计算成本。在基本层面上,所提出的自我关注层考虑给定像素周围特定窗口大小中的所有像素位置,计算这些像素的查询、键和值向量,然后聚集该窗口内的空间信息。向量在投影查询和键的softmax分数后聚合。对所有给定像素重复此过程,并将响应串联以产生输出像素。与基于卷积层的ResNet模型相比,具有局部自我注意层的ResNet模型能够以较少的参数解决目标检测问题。 传统卷积算子联合执行特征聚合和转换(通过应用滤波器,然后将其通过非线性)。相比之下,他们建议单独执行特征聚合,然后使用元素感知机层进行转换。对于特征聚合,他们提出了两种替代策略: 1)成对(Pair-wise)自我注意。成对自我注意是置换和基数不变的操作,是一个集合算子,它计算向量注意力,并在给定的局部邻域中查看特定特征与其邻域的关系。 2)斑块式(Patch-wise)自我注意。面片式自我注意是卷积算子(而不是集合算子)的推广,在导出注意向量时,会查看局部邻域中的所有特征向量。 成对和斑块式自我注意都被实现为学习空间和通道维度权重的注意。这为注意力提供了一种替代方法,通常使用标量权重(采用点积)进行。 作者指出,使用更少的参数,自关注网络(SAN)可以在ImageNet数据集上超越ResNet基线。它们进一步显示了对抗性扰动的鲁棒性以及对不可见变换的推广。
3.2.多头注意力机制(Transformers)
与3.1节中将视觉自注意力机制作为CNNs中的一个组件不同,Vision Transformers(ViTs)改编了级联了多个Transformer层的架构。这一类方法可以分类为:
- 具有所有层的单尺度特征的均匀尺度VIT
- 学习更适合密集预测任务的层次特征的多尺度VIT
- 在VIT中具有卷积运算的混合设计
3.2.1.单尺度特征的均匀尺度VIT
原始的Vision Transformer模型属于这个类,其中多头自我注意应用于输入图像中的一致尺度,其中空间尺度通过网络层次结构保持。我们将此类模型命名为均匀比例ViTs。 他们将原始Transformer模型[(变化最小)应用于一系列图像“面片”上,这些“面片”被展平为向量。该模型在大型数据集(JFT数据集有3亿张图像)上预先训练,然后微调到下游识别基准比如影像分类。这是一个重要步骤,因为在中等范围数据集上预训练ViT不会给出特别有优势的结果,因为CNN编码关于图像的先验知识(感应偏差,例如,翻译等变),与必须从非常大规模的数据中发现此类信息的Transformer相比,减少了对数据的需求。与同样将变压器应用于全尺寸图像但将训练作为生成性任务的iGPT模型相比,ViT使用监督分类任务对模型进行预训练。
图六
DeiT是第一个证明可以在中等规模的数据集上学习Transformer的工作(即,120万个ImageNet示例,而ViT中使用的JFT的3亿个图像仅需相对较短的训练时间)。除了使用CNN中常见的增强和正则化程序外,DeiT的主要贡献是一种新颖的Transformer 本地蒸馏方法,该方法使用CNN作为教师模型(RegNetY16GF)来训练Transformer模型。CNN的输出有助于Transforme标记令牌。自我注意层对这些标记进行操作,以了解它们的相互依赖关系,并输出所了解的类、补丁和提取标记。使用输出类标记上定义的交叉熵损失和蒸馏损失对网络进行训练,以使蒸馏标记与教师输出相匹配。对蒸馏的软标签和硬标签选择进行了探索,发现硬蒸馏的性能更好。有趣的是,学习类和蒸馏标记没有表现出很高的相关性,表明它们的互补性。学习到的表示与性能最好的CNN体系结构(如EfficientNet[87])相比,表现良好,并且对于许多下游识别任务也具有良好的通用性。 标记对标记(token to token,T2T)ViT递归地将相邻标记组合成单个标记,以减少标记长度并聚合空间上下文。Transformer in Transformer在两个级别上计算注意力:补丁级别(标准ViTs)和局部子补丁级别(例如,通过将16×16补丁细分为四个4×4块,并计算这些块之间的注意力)。在标记ViT中,所有补丁标记都有助于损失计算,不同于在损失中仅使用分类标记的常规ViT。该过程包括辅助监控,其中每个图像块(标记)使用预先训练的CNN模型进行标记。与CutMix增强类似,来自不同图像的标记作为增强策略进行混合,并使用标准分类损失和辅助标记标签损失对模型进行训练。他们的模型表现出优异的性能,特别是对于较小尺寸的模型。 自我注意的二次复杂性阻碍了它对较长序列(高分辨率图像)的适用性。交叉协方差图像变换器(XCiT)将注意力纳入特征通道,而不是令牌,即它们的互协方差由Vsoftmax(KTQT/√τ)给出, 提出的交叉协方差注意具有线性复杂性(因为它取决于特征维度而不是标记的数量)。因此,XCiT可以处理大分辨率图像,并在不同的视觉任务中表现出优异的性能,比如自监督和全监督图像分类和密集预测(检测、分割)。DeepViT观察到,深层注意图之间的相似性很高,阻碍了深度缩放模型。他们建议在一个多头块中重新关注注意图,而不是这些注意图的简单聚合,并且显示出比标准的基于多头自我注意的VIT一致的增益。 DeepViT观察到,深层注意图之间的相似性很高,阻碍了深度缩放模型。他们建议在一个多头块中重新关注注意图,而不是这些注意图的简单聚合,并且显示出比标准的基于多头自我注意的VIT一致的增益。
3.2.2.多尺度Transformer
标准VIT模型无法捕捉不同比例的精细空间细节。因此,基于变压器的初始密集预测方法(如DETR)具有卷积后端。VIT的多阶段分层设计(令牌数量逐渐减少,而令牌特征维度逐渐增加)已被证明能够为密集预测任务生成有效的特征。这些模型通常也能很好地执行识别任务。这些体系结构主要通过合并相邻标记并将其投影到更高维的特征空间来稀疏标记。多级ViT的示例包括金字塔ViT、孪生ViT、CoaT、Swin Transformer、卷积视觉Transformer(CvT)、Shuffle Transformer、CrossFormer、RegionViT和局部Transformer模型。其中一些是混合设计(卷积和自我注意操作)而另一些只采用纯粹的基于自我注意的设计。 金字塔ViT(PVT)是ViT的第一个分层设计,提出了一种渐进收缩金字塔和空间缩减注意。PVTv2和SegForme通过引入重叠面片嵌入、深度卷积和有效注意,改进了原始PVT。Swin Transformer具有多级层次结构,通过将窗口划分为多个子窗口,在本地窗口内计算注意力。为了捕获不同窗口(图像位置)之间的交互,窗口分区沿网络层次结构逐渐移动,以捕获重叠区域。局部Transformer模型是另一种分层设计,其中引入局部自我关注,以同时捕获全局和局部关系。类似地,CrossFormer具有层次金字塔结构,并引入了跨尺度嵌入模块,以及长短距离注意和动态位置偏差,以忠实地捕捉局部和全局视觉线索。RegionViT提出了一种从区域到局部的注意编码层次特征。多尺度视觉长形器也考虑了自我注意中的局部环境,但采用了高效的长形器设计来实现自我注意。CrossViT通过分别处理**较小和较大的图像块,**用两个分支(每个分支具有多个变换块)对多尺度特征进行编码。然后使用交叉注意模块将来自这两个多尺度括号的信息融合在一起。
|