《A Survey on Visual Transformer》
摘要
将视觉Transformer应用到不同的任务中,分析优缺点,回顾自注意力机制
背景介绍
多层感知和全连接层是经典的神经网络,有多线性层和非线性激活函数。 卷积神经网络引入卷积层和池化层,用于图片的尺度不变 递归神经网络利用递归细胞来处理顺序数据或时间序列数据
Transformer利用注意力机制,提取内在特征是一种新的神经网络。 综述 Vaswani et al. :注意力机制、机器翻译和英语选取分析任务 Devlin et al. :引入新的语言表示模型:BERT Brown et al.:训练了GPT-3模型
Chen et al.:训练序列Transformer,以自动回归预测像素,并在图像分类任务效果和CNN不相上下 Dosovitskiy et al:提出ViT将纯变换器直接应用于图像序列中
主要研究内容:基本图像分类、高级视觉(目标检测、分割和车道检测)、低级视觉(超分辨率、图像去噪和风格转换)和视频处理 目标检测:DETR 分割:Max DeepLab
Transformer的构想
他由一个编码块和解码块组成,其中多个相同结构的编码器/解码器 每个编码器有一个自注意力层和一个前馈神经网络组成,每个解码器由一个自注意力层、一个编码器-解码器-注意力层和前馈神经网络组成。
自注意力
步骤一:计算不同向量间分数(该分数用于确定在当前位置编码单词时我们对其他单词的关注程度) 步骤二:将梯度稳定性的分数标准化(使其具有更稳定的梯度,以便更好地训练) 步骤三:使用softmax函数将分数转换为概率 步骤四:得到加权矩阵 最后每个值向量乘以加和概率,概率越大的向量将被以下层更多的关注。
解码块中解码器-编码器注意层与编码器块中的自注意力层相同,不同的是在于K矩阵和V矩阵是从编码器模块中派生的,Q矩阵是从前一层派生的。
添加一种Multi-Head来改进注意力机制 提出问题:对于一个给定词,在读句子时,希望关注其他几个词 解决问题:单个头部注意力层限制了专注于特定位置(或多个特定位置)的能力,同时不会影响对其他同样重要位置的注意。 不同的头部使用不同的查询矩阵、键矩阵和值矩阵,由于随机初始化,他们可以在训练后将输入向量投影到不同的表示子空间。 Transformer中其他部分 编码器和解码器中的残差:***为加强信息流***在编码器和解码器中的每个子层中添加残差连接 前馈神经网络:在每个编码器和解码器中的自注意力之后应用前馈神经网络。前馈神经网络由两个线性变换层和其中的ReLU激活函数组成。 解码器的最后一层:旨在将向量堆栈转换回一个字。通过线性层和softmax层实现。 Transformer能够捕捉全局信息 Transformer的自注意力机制和全连接层可以并行计算,易于加速
视觉Tansformer
目标检测: 基于Transformer的目标检测方法分为:基于颈部、基于头部和基于框架 特征金字塔网络(FPN)等多尺度特征融合模块(在现代检测框架中被称为颈部)
Zhang et al. :传统方法无法交互跨尺度特征,提出了特征金字塔Transformer(FPT)来充分利用跨空间和尺度的特征交互。 FTP: 自耦Transformer(self-transformer) 接地Transformer(grounding transformer) 翻译Transformer(rendering transformer) 分别对特征金字塔的自耦层,自上而下层和自底向上层的路径信息进行编码。 FTP基本上利用transformer中的自注意力模块来增强特征金字塔的特征融合。
Chi et al.:提出了桥接视觉表征(BVR),通过多头注意模块将不同的异质表征组合成单个表征。 主表征为查询输入,辅助表征为关键输入,通过与Transformer相似的注意块,可以获得主表示的增强特征,从而桥接辅助表示的信息,并有利于最终的检测性能。
Carion重新设计了目标检测框架,并提出了DETR,是一种简单且完全的端到端框架。DETR将目标检测视为一个直观的集合预测问题,并获得摆脱手工制作组件如锚点框和非极大值抑制。 DETR从CNN主干开始从输入图像中提取特征。为了用位置信息补充图像特征,在将固定位置编码送入编码-解码Transformer之前,将其添加到平坦特征中。transformer解码器中嵌入保留位置端点的编码(对象查询),并生成N输出嵌入,N是预定义的参数,并且图像中目标数量特别大。使用简单的前馈网络(FFN)计算最终预测,该网络包括边界框坐标和类标签,来指示目标的特定类和有无目标。 DETR解码器同时并行处理N个对象。DETR采用二部匹配算法来分配预测和地面真实对象。
DETR挑战1:针对小目标训练时间长且性能较差。
Zhu et al.提出的可变形DETR是解决上述挑战的一种方法,提出了一种可变形注意模块用于关注参考点周围的一组小的关键位置,而不是通过transformer中的原始多头注意来查看特征图上的所有空间位置。(计算复杂度降低,有利于快速收敛)可变形注意模块更容易应用于融合多尺度特征。
DETR挑战2:计算复杂度高。
Zheng et al.提出自适应聚类Transformer(ACT),以降低预训练DETR的计算成本,无需任何训练过程。ACT使用局部敏感散列方法自适应对查询特征进行聚类,并将注意力输出广播到所选原型表示的查询。通过将预先训练好的DETR模型中的自我注意模块替换为所提出的ACT,而无需进行任何再训练,可以在不降低精度的情况下大大降低计算成本。此外,通过使用多任务知识提取(MTKD)方法,可以进一步降低性能下降,该方法利用原始转换器提取ACT模块,只需几次微调。
DETR挑战3:DETR模型的缓慢收敛的问题。
Sun et al.揭示Transformer解码器中的交叉注意模块是背后主要原因。提出了一种仅使用编码器的DETR,设计新的二部匹配方案,使训练更加稳定,收敛速度更快。提出了两种基于Transformer的集合预测模型——TSP-FOCS和TSP-RCNN,用于改进具有FPN的纯编码器DETR。
Dai et al.提出一种用于目标检测的无监督训练DETR(up-DETR)提出了一种新的无监督借口任务,称为随机查询补丁检测,以预训练DETR模型。通过这种方案,UP-DETR在相对较小的数据集上提高了检测精度。
CV中的自注意力
自注意力算法 (看过视频后补充)
现有应用 Ramachandran等人提出了一个基于注意的层来构建一个完全注意模型,该模型在COCO基准上优于Retinanet。 GCNet发现,对于图像中的不同查询位置,由非局部操作建模的全局上下文几乎相同,并建议将简化公式和SENet统一为全局上下文建模的通用框架。 V o等人设计了一种双向操作,以收集信息并将其从查询位置分发到所有可能的位置。 Hu等人提出了一个基于自我注意的关系模块,通过对象外观特征之间的交互,同时处理一组对象。Cheng等人提出了RelationNet,其中包含一个基于注意的解码器模块,用于将其他表示桥接到基于单一表示格式的典型对象检测器中。
高效Transformer
回顾了压缩&加速Transformer 网络修剪、低秩分解、知识蒸馏、网络量化、压缩架构设计 剪枝&分解 在Transformer预训练中,多注意力机制是并行操作的,对于特定任务,不需要所有头部。 Michel et al.等人大部分注意力机制可以在测试的时候移除,而不会显著影响性能。不同层需要的Head不同,甚至一个head就能满足某些层需要。定义了重要性分数,用来估计每个注意头对最终输出的影响,并且可以移除不重要的注意头。
Dalvi et al.从两个角度分析冗余(一般冗余和特性定任务冗余),根据彩票假说,分析BERT中的彩票,证明减少FFN层和注意头也能实现高压缩率。
除了Transformer的宽度,深度,还可以减少层数来增加推理速度。不同的Transformer不同的注意head可以并行计算,不同的层必须顺序计算,因为下一层的输入取决于前一层的输出。
Fan et al.提出了一种分层策略来规范模型的训练,然后在测试阶段将整个层一起移除。 Hou et al.自适应地减小预定义变压器模型的宽度和深度,同时获得多个不同尺寸的模型。重要的注意头和神经元通过重新布线机制在不同的子网络中共享。
矩阵分解的目的是基于低秩假设,用多个小矩阵逼近大矩阵。Wang et al.对标准矩阵乘法进行分解,从而实现更高效的推理。
知识蒸馏 知识蒸馏通过转移teacher 网络来培养student网络。stu网络更薄,更浅,更容易部署在资料有限的资源上。神经网络神经网络的输出和中间特征也可用于将教师的有效信息传递给学生。 网络量化 量化旨在减少表示网络权重或中间特征的位数。通用神经网络的量化方法已经得到了充分的讨论,并实现了与原始网络相当的性能。最近,如何对变压器模型进行特别量化引起了广泛关注。 Shridhar et al.建议将输入嵌入到二进制高维向量中,然后使用二进制输入表示来训练二进制神经网络。 Cheong等人用低位表示。 Zhao等人对各种量化方法进行了实证研究,表明k-均值量化具有巨大的发展潜力。 针对机器翻译任务,Prato et al.提出了一种完全量化的转换器,这是第一个8位质量模型,没有任何翻译质量损失。 紧凑型结构设计 Jiang et al.提出一个新的模块,名为基于跨度的动态卷积,将全连接层和卷积层结合起来,简化了自我注意的计算。通过卷积运算计算来自不同令牌的表示之间的局部依赖性,这比标准转换器中的密集全连接层要有效得多。 深度卷积也用于进一步降低计算成本。文献中提出了有趣的汉堡层,它使用矩阵分解来替代原始的自我关注层。矩阵分解可以比标准的自我注意操作更有效地计算,同时可以很好地反映不同标记之间的依赖关系。
|