视觉Transformer综述(上)

简介: 前几日,华为诺亚,北京大学,悉尼大学共同发表了论文《A Survey on Visual Transformer》,本文针对其重点内容进行翻译概括如下。文末附论文原文和本文完整版下载方式。

   Transformer是一种主要基于自注意力机制的深度神经网络,最初是在自然语言处理领域中应用的。受到Transformer强大的表示能力的启发,研究人员提议将Transformer扩展到计算机视觉任务。与其他网络类型(例如卷积网络和循环网络)相比,基于Transformer的模型在各种视觉基准上显示出竞争性的甚至更好的性能。


   在本文中,我们通过将这些Visual Transformer模型按不同的任务分类,并分析了这些方法的优缺点,提供了文献综述。主要类别包括基本图像分类,high-level vision,low-level vision和视频处理。由于self-attention是Transformer的基本组成部分,因此也简要回顾了计算机视觉中的自注意力。包括将Transformer推向实际应用的有效Transformer方法。最后,我们讨论了Visual Transformer的进一步研究方向。

 

1. 总体概述


   卷积神经网络(CNN)引入了卷积层和池化层以处理图像等位移不变性的数据。递归神经网络(RNN)利用循环单元来处理顺序数据或时间序列数据。Transformer是一种新提出的神经网络,主要利用自我注意机制提取内在特征。在这些网络中,Transformer是最近发明的神经网络(2017年),对于广泛的人工智能应用具有巨大的潜力。


   Transformer最初应用于自然语言处理(NLP)任务,并带来了显着的改进。例如,Vaswani等人首先提出了一种仅基于注意力机制来实现机器翻译和英语选区解析任务的Transformer。Devlin等人引入了一种称为BERT的新语言表示模型,该模型通过共同限制左右上下文来预训练未标记文本的翻译器。BERT在当时的11个NLP任务上获得了SOTA结果。Brown等人在45TB压缩明文数据上预训练了基于巨型Transformer的GPT-3模型,该模型具有1,750亿个参数,并且无需微调即可在不同类型的下游自然语言任务上实现出色的性能。这些基于Transformer的模型显示了强大的表示能力,并在NLP领域取得了突破。


   受NLP中Transformer功能的启发,最近的研究人员将Transformer扩展到计算机视觉(CV)任务。CNN曾经是视觉应用中的基本组件,但是Transformer显示出了其作为CNN替代品的能力。Chen等人训练一个sequence Transformer去自动回归预测像素并在图像分类任务上与CNN取得竞争性结果。ViT是Dosovitskiy等人最近提出的Visual Transformer模型。ViT将一个纯粹的transformer直接用于图像块序列,并在多个图像识别基准上获得SOTA性能。除了基本的图像分类,transformer还用于解决更多计算机视觉问题,例如目标检测,语义分割,图像处理和视频理解。由于其出色的性能,提出了越来越多基于transformer的模型来改善各种视觉任务。


为了获得更好的方便研究人员研究不同的主题,我们按其应用场景对transformer模型进行分类,如表1所示。特别是,主要主题包括基本图像分类,high-level vision,low-level vision和视频处理。high-level vision对图像中可以看到的内容进行提取和解析,例如对象检测,分割和车道检测。已经有许多用于解决这些high-level vision任务的transformer模型,例如DETR,deformanble DETR用于物体检测,以及Max-DeepLab用于分割。low-level vision主要涉及从图像(通常通常表示为图像本身)中提取描述子,其典型应用包括超分辨率,图像去噪和风格迁移。在 low-level vision的transformer研究很少,需要进行更多的研究。


由于视频的顺序特性,transformer可以自然地应用于视频。与传统的CNN或RNN相比,Transformer开始在这些任务上显示出具有竞争力的性能。在这里,我们对基于transformer的视觉模型给出了一个综述,以跟上该领域的进展。Visual transformer的开发时间表如图1所示。

2adc35e3cebedc86a05d16655b042402.png

2. Transformer结构

详情请看另一篇文章《transformer解读

 

3. Visual Transformer

在本节中,我们将对基于transformer的计算机视觉模型进行全面回顾,包括图像分类,high-level vision,low-level vision和视频处理中的应用。我们还简要总结了自注意力机制和模型压缩方法在高效transformer中的应用。

20201226234305575.png

3.1 Image Classification


受到transformer在自然语言处理方面取得巨大成功的启发,一些研究人员试图检验相似的模型是否可以学习图像的有用表示。 作为一种比文本更高维度,更嘈杂,更冗余的形式,人们认为图像很难生成模型。 iGPT 和ViT是仅使用transformer进行图像分类的两个模型。


3.1.1 iGPT


自从最初的生成式图像预训练方法浪潮问世以来,已经有很长时间了。Chen等人重新检查这类方法,并结合自我监督方法的最新进展。该方法包括一个预训练阶段,然后是一个fine-tune阶段。在预训练中,应尝试使用自回归和BERT目标。此外,在NLP中应用sequence transformer体系结构来预测像素而不是语言标记。预训练使得训练可以尽早地停止,因此可被视为有利的初始化或正则化。在fine-tune过程中,他们向模型添加了一个小的分类头,该分类头用于优化分类目标并适应所有权重。


给定一个由高维数据x =(x1,...,xn)组成的未标记数据集X。他们通过最小化数据的负对数似然来训练模型:


0a57b3f993e49bfdc0fed8d5a115d699.png

其中p(x)是图像数据的密度,可以将其建模为:

21b2abac5e788de86c4f02f30db28b6a.png

其中1 <= i <= n采用单位置换 πi = i,也称为栅格顺序。他们还考虑了BERT目标,该目标对子序列M⊂[1,n]进行采样,以使每个索引i独立地具有在M中出现的0.15的概率。M称为BERT掩码,模型为 通过最小化“unMasked”元素x [1,n] \ M上的“Masked”元素x[1,n]\M的负对数似然来训练:

fd8fd9a055c16b5bdb3577d9588fe64c.png在预训练中,他们选择LAR或Lbert中的一种,并在预训练数据集上最大程度地减少损失。他们使用transformer decoder模块的GPT-2公式表示。特别是,layer norms先于注意力和多层感知器(MLP)操作,并且所有操作都严格按照残差路径进行。 序列元素之间唯一的混合发生在注意力操作中,并且为了确保在训练AR目标时进行适当的调节,他们将标准的上三角mask应用于attention logits的n×n矩阵。当使用BERT目标时,不需要attention logits mask:将内容嵌入应用于输入序列后,它们会将位置清零。


在微调期间,它们平均将最终lay norm n(L)的输出在整个序列维上合并,以每个示例提取特征的d维向量:

20201226234347613.png

他们学习了从f(L)到class logit的投影,该投影用于最小化交叉熵损失L(CLF)。 在实践中,他们凭经验发现联合目标L(GEN) + L(CLF)的效果更好,其中L(GEN)∈{L(AR),L(BERT)}。(此处括号内的内容为下标)


3.1.2 ViT


 最近,Dosovitskiy等人提出了一种pure transformer,即Vision Transformer(ViT),当直接应用于图像块的序列时,它在图像分类任务上表现良好。 它们尽可能遵循原始transformer的设计。 下图显示了Vision Transformer的框架。

1995a06beada870373962431741513b0.png为了处理2D图像,将图像x∈R H×W×C整形为一系列平坦的2D块x(p)∈R N×(P^2·C)。  (H,W)是原始图像的分辨率,(P,P)是每个图像块的分辨率。 那么N = HW / P^2是该Transformer的有效序列长度。 由于Transformer的所有层都使用恒定的宽度,因此可训练的线性投影将每个矢量化路径映射到模型尺寸D,它们的输出称为patch embeddings。


与BERT的[class]标记类似,可学习的embedding被用于embedding块的序列,其在Transformer encoder输出处的状态用作图像表示。在预训练和微调过程中,分类头的大小均相同。另外,将一维position embeddings添加到embeddings块中以保留位置信息。 他们对position embeddings的2D感知方法有不同的探索,它们没有比标准的1D position embeddings获得明显的收益。 joint embeddings作为encoder的输入。 值得注意的是,Vision Transformer仅使用标准Transformer的encoder,而MLP头后面是Transformer encoder的输出。


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


当在中等大小的数据集(如ImageNet)上训练时,此类模型产生较差的结果,与可比较大小的ResNets相比,精度要低几个百分点。Transformer缺乏CNN固有的一些归纳偏置(inductive biases),例如翻译等方差和局部性,因此在训练不足的数据量时不能很好地概括。 但是,如果在大型数据集上训练模型(14M-300M图像),则图片会发生变化。作者发现,大规模训练胜过归纳偏置。进行足够规模的预训练并转移到数据点较少的任务时,Transformer可获得出色的结果。 在JFT-300M数据集上进行过预训练的Vision Transformer在多个图像识别基准上达到或优于SOTA,在ImageNet上达到88.36%,在CIFAR-10上达到99.50%,在CIFAR-100上达到94.55%,以及77.16% 在VTAB套件中包含19个任务。表3显示了iGPT和ViT的详细结果


66545b34776b55d832c16c007b1460fd.png

总之,iGPT回顾了生成式预训练方法,并将其与自我监督方法相结合,结果并不十分令人满意。ViT取得了更好的结果,特别是当它使用更大的数据集(JFT-300)时。但是,ViT的结构与NLP中的Transformer基本相同 ,如何在块内部(intra-patch)和块之间(inter-patch)明确相关性仍然是一个具有挑战性的问题。此外,在ViT中将相同大小的块(patch)视为相等。 众所周知,每个块的复杂性是不同的,并且该特性目前尚未得到充分利用。


3.2 High-level Vision


最近,人们对采用Transformer执行High-level计算机视觉任务(例如对象检测,车道检测和分段)的兴趣日益增加。 在本节中,我们将对这些方法进行回顾。


3.2.1 Object Detection


根据采用Transformer体系结构的模块,可以将基于Transformer的目标检测方法粗略地分为neck-based, head-based 和 framework-based的方法。


多尺度特征融合模块(在现代检测框架中称为neck),例如特征金字塔网络(FPN),已广泛用于目标检测中,以实现更好的检测性能。 张etc 建议传统方法无法交互跨尺度特征,因此提出了特征金字塔transformer(FPT)来充分利用跨空间和尺度的特征相互作用。FPT由三种类型的Transformer组成,即self-transformer, grounding transformer 和 rendering transformer,它们分别对特征金字塔的self-level, top-down 和 bottom-up路径的信息进行编码。FPT基本上利用Transformer中的自注意模块来增强特征金字塔网络的特征融合。


预测头对于物体检测器起着重要的作用。 先前的检测方法通常利用单个视觉表示(例如边界框和角点)来预测最终结果。Chi等提出了桥接视觉表示(Bridging Visual Representations --BVR),通过多头关注模块将不同的异构表示(heterogeneous representations)组合成一个单一的表示。 具体来说,将主表示作为query输入,将辅助表示作为key输入。通过类似于Transformer中的注意模块,可以获得用于主表示的增强功能,该功能将来自辅助表示的信息桥接起来并有利于最终检测性能。


与上述利用Transformer的方法增强了现代检测器的特定模块不同,Carion 重新设计了目标检测框架,并提出了detection Transformer(DETR),它是一个简单且完全端到端的目标探测器。DETR将目标检测任务视为一个直观的集合预测问题,摆脱了传统的手工制作组件,例如锚点生成和非最大抑制(NMS)后处理。

700c66d03060e9ac4e276db02292ec98.png

如图6所示,DETR从CNN主干开始以从输入图像中提取特征。为了用位置信息补充图像特征,将固定的位置编码添加到平坦的十个特征中,然后再馈入编码解码器转换器。Transformer解码器将编码器的embedding与N个学习的positional endcodings(object queries)一起使用,并生成N个output embeddings,其中N是预定义参数,通常大于图像中对象的数量。最终预测是通过简单前馈网络(FFN)计算的,其中包括边界框坐标和类别标签以指示对象的特定类别或没有对象。与原始Transformer顺序生成预测的原始Transformer不同,DETR同时解码N个对象。DETR采用两部分匹配算法来分配预测的和真实的对象。如方程式(11)所示。匈牙利损失(Hungarian loss)被用来计算所有匹配对象对的损失函数。

c3e8c1f4e0cd0765ecf9aab36c57dcdd.png其中y和yˆ分别是ground truth和目标的预测,σˆ是最优分配,ci和P^(Ci)是目标类别标签和预测标签,bi和b^(i)分别是ground truth和预测边界框,DETR在物体检测方面表现出令人印象深刻的性能,其精度和速度与COCO基准上广受欢迎且与公认的Faster R-CNN基线相当。


DETR是基于Transformer的目标检测框架的新设计,为社区开发完整的端到端检测器提供了参考。 但是,vanilla DETR也面临一些挑战,例如,训练时间较长,小目标的性能较差。Zhu等人提出的Deformable DETR是解决上述问题的一种流行方法,并且大大提高了检测性能。代替通过原始的多头注意力在Transformer中查看图像特征图上的所有空间位置,建议使用可变形注意模块(deformable attention module)来关注参考点周围的一小组关键位置。 这样,大大降低了计算复杂度,也有利于快速收敛。 更重要的是,可变形注意模块可轻松应用于融合多尺度功能。 与DETR相比,可变形DETR的性能更好,训练成本降低了10倍,推理速度提高了1.6倍。deformable DETR还应用了一些其他改进,包括有效的迭代边界框优化方法和two-stage方案,从而进一步提高了性能。


针对DETR的高计算复杂性问题,Zheng等人提出了一种自适应聚类变压器(Adaptive Clustering Transformer--ACT)来减少预训练的DETR的计算成本,而无需任何训练过程。 ACT使用局部敏感度哈希方法(locality sensitivity hashing method)自适应地对queries特征进行聚类,并将注意力输出广播到由所选原型表示的queries。 通过将预训练的DETR模型的自我注意模块替换为ACT,而无需进行任何重新训练,几乎不降低精度,可以显着降低计算成本。此外,可以通过使用多任务知识蒸馏(multi-task knowledge distillation--MTKD)方法进一步降低性能下降,该方法利用原始Transformer以少量的fine-tuning时间来蒸馏ACT模块。


Sun等人研究了DETR模型的慢收敛问题,并揭示了Transformer解码器中的交叉注意模块是主要原因。为此,提出了DETR的纯编码器(encoder-only)版本,并且在检测精度和训练收敛性上实现了相当大的改进。 此外,设计了一种新的二分匹配方案,以实现更稳定的训练和更快的收敛。 提出了两种基于Transformer的集合预测模型,以改进具有特征金字塔的纯编码器DETR,即TSP-FCOS和TSP RCNN,它们比原始DETR模型具有更好的性能。


Dai等人在自然语言处理中受到预训练Transformer方案的启发,提出了一种用于目标检测的无监督预训练DETR(UP-DETR)的方法。具体而言,提出了一种新的无监督借口任务,即随机query patch检测,以预训练DETR模型。通过这种方案,UP-DETR大大提高了在相对较小的数据集(即PASCAL VOC)上的检测精度。 在具有足够训练数据的COCO基准上,UP-DETR仍然无法完成DETR,这证明了无监督的预训练计划的有效性。


3.2.2 Segmentation


DETR 可以自然扩展到全景分割任务,方法是在解码器上附加一个掩码头(mask head),从而获得有竞争力的结果。  Wang等提出了Max-DeepLab来直接预测通过mask transformer实现的全景分割结果,而无需替代诸如box detection之类的子任务。 与DETR相似,Max-DeepLab以端到端的方式简化了全景分割任务,并直接预测了一组不重叠的masks和相应的标签。 使用全景率(PQ)样式损失来训练模型。此外,与现有的将transformer堆叠在CNN主干网上方的方法不同,Max-DeepLab采用双路径框架(dual-path framework)将CNN与transformer更好地结合在一起。


Wang等提出了一种基于transformer的视频实例分割(transformer-based video instance segmentation --VisTR)模型,该模型以图像序列作为输入并产生相应的姿态预测结果。提出了实例序列匹配策略,为预测分配ground truth。 要获取每个实例的掩码序列,VisTR利用实例序列分割模块从多个帧中累积掩码特征,并使用3D CNN分割掩码序列。


也有尝试将transformer用于姿态分割,这是基于DETR全景分割模型的。所提出的Cell-DETR还添加了skip connections,以在分段头中从主干CNN和CNN解码器桥接功能,以获得更好的融合功能。 Cell-DETR显示了来自显微图像的cell实例分割的SOTA性能。

Zhao等设计了一种新颖的Transformer架构(Point Transformer)来处理点云。所提出的自我注意层对于点集的排列是不变的,因此适用于点集处理任务。 Point Transformer对于3D点云的语义分割任务显示出强大的性能。

 

3.2.3 Lane Detection


Liu等基于PolyLaneNet 提出通过学习transformer网络的全局上下文来提高曲线车道检测的性能。 与Poly LaneNet相似,提出的方法(LSTR)将车道检测视为将车道与多项式拟合的任务,并使用神经网络预测多项式的参数。为了捕获用于车道和全局环境的细长结构,LSTR将transformer网络引入到架构中,以处理通过卷积神经网络提取的低级特征。 此外,LSTR使用匈牙利损失来优化网络参数。与仅使用0.2倍参数的PolyLaneNet相比,LSTR可以实现2.82%的更高精度和3.65倍FPS。transformer网络、卷积神经网络和匈牙利损失的结合实现了一个微小,快速而精确的车道检测框架。

 


相关文章
|
4月前
|
存储 机器学习/深度学习 人工智能
当我们谈论 AI 推理的 KV Cache,我们在说什么?
本文以《Attention Is All You Need》为起点,深入浅出地解析了 Transformer 架构的核心思想与技术细节。
当我们谈论 AI 推理的 KV Cache,我们在说什么?
|
Unix Shell Linux
赞!优雅的Python多环境管理神器!易上手易操作!
赞!优雅的Python多环境管理神器!易上手易操作!
978 0
|
人工智能 小程序 前端开发
【一步步开发AI运动APP】一、写在最前
本文介绍新系列【一步步开发AI运动APP】,旨在帮助开发者突破小程序限制,打造性能更强、体验更佳的AI运动APP。相比小程序,APP可充分利用CPU/GPU算力,实现高精度人体检测、多人检测等复杂功能。本系列基于跨平台框架`uni`及扩展插件`uni AI运动识别插件`,适合有小程序开发经验的开发者。内容涵盖抽帧、人体识别、运动分析、姿态交互等,逐步进阶实现完整AI运动APP,并支持多手机平台发布。
|
监控 网络协议 Nacos
Nacos:构建微服务架构的基石
Nacos:构建微服务架构的基石
990 3
|
自然语言处理 算法 JavaScript
模糊搜索:在不确定性中寻找精确结果
模糊搜索作为搜索技术的基础部分,凭借其较强的容错性和高效性,广泛应用于各类场景。然而,在需求越来越复杂的今天,模糊搜索的局限性也逐渐显现,尤其在深层语义理解和复杂查询中。因此,模糊搜索在与语义搜索等新型搜索方式结合的过程中展现了更大的潜力。希望本文对你理解模糊搜索的背景、原理及应用有所帮助,助力你在实际项目中灵活运用这一工具。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
模糊搜索:在不确定性中寻找精确结果
|
测试技术
提升软件测试效率的五大策略
【10月更文挑战第13天】 本文将探讨如何通过优化测试流程、引入自动化测试、加强测试用例设计、培养高素质测试团队和持续反馈改进等五大策略,来显著提升软件测试的效率。这些方法不仅适用于不同类型的软件项目,还能有效降低测试成本,提高软件质量。
1467 0
|
Java 应用服务中间件 开发者
Spring Boot 2.x新特性有哪些?
【7月更文挑战第16天】Spring Boot 2.x新特性有哪些?
549 1
|
存储 自然语言处理 Java
UTF-8编码详解
UTF-8编码详解
3313 0
|
JSON 前端开发 数据格式
常见的http状态码信息
常见的http状态码信息
1034 0
|
Shell 网络安全 Python
SSL 证书过期巡检脚本 (Python 版)
SSL 证书过期巡检脚本 (Python 版)