Vision Transformer综述
1. Transformer简介
Transformer首先应用于自然语言处理领域,是一种以自我注意机制为主的深度神经网络。由于其强大的表示能力,研究人员正在寻找将变压器应用于计算机视觉任务的方法。在各种视觉基准测试中,基于变压器的模型表现类似或优于其他类型的网络,如卷积和循环神经网络。由于其高性能和较少的视觉特异性感应偏倚需求,变压器正受到计算机视觉界越来越多的关注。在本文中,我们对这些视觉转换器模型进行了综述,并根据不同的任务对其进行了分类,分析了它们的优缺点。我们探讨的主要类别包括骨干网络、高/中级视觉、低级视觉和视频处理。我们还包括高效的变压器方法,用于将变压器推入基于实际设备的应用程序。此外,我们还简要介绍了计算机视觉中的自注意机制,因为它是变压器的基本组件。在本文的最后,我们讨论了视觉变压器所面临的挑战,并提出了进一步的研究方向。
在这里,我们回顾了与基于变压器的视觉模型相关的工作,以跟踪这一领域的进展。图1展示了视觉变压器的发展时间表——毫无疑问,未来会有更多的里程碑。
图1,Transformer发展的关键里程碑。视觉Transformer型号用红色标注。
2. Transformer组成
Transformer首次被用于机器翻译任务的自然语言处理(NLP)领域。如图2,原始变压器的结构。它由一个编码器和一个解码器组成,其中包含几个具有相同架构的转换器块。
编码器生成输入的编码,而解码器获取所有编码并使用它们合并的上下文信息来生成输出序列。每个变压器块由多头注意层、前馈神经网络、快捷连接和层归一化组成。下面,我们详细描述变压器的每个组成部分。
2.1 Self-Attention
在自注意层,首先将输入向量转换为三个不同的向量:
-
查询向量(query vector)q
-
键(key vector)向量k
-
值向量(value vector)v
三种向量的维数d(q、k、v)=d(model)=512,由不同输入导出的向量被打包成三个不同的矩阵,即Q、K和V。然后,计算出不同输入向量之间的注意函数,如下图3所示:
Step 1:计算不同输入向量之间的得分
Step 2:对梯度的稳定性分数进行归一化
Step 3:使用softmax函数将得分转化为概率
Step 4:求加权值矩阵Z=V*P
该过程可以统一为一个单一函数(dk=模型维度=512)
公式(1)背后的逻辑很简单。
Step 1 计算每对不同向量之间的分数,这些分数决定了我们在编码当前位置的单词时给予其他单词的关注程度
Step 2 将分数归一化,以增强梯度稳定性,用于改进训练;
Step 3 将分数转化为概率。
最后,将每个值向量乘以概率的和。具有较大概率的向量将获得额外的注意。
解码器模块中的编码器-解码器注意层类似于编码器模块中的自注意层,但有以下例外:密钥矩阵K和值矩阵V由编码器模块导出,查询矩阵Q由上一层导出。
注意,前面的过程对每个单词的位置是不变的,这意味着自我注意层缺乏捕捉单词在句子中的位置信息的能力。然而,语言中句子的顺序性要求我们在编码中整合位置信息。为了解决这个问题并获得单词的最终输入向量,在原始的输入嵌入中添加了一个维度为dmodel的位置编码。具体地说,这个位置是用下面的公式编码的
Pos表示单词在句子中的位置,i 表示位置编码的当前维度。通过这种方式,位置编码的每个元素都对应于一个正弦波,它允许变压器模型学习通过相对位置参与,并在推理过程中外推到更长的序列长度。
除了vanilla transformer中的固定位置编码外,各种模型中还使用了习得的位置编码和相对位置编码。
Multi-Head Attention(多头注意力)
多头注意是一种可以用来提高vanilla自我注意层性能的机制。
注意,对于一个给定的参考词,我们通常想要在整个句子中关注其他几个词。一个单一的自我注意层限制了我们专注于一个或多个特定位置的能力,而不会同时影响对其他同等重要位置的注意。这是通过给注意层不同的表示子空间来实现的。
具体来说,对于不同的头部使用不同的查询矩阵、键值矩阵,这些矩阵通过随机初始化,训练后可以将输入向量投射到不同的表示子空间中。
为了更详细地说明这一点,给定一个输入向量和注意头数量h,dmodel=模型维度
-
首先将输入向量转换为三组不同的向量:查询组(query group)、键组(key group)和值组(value group)
-
在每一个组中。有h个维度为dq=dk’=dv’=dmodel/h=64的向量
-
然后,从不同输入导出的向量被打包成三组不同的矩阵:
-
多头注意过程如下图所示:
其中,Q’(K’,V’同理)是{Qi}的串联,Wo是投影权值。
2.2 Transformer的其他关键概念
2.2.1 Feed-Forward Network 前馈网络
在每个编码器和解码器的自注意层之后采用前馈网络(FFN)。它由两个线性变换层和其中的一个非线性激活函数组成,可以表示为以下函数其中w1、w2为两个线性变换层的两个参数矩阵,s为非线性激活函数,如GELU。隐藏层的维度为dh=2048。
2.2.2 Residual Connection 残差连接
如图2中所示,在编码器和解码器的每个子层中增加一个剩余的连接(黑色箭头)。
这加强了信息流,以实现更高的性能。在剩余连接之后,采用层归一化。这些操作的输出可以描述为
X作为自我注意层的输入,查询、键值矩阵Q、K和V都来自同一个输入矩阵X。
2.2.3 解码器中的最后一层
解码器中的最后一层用于将向量堆栈转换回一个单词。这是通过一个线性层和一个softmax层实现的。
线性层将该向量投影为具有dword维数的logits向量,其中dword是词汇表中的单词数。然后使用softmax层将logit向量转换为概率。
当用于CV(计算机视觉)任务时,大多数变压器采用原变压器的编码器模块。这种变压器可以看作是一种新型的特征提取器。与只关注局部特征的CNN(卷积神经网络)相比,变压器可以捕获长距离的特征,这意味着它可以很容易地获得全局信息。
与必须顺序计算隐藏状态的RNN(循环神经网络)相比,变压器的效率更高,因为自注意层和全连接层的输出可以并行计算,且易于加速。由此,我们可以得出结论,进一步研究变压器在计算机视觉和自然语言处理中的应用将会产生有益的结果。
3. VISION TRANSFORMER
在本节中,我们回顾了基于变压器的模型在计算机视觉中的应用,包括图像分类、高/中级视觉、低级视觉和视频处理。简要总结了自注意机制和模型压缩方法在高效变压器中的应用。
3.1 Representation Learning的主干
与文本相比,图像涉及更多的维度、噪声和冗余形态,因此被认为生成建模更加困难。除了cnn,可以采用ResNet作为模型的基线,并使用视觉变压器代替卷积的最后阶段。
卷积层提取的低层特征输入vision transformer,之后使用一个标记器(tokenizer)将像素分组为少量的视觉标记(visual tokens),每个标记表示图像中的一个语义概念。
这些视觉标记直接用于图像分类,而转换器用于建模标记之间的关系。
如图4所示,将作品分为单纯使用变压器和将CNN与变压器相结合。
我们将这些模型的结果总结在表2和图6中,以展示backbones的发展情况。
![image-20230612092350068](https://i-blog.csdnimg.cn/blog_migrate/aa413f81a14d69a2a2f0e8d718380d47.png)
除了监督学习外,自监督学习也在视觉转换器中进行了探索。
3.1.1 Pure Transformer
![image-20230612093525765](https://i-blog.csdnimg.cn/blog_migrate/a71cbdc85260416e054a940845eef714.png)
基础ViT. Vision Transformer (ViT)是一个纯变压器,直接应用于图像补丁序列进行图像分类任务。它尽可能地遵循变压器的原始设计。ViT的框架如图5所示:将2d图像重塑成一块块补丁,并通过线性映射将其位置编码和补丁块嵌合在一起。
令(p,p)为补丁的分辨率,(h,w)为图像分辨率,变压器的有效序列长度为n=hw/p^2。由于变压器在其所有层中使用恒定的宽度,一个可训练的线性投影将每个矢量化路径映射到模型维数d,其输出被称为补丁嵌入(patch embeddings)。
值得注意的是,ViT只使用标准变压器的编码器(除了用于层规范化的位置),其输出在一个MLP头之前。在大多数情况下,ViT是在大型数据集上进行预训练的,然后针对较小数据的下游任务进行微调。
**ViT的变体.**在虚拟视觉技术范式的基础上,人们提出了一系列虚拟视觉技术的变体,以提高视觉任务的性能。主要途径包括增强局部性、提高自我意识和建筑设计。
还有一些其他方向可以进一步改进视觉变压器,如位置编码、归一化策略、快捷连接、去注意力等。
3.1.2 Transformer With Convolution
每个变压器块中的前馈网络(FFN)与卷积层相结合,以促进相邻tokens之间的相关性。此外,一些研究人员已经证明,基于变压器的模型可能更难获得良好的数据拟合能力,换句话说,他们对优化器的选择、超参数和训练的时间表非常敏感。
Visformer揭示了使用两种不同训练设置的变压器和cnn之间的差距。第一个是cnn的标准设定,训练时间更短,数据增加只包含随机裁剪和水平翻转。另一种即训练日程更长,数据增强更强。改变了ViT早期的视觉处理,将其嵌入干替换为标准的卷积干,并发现这种改变使ViT收敛更快,并允许使用AdamW或SGD而不显著降低精度。除了这两项工作外,还选择在变压器顶部添加卷积干。
3.1.3 自我监督的表征学习
基于生成的方法:本文简要介绍iGPT的作用机制。这种方法包括一个训练前阶段,接着是一个微调阶段。在训练前阶段,研究了自回归目标和BERT目标。为了实现像素预测,采用了序列转换器的结构,而不是语言符号(如NLP中使用的)。当与早期停止结合使用时,预训练可以被认为是一个有利的初始化或正则化。在微调阶段,他们向模型中添加了一个小的分类头。这有助于优化分类目标和调整所有权重。
通过k-means聚类将图像像素转化为序列数据。给定由高维数据X=(x1,…,xn)组成的未标记数据集X,他们通过最小化数据的负对数可能性来训练模型:
p(x)是图像数据的概率密度,可以建模为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IH41Nqiq-1686551810644)(C:/Users/dell/AppData/Roaming/Typora/typora-user-images/image-20230612142825068.png)]
恒等排列Πi=i 适用于[1,n],这也被称为光栅顺序。
iGPT和ViT是将变压器应用于视觉任务的两项开创性工作。iGPT模型与vi -like模型的区别主要体现在3个方面:
-
iGPT的输入是一组像素聚类的调色板序列,而ViT则将图像均匀地分割成若干个局部的小块;
-
iGPT体系结构为编码器-解码器框架,而ViT只有变压器编码器;
-
iGPT利用自回归的自监督损耗进行训练,而ViT则通过监督图像分类任务进行训练。
基于对比学习的方法。对比学习是当前计算机视觉中最流行的一种自我监督学习方式。将对比学习应用于视觉变压器的无监督预训练
3.1.4 讨论
视觉转换器的多头自注意、多层感知器、快捷连接、层归一化、位置编码和网络拓扑等组成部分在视觉识别中发挥着关键作用。如上所述,为了提高视觉变压器的有效性和效率,人们提出了许多工作。从图6的结果可以看出,将CNN和transformer结合使用可以获得更好的性能,这说明它们通过局部连接和全局连接实现了互补。对骨干网的进一步研究将有助于整个视觉社区的改进。对于视觉变压器的自监督表征学习,我们还需要努力追求大规模的预训练在NLP领域的成功。