原论文下载地址:Transformers in Vision: A Survey
本综述旨在提供计算机视觉学科中transformer模型的全面概述。我们首先介绍transformer成功背后的基本概念,即自我注意、大规模的预训练和双向特征编码。然后,我们涵盖了transformer在视觉中的广泛应用,包括流行的识别任务(例如,图像分类,目标检测,动作识别和分割),生成建模,多模态任务(例如,视觉问题回答,视觉推理和视觉基础),视频处理(例如,活动识别,视频预测)、低水平视觉(如图像超分辨率、图像增强和彩色化)和3D分析(如点云分类和分割)。我们比较了流行技术在建筑设计方面的各自优势和局限性以及它们的实验价值。最后,对开放的研究方向和未来可能的工作进行了分析。
Transformer模型(Attention is all you need)
语言任务中:文本分类、机器翻译和问答
pretext tasks 通常被翻译作“前置任务”或“代理任务”, 有时也用“surrogate task”代替。
pretext task 通常是指这样一类任务,该任务不是目标任务,但是通过执行该任务可以有助于模型更好的执行目标任务。其本质可以是一种迁移学习:让网络先在其他任务上训练,使模型学到一定的语义知识,再用模型执行目标任务。这里提到的其他任务就是pretext task。
这样的预训练避免了昂贵的手动注释,因此,编码高度表达和概括的表示,为给定数据集中存在的实体之间的丰富关系建模。然后,以有监督的方式对所学习的表示在下游任务上进行微调,以获得有利的结果。
本文全面概述了为计算机视觉应用开发的Transformer模型。我们开发了网络设计空间的分类法,并强调了现有方法的主要优点和缺点。其他文献综述主要集中在NLP领域或涵盖基于注意的一般方法。通过关注视觉Transformer这一新兴领域,我们根据自我注意的内在特征和调查任务,综合整理了最近的研究方法。我们首先介绍了Transformer网络的基本概念,然后详细介绍了最新的视觉Transformer的细节。在可能的情况下,我们将NLP领域中使用的Transformer与针对视觉问题开发的Transformer进行比较,以展示主要的新奇之处和有趣的特定领域见解。最近的方法表明,**卷积运算可以完全被基于注意力的Transformer模块所取代,并且在单一设计中也被联合使用,以鼓励两组互补运算之间的共生。**这项调查最后详述了开放性研究问题,并对未来可能的工作进行了展望。
两个关键思想:
给定一系列项目,自注意力机制评估一个项目与其他项目的相关性(例如,在一个句子中哪些单词可能组合在一起)。自我注意机制是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)以获得与输入尺寸相同的输出特征。
标准的自我注意层关注所有实体,带掩膜的自注意力解码器中使用的自我注意块被屏蔽,以防止关注后续的未来实体。这只需使用掩膜M∈Rn×n进行元素相乘运算即可完成,M是一个上三角矩阵。带掩膜的自注意力定义为:
输出Z=sofmax((QKT/dq 1/2)·M(逐元素乘积)
为了封装序列中不同元素之间的多个复杂关系,多头部注意包括多个自我注意块,每个块都有自己的一组可学习的权矩阵(WQi ,WKi ,WVi ),在多头注意中,自我注意块的输出被连接成一个矩阵[Z1,Z2 ,……,Zh-1]∈Rn×h·dv 投影到一个权矩阵上W∈Rh·dv×d
卷积操作的自我注意的主要区别是:
基于自我注意的Transformer模型通常以两阶段的训练机制运行。
Vision Transformer模型(VIT-L)在ImageNet测试集上仅在ImageNet训练集上训练时,与在包含3亿张图像的JFT数据集上训练时相比,其在ImageNet测试集上的准确率绝对下降了13%。
第一种被称为Self-supervised learning(SSL)SSL的基本思想是填补空白,即尝试预测图像中被遮挡的数据,时间视频序列中未来或过去的帧,或预测一个前置任务,通过对输入数据使用旋转变换,对图像块或灰度图像使用排列组合。
另一种施加自我监督约束的有效方法是通过对比学习。在不改变底层类语义(例如,图像样式化、裁剪)的情况下,使用nuisance transformations来创建同一图像的两种类型的修改版本,修改部分语义(例如,用同一场景中的另一个对象替换一个对象,或者通过对图像的轻微对抗性更改来改变类)。随后,对模型进行训练,使其对nuisance transformations的转换保持不变,并强调对可能改变语义标签的微小更改进行建模。
自监督学习提供了一种很有前途的学习范式,因为它能够从大量现成的非注释数据中进行学习。在基于SSL的预训练阶段,通过解决一个前置任务,训练模型学习底层数据的有意义表示。根据数据属性和任务定义自动生成前置任务的伪标签(无需任何昂贵的手动注释)。因此,前置任务定义是SSL中的一个关键选择。我们可以根据其前置任务将现有SSL方法大致分类为:
图3-Transformer模型
编码器(中间行)由六个相同的块(即,图3中的N=6)组成,每个块有两个子层:一个多头自我注意网络和一个简单的位置完全连接的前馈网络。在每个块之后使用与层规范化相邻的剩余连接(Residual connection)。与同时执行特征聚合和特征转换的常规卷积网络不同(例如,卷积层之后是非线性),这两个步骤在Transformer模型中解耦。自关注层仅执行聚合,而前馈层执行转换。
解码器(底部行)包含六个相同的块。每个解码器块具有三个子层,前两个子层(多头自注意和前馈)类似于编码器,而第三个子层对相应编码器块的输出执行多头注意
以机器翻译模型为例:编码器的输入是一种语言中的一系列单词(句子)。位置编码添加到输入序列中,以捕获序列中每个单词的相对位置。位置编码与input(d=512)具有相同的尺寸,可以通过正弦或余弦函数学习或预定义。作为一个自回归模型,Transformer的解码器使用先前的预测输出序列中的下一个字。因此,解码器接收编码器的输入以及先前的输出,以预测翻译语言中句子的下一个单词。为了便于残余连接,所有层的输出尺寸保持相同:d=512。多头注意中查询、键和值权重矩阵的维度设置为dQ=64、dk=64、dv=64。
原始Transformer模型的训练策略只能关注句子中给定单词左侧的上下文。这是有限的,因为对于大多数语言任务来说,左右两侧的上下文信息都很重要。Transformers的双向编码器表示(BERT)提出将句子中单词的左右上下文联合编码,从而以自我监督的方式改进文本数据的学习特征表示。为此,BERT引入了两个前置任务,以自我监督的方式预先训练Transformer模型:蒙蔽语言模型和下一句预测:
受主要用于图像去噪的非局部均值运算的启发,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等人探讨了将自我注意作为卷积算子的替代方法的可能性。他们采用二维的相对位置编码来开发一种新的自我注意机制,这种机制可以保持平移不变性,这是处理图像的理想特性。尽管这种自我关注作为一种独立的计算原语提供了有竞争力的结果,但结合卷积运算可以获得最佳性能。作者指出,对于不同的体系结构,注意力增强可以提高图像分类和目标检测的系统性能
总结卷积层的特性:1)具有平移等变性;2)不能用大的感受野进行缩放,因此不能捕获长程相互作用。关注输入的所有空间位置的全局注意力是计算密集型的,并且优选用于下采样的小图像、图像块或增大卷积特征空间。
Ramachandran等人提出用局部自我注意层取代深层神经网络中的卷积层,该层可以应用于小或大的输入,而不会增加计算成本。在基本层面上,所提出的自我关注层考虑给定像素周围特定窗口大小中的所有像素位置,计算这些像素的查询、键和值向量,然后聚集该窗口内的空间信息。向量在投影查询和键的softmax分数后聚合。对所有给定像素重复此过程,并将响应串联以产生输出像素。与基于卷积层的ResNet模型相比,具有局部自我注意层的ResNet模型能够以较少的参数解决目标检测问题。
传统卷积算子联合执行特征聚合和转换(通过应用滤波器,然后将其通过非线性)。相比之下,他们建议单独执行特征聚合,然后使用元素感知机层进行转换。对于特征聚合,他们提出了两种替代策略:
1)成对(Pair-wise)自我注意。成对自我注意是置换和基数不变的操作,是一个集合算子,它计算向量注意力,并在给定的局部邻域中查看特定特征与其邻域的关系。
2)斑块式(Patch-wise)自我注意。面片式自我注意是卷积算子(而不是集合算子)的推广,在导出注意向量时,会查看局部邻域中的所有特征向量。
成对和斑块式自我注意都被实现为学习空间和通道维度权重的注意。这为注意力提供了一种替代方法,通常使用标量权重(采用点积)进行。
作者指出,使用更少的参数,自关注网络(SAN)可以在ImageNet数据集上超越ResNet基线。它们进一步显示了对抗性扰动的鲁棒性以及对不可见变换的推广。
与3.1节中将视觉自注意力机制作为CNNs中的一个组件不同,Vision Transformers(ViTs)改编了级联了多个Transformer层的架构。这一类方法可以分类为:
原始的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一致的增益。
标准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通过分别处理**较小和较大的图像块,**用两个分支(每个分支具有多个变换块)对多尺度特征进行编码。然后使用交叉注意模块将来自这两个多尺度括号的信息融合在一起。
卷积在捕获图像中的低级局部特征方面做得很好,并且在多个混合ViT设计中得到了探索,特别是在开始对输入图像进行“修补和标记化”时。
基于Transformers的模块已按以下方式用于对象检测:
目标检测Transformers(DETR) 将对象检测视为一组预测任务:给定一组图像特征,目标是预测对象边界框集。Transformer模型可以预测一组对象(在一次定位中),还可以对它们的关系进行建模。DETR为预测和地面真值框之间的二分匹配修改一组损失函数。DETR的主要优势在于,它消除了对手工制作的模块和操作的依赖,如目标检测中常用的RPN(区域建议网络)和NMS(非最大抑制)。通过这种方式,对于复杂的结构化任务(如目标检测),对先验知识和仔细的工程设计的依赖性得到了放松。给定CNN主干的空间特征图,编码器首先将空间维度展平(见图7)。这给出了一个特征序列d×n,其中d为特征尺寸,n=h×w为h,w为空间特征地图的高度和宽度。然后,使用多头自我注意模块对这些特征进行编码和解码,解码阶段的主要区别在于,所有框都是并行预测的,由于编码器和解码器是置换不变的,因此解码器使用学习到的位置编码作为对象查询来生成不同的框。请注意,CNN检测器中的空间结构(例如,更快的R-CNN)会自动编码位置信息。DETR的性能可与流行的更快的RCNN模型相媲美,这是一个令人印象深刻的壮举,因为其设计简单。DETR还扩展到了其他领域的有趣应用,例如:。GCell DETR对其进行了扩展,例如生物细胞的分割。添加一个专用的注意分支,以获得实例分段,此外,还添加了一个CNN解码器增强的框预测,以生成准确的实例掩码。
图7
DETR 模型成功地将卷积网络与Transformers相结合,以消除手工设计的要求,并实现端到端可训练的目标检测管道。然而,它难以检测小对象,收敛速度慢,计算成本相对较高 。**在使用Transformer进行关系建模之前,DETR将图像映射到要素空间。**因此,自我注意的计算成本随着特征映射i的空间大小二次增长。EO(H2W2C),其中H W表示特征图的高度和宽度。这固有地限制了在DETR训练框架中使用多尺度层次特征,这对于检测小对象非常重要。此外,在训练开始时,注意力模块简单地将统一注意力投射到特征图的所有位置并且需要大量的训练周期来调整注意力权重,以收敛到有意义的稀疏位置。这种方法有助于降低DETR的收敛速度。为了缓解上述问题, 提出了一种可变形注意模块来处理特征映射。受可变形卷积的启发,可变形注意力模块只关注整个特征地图中的稀疏元素集,而不管其空间大小。这进一步允许在多尺度注意模块的帮助下跨尺度聚合特征图,而不会显著增加计算成本。变形DETR不仅性能更好,而且其训练时间也比原始DETR模型低10倍 。Anchor DETR 将 中的可学习查询标记替换为基于锚定点的查询,这样每个查询都侧重于预测锚定点附近的对象。锚定点可以固定在二维网格上,也可以从均匀分布的点学习。Anchor DETR 需要的训练次数减少10倍,且性能相当。Pix2Seq 是一个基于Transformer的通用框架,没有任何特定于任务的专门模块,并学习直接生成带有对象描述(边界框和类标签)的标记序列。量化和序列化方案首先将边界框和类标签转换为离散标记序列。然后使用基于通用Transformer的编码器-解码器网络,根据先前的预测和图像特征,以自回归方式生成这些标记。
One Sequence(YOLOS) 是一个简单的、仅关注的架构,直接构建在ViT之上。它将ViT中的类标记替换为多个可学习的对象查询标记,二分匹配丢失用于对象检测。YOLOS以一种纯序列到序列的学习方式展示了ViTs对目标检测的灵活性,并且与图像相关的2D感应偏差最小。本着类似的精神,PVT与DETR结合使用端到端变压器管道执行目标检测。我们注意到,将其他最新的ViT与基于Transformer的检测头相结合,以创建基于纯ViT的设计是可行的,我们希望在未来看到更多这样的努力。
自我关注可以用于密集的预测任务,如需要对像素之间的丰富交互进行建模的图像分割。下面,我们将讨论轴向自我注意,一种可以分割与给定语言表达式对应区域的跨模态方法,以及基于ViTs的分割架构
全景分割旨在通过为每个像素分配一个语义标签和一个实例id,共同解决语义分割和实例分割这两个截然不同的任务。全局上下文可以提供有用的线索来处理这种复杂的视觉理解任务。自我关注在建模远程上下文信息方面是有效的,尽管将其应用于密集预测任务(如全景分割)的大量输入成本过高。一个简单的解决方案是将自我关注应用于下采样输入或每个像素周围的有限区域 。即使引入了这些约束,自我关注仍然具有二次复杂性,并牺牲了全局环境。为了解决这些问题,Wanget al.提出了位置敏感轴向注意,其中2D自我注意机制被重新表述为两个1D轴向拉伸层,依次应用于高度轴和宽度轴(见图8)。轴向注意力的计算效率很高,使模型能够捕获完整的图像上下文。它在COCO、Mapillary Vitas和Cityscapes基准上的全景分割任务以及在ImageNet数据集上的图像分类上实现了具有竞争力的性能。
图8
跨模态自我注意(CMSA)编码语言和视觉特征之间的远程多模态依赖关系,用于参考图像分割任务,该任务旨在分割语言描述所参考图像中的实体。为此,通过将图像特征与每个单词嵌入和空间坐标特征连接起来,获得一组跨模态特征。自我注意作用于这些特征,并对句子中每个单词对应的图像产生注意。然后,分割网络在多个空间层次上执行自我注意,并使用选通多级融合模块通过跨多分辨率特征的信息交换来细化分割遮罩。二进制CE损失用于训练整体模型,该模型在UNC、G-Ref和ReferIt数据集上实现了良好的改进。
虽然上面讨论的分割方法在其基于CNN的体系结构中插入了自我关注,但最近的一些工作提出了基于Transformer的编码器体系结构。Segmentation Transformer(SETR)有一个ViT编码器和两个基于渐进式上采样和多级特征聚合的解码器设计。SegFormer有一个分层金字塔ViT(无位置编码)作为编码器,以及一个简单的基于MLP的解码器,该解码器具有上采样操作以获得分段掩码。Segmenter使用ViT编码器提取图像特征,解码器是一个掩码转换器模块,它使用可学习的掩码标记和图像补丁标记作为输入,预测分割掩码。作者还提出了一种基线线性解码器,该解码器将面片嵌入投影到分类空间,从而产生粗糙的面片级标签。