前言
本文回顾了ViT的结构,总结了计算机视觉中的transformer的主要改进思路:改进分块,改进位置编码,改进Encoder,增加Decoder。每个思路下都介绍了相关的论文,介绍了这些论文的提出出发点和改进思路。
本文的目的不在于介绍transformer现在有哪些模型,而在于学习借鉴别人发现问题并改进的思路,从而在自己方向上提出合适且合理的改进。
本文来自公众号CV技术指南的
关注公众号CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。
ViT回顾
在讲计算机视觉中transformer的模型创新总结之前,先有必要对它整体模型进行回顾。在本文选取了最常用的ViT。
如图所示,对于一张图像,先将其分割成NxN个patches,把patches进行Flatten,再通过一个全连接层映射成tokens,对每一个tokens加入位置编码(position embedding),会随机初始化一个tokens,concate到通过图像生成的tokens后,再经过transformer的Encoder模块,经过多层Encoder后,取出最后的tokens(即随机初始化的tokens),再通过全连接层作为分类网络进行分类。
这个过程中存在很多值得改进的空间,下面我们看看其它论文是如何思考并改进的。以下内容按照上面这个实现过程对每个步骤的改进来排序。
改进思路
1. 分块的改进
渐进采样式vision transformer
论文:Vision Transformer with Progressive Sampling(ICCV2021)
代码:https://github.com/yuexy/PS-ViT
提出问题
ViT采用了一种朴素的标记化(tokenization)方案,该方案将一幅图像分割成一系列规则间隔的patches,这些patches被线性投影到tokens中。通过这种方式,图像被转换成数百个视觉tokens。
然而,这种tokens化方案的局限性是显而易见的。
首先,硬分割可能会分离出一些高度相关的区域,这些区域应该用同一组参数建模,这破坏了固有的对象结构,并使输入patches的信息量变得较少。图显示猫头被分成几个部分,导致仅基于一个部分的识别挑战。其次,tokens被放置在规则网格上,而与底层图像内容无关。图显示,大多数网格聚焦在不感兴趣的背景上,这可能导致感兴趣的前景对象淹没在干扰信号中。
改进思路
人类视觉系统以一种完全不同的方式组织视觉信息,而不是一次不加区别地处理整个场景。取而代之的是,它循序渐进地、选择性地将注意力集中在视觉空间的有趣部分,无论何时何地需要它,而忽略不感兴趣的部分,随着时间的推移,结合来自不同注视的信息来理解场景。
受上述过程的启发,论文提出了一种新的基于transformer的渐进采样(Progressive Sampling)模块,该模块能够学习从哪里看图像,以缓解ViT中简单的tokens化方案带来的问题。
论文提出的模块不是从固定位置采样,而是以迭代的方式更新采样位置。如图所示,在每次迭代中,当前采样步骤的tokens被馈送到transformer编码层,并预测一组采样偏移量以更新下一步的采样位置。该机制利用transformer的能力来捕获全局信息,通过结合本地上下文和当前tokens的位置来估计对感兴趣区域的偏移量。这样,注意力就会像人类视觉一样,一步一步地集中到图像的可辨别区域。
详情请阅读:
2.相对位置编码的反思与改进
论文:Rethinking and Improving Relative Position Encoding for Vision Transformer(ICCV2021)
代码:https://github.com/microsoft/Cream/tree/main/iRPE
提出问题
transformer位置表示的编码方法主要有两类。一个是绝对的,另一个是相对的。
绝对方法将输入tokens的绝对位置从1编码到最大序列长度。也就是说,每个位置都有单独的编码向量。然后将编码向量与输入Tokens组合,以将位置信息输入给模型。
相对位置方法对输入tokens之间的相对距离进行编码,并学习tokens之间的成对关系。相对位置编码(relative position encoding, RPE)通常通过具有与self-attention模块中的 query 和 key 交互的可学习参数的查询表来计算。这样的方案允许模块捕获Tokens之间非常长的依赖关系。
相对位置编码在自然语言处理中被证明是有效的。然而,在计算机视觉中,这种效果仍然不清楚。最近很少有文献对其进行阐述,但在Vision Transformer方面却得出了有争议的结论。
例如,Dosovitski等人观察到相对位置编码与绝对位置编码相比没有带来任何增益。相反,Srinivaset等人发现相对位置编码可以诱导明显的增益,优于绝对位置编码。此外,最近的工作声称相对位置编码不能和绝对位置编码一样好用。这些工作对相对位置编码在模型中的有效性得出了不同的结论,这促使我们重新审视和反思相对位置编码在Vision Transformer中的应用。
另一方面,语言建模采用原始相对位置编码,输入数据为一维单词序列。但对于视觉任务,输入通常是2D图像或视频序列,其中像素具有高度空间结构。目前尚不清楚:从一维到二维的扩展是否适用于视觉模型;方向信息在视觉任务中是否重要?
改进思路
1.论文分析了相对位置编码中的几个关键因素,包括相对方向、上下文的重要性、query、key、value和相对位置嵌入之间的交互以及计算代价。该分析对相对位置编码有了全面的理解,并为新方法的设计提供了经验指导。
2.提出了一种高效的相对编码实现方法,计算成本从原始O()降低到O(nkd)(其中k< 3.综合考虑效率和通用性,提出了四种新的vision transformer的相对位置编码方法,称为image RPE(IRPE)。这些方法很简单,可以很容易地插入self-attention层。实验表明,在不调整任何超参数和设置的情况下,该方法在ImageNet和COCO上分别比其原始模型DeiTS和DETR-ResNet50提高了1.5%(top-1ACC)和1.3%(MAP)。 4.实验证明,在图像分类任务中,相对位置编码可以代替绝对编码。同时,绝对编码对于目标检测是必要的,其中像素位置对于目标定位是重要的。 详情请阅读: 关于Encoder的改进,大部分都是在将transformer用于具体任务时,针对各个任务的特点或出现的问题进行改进的。虽然不一定是一个通用的模型,但其在改进过程中体现的改进思路仍值得学习和借鉴。 TransFER 论文:TransFER: Learning Relation-Aware Facial Expression Representations With Transformers(ICCV2021) 提出问题 表情识别具有类内相似性小、类间相似性大的特点。同时,需要提取不同的局部表征来对不同的表情进行分类。即使某些局部块(patches)不可见,更多样化的局部块也可以发挥作用。同时,不同的局部块可以相互补充。 例如,如图所示,仅根据嘴巴区域(列2)很难区分惊讶(第1行)和愤怒(第2行)。我们提出的TransFER模型探索了不同的关系感知面部部位,如眼睛(第3列,第1行)和眉毛之间的区域(第3列,第2行),这有助于区分这些不同的表情。 因此,应该在全局范围内探索不同局部块(patches)之间的关系,突出重要的块(patches),抑制无用的块(patches)。 改进思路 论文提出了TransFER模型来学习不同关系感知的FER局部表示。 首先,提出了随机丢弃注意力图的多注意丢弃算法(Multi-Attention Dropping, MAD)。通过这种方式,推动模型去探索除最具区分性的局部斑块之外的综合局部斑块,自适应地聚焦于不同的局部斑块。当某些部位因姿势变化或遮挡而不可见时,此方式特别有用。 其次,Vision Transformer(VIT)适用于FER,称为VIT-FER,用于对多个局部块之间的连接进行建模。由于采用全局范围对每个局部块进行增强,充分挖掘了多个局部块之间的互补性,提高了识别性能。 第三,多头自我注意(multi-head self-attention)使VIT能够在不同位置共同关注来自不同信息子空间的特征。然而,由于没有明确的指导,可能会建立冗余关系。为解决这一问题,提出了随机丢弃一个自我注意的多头自我注意丢弃(Multi-head Self-Attention Dropping, MSAD)方法。在这种情况下,如果放弃了self-attention,模型就被迫从其他地方学习有用的关系。因此,不同局部块之间的丰富关系被挖掘出来,从而使FER受益。 结合新的MAD和MSAD模块,提出了最终的体系结构,称为TransFER。如图所示,与VIT-FER基线(列2)相比,TransFER定位更多样化的关系局部表示(列3),从而区分这些不同的表达式。它在几个FER基准上达到了SOTA性能,显示了它的有效性。 详情请阅读: SOTR 论文:SOTR: Segmenting Objects with Transformers(ICCV2021) 代码:https://github.com/easton-cau/SOTR 提出问题 transformer用于语义分割方面还在一些不足。一方面,transformer在提取低层特征时表现不佳,导致对小目标的错误预测。另一方面,由于特征映射的广泛性,需要大量的内存和时间,特别是在训练阶段。 改进思路 为了克服这些缺点,论文提出了一种创新的自下而上模型SOTR,该模型巧妙地结合了CNN和transformer的优点。 SOTR的重点是研究如何更好地利用transformer提取的语义信息。为了降低传统self-attention机制的存储和计算复杂度,论文提出了双注意力,它采用了传统注意力矩阵的稀疏表示。 1.论文提出了一种创新的CNN-Transformer-hybrid实例分割框架,称为SOTR。它可以有效地对局部连接和远程依赖进行建模,利用输入域中的CNN主干和transformer编码器,使它们具有高度的表现力。更重要的是,SOTR通过直接分割对象实例而不依赖于box检测,大大简化了整个流水线。 2.设计了双注意力,这是一种新的position-sensitive self-attention机制,是为transformer量身定做的。与原来的transformer相比,SOTR这种设计良好的结构在计算量和内存上都有很大的节省,特别是对于像实例分割这样的密集预测的大输入。 3.除了纯粹基于transformer的模型外,提出的SOTR不需要在大数据集上进行预训练,就可以很好地推广归纳偏差。因此,SOTR更容易应用于数据量不足的情况。 4.在MS Coco基准上,SOTR的性能达到了使用ResNet-101-FPN主干的AP的40.2%,在精确度上超过了大多数最SOTA方法。此外,由于twin transformer对全局信息的提取,SOTR在中型物体(59.0%)和大型物体(73.0%)上表现出明显更好的性能。 详情请阅读: PnP-DETR 论文:PnP-DETR: Towards Efficient Visual Analysis With Transformers 代码:https://github.com/twangnh/pnp-detr 提出问题 将transformer网络应用于图像特征映射可能在计算上代价高昂,这主要是由于对长展平的特征向量的注意操作。这些特征可能是冗余的:除了感兴趣的对象之外,自然图像通常包含巨大的背景区域,这些背景区域可能在相应的特征表示中占据很大一部分;而且,一些区分特征向量可能已经足以检测对象。 现有的提高transformer效率的工作主要集中在加速注意操作上,很少考虑上面讨论的空间冗余。 改进思路 为了解决上述局限性,论文开发了一个可学习的轮询和池化(Poll and Pool, PnP)采样模块。它的目的是将图像特征图压缩成由精细特征向量和少量粗略特征向量组成的抽象特征集。 从输入特征图中确定性地采样精细特征向量,以捕捉精细前景信息,这对于检测目标是至关重要的。粗略特征向量聚合来自背景位置的信息,所产生的上下文信息有助于更好地识别和定位对象。然后,transformer对细粗特征空间内的信息交互进行建模,并获得最终结果。 由于抽象集比直接扁平化的图像特征图短得多,因此transformer的计算量大大减少,并且主要分布在前景位置。这种方法与提高transformer效率的方法是正交的,可以进一步与它们结合得到更有效的模型。 详情请阅读: PiT 论文:Rethinking Spatial Dimensions of Vision Transformers 代码:https://github.com/naver-ai/pit 提出问题 CNN 以大空间尺寸和小通道尺寸的特征开始,并逐渐增加通道尺寸,同时减小空间尺寸。由于称为空间池化的层,这种维度转换是必不可少的。现代 CNN 架构,包括 AlexNet、ResNet和 EfficientNet,都遵循这一设计原则。 池化层与每一层的感受野大小密切相关。 一些研究表明,池化层有助于网络的表现力和泛化性能。 然而,与 CNN 不同的是,ViT 不使用池化层,而是在所有层中使用相同大小的空间。 改进思路 首先,论文验证了 CNN 上池化层的优势。实验表明,池化层证明了 ResNet 的模型能力和泛化性能。为了将池化层的优势扩展到 ViT,论文提出了一种基于池化的视觉transformers (PiT)。 PiT 是一种与池化层相结合的transformer架构。它可以像在 ResNet 中一样减少 ViT 结构中的空间大小。 最后,为了分析 ViT 中池化层的效果,论文测量了 ViT 的空间交互比,类似于卷积架构的感受野大小。论文展示了池化层具有控制自注意力层中发生的空间交互大小的作用,这类似于卷积架构的感受野控制。 详情请阅读: Swin Transformer 论文: Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 代码:https://github. com/microsoft/Swin-Transformer 提出问题 论文试图扩展Transformer的适用性,使其可以作为计算机视觉的通用主干,就像它在NLP中所做的那样,也可以像CNNs在视觉中所做的那样。 论文提到,将transformer在语言领域的高性能转换到视觉领域的重大挑战可以用这两种模式之间的差异来解释。这些不同之处之一涉及到规模。 与作为语言transformer中处理的基本元素的单词tokens不同,视觉元素在尺度上可以有很大的变化,这是一个在诸如目标检测之类的任务中受到关注的问题。在现有的基于transformer的模型中,tokens都是固定比例的,这一特性不适合这些视觉应用。 另一个不同之处在于,与文本段落中的文字相比,图像中像素的分辨率要高得多。存在许多视觉任务,如语义分割,需要在像素级别进行密集预测,这对于高分辨率图像上的Transformer来说是很困难的,因为它的self-attention的计算复杂度是图像大小的二次方。 改进思路 为了克服这些问题,论文提出了一种通用的Transformer骨干网,称为Swin Transformer,它构造了分层的特征映射,并且计算复杂度与图像大小成线性关系。 如图1(A)所示,Swin Transformer通过从小块(灰色轮廓)开始,逐渐合并更深的Transformer层中的相邻块来构建分层表示。 有了这些分层的特征图,Swin Transformer模型可以方便地利用先进的技术进行密集预测,如特征金字塔网络(FPN)或U-Net。线性计算复杂度是通过在分割图像(红色轮廓)的非重叠窗口内局部计算self-attention来实现的。每个窗口中的patches数量是固定的,因此复杂度与图像大小成线性关系。 这些优点使得Swin Transformer适合作为各种视觉任务的通用主干,而不是以前基于Transformer的架构,后者生成单一分辨率的特征地图,并且具有二次方复杂性。 Swin Transformer的一个关键设计元素是窗口分区在连续的self-attention层之间的移动,如图2所示。移动的窗口桥接了前一层的窗口,提供了它们之间的连接,显著增强了建模能力。 这种策略在实际延迟方面也是有效的:一个窗口内的所有query patch都共享相同的key集,这便于硬件中的内存访问。相反,较早的基于滑动窗口的self-attention方法由于不同query像素的不同key集而在一般硬件上受到低延迟的影响。 实验表明,所提出的移位窗口方法比滑动窗口方法具有更低的延迟,但在建模能力上是相似的。事实证明,移位窗口方法对于全MLP体系结构也是有益的。 详情请阅读: 对于视频中的transformer,主要改进思路是将patches在空间上和时间上分开进行attention。这里列举一篇。 TimeSformer 论文:Is Space-Time Attention All You Need for Video Understanding? 代码:https://github.com/lucidrains/TimeSformer-pytorch 提出问题 视频理解与NLP有很多的相似的地方。首先,视频和语句都具有序列性;而且,一个字只能与语句中其它字联系才能理解,在视频行为中一个片段也需要与视频的上下文相关联。于是,论文期望NLP中这种long-range self-attention模型可以在视频模型中也有很高的表现。 在视频领域,2D或3D卷积是用来提取时空特征的主流操作,但卷积操作比较明显的一个问题是感受野是有限的,若要获得全局感受野,需要堆叠很多层卷积层,它们的信息传播路径比较长。而self-attention这种操作可以很轻松地获得全局感受野,捕获局部和长范围的依赖关系。 卷积操作的另一个问题是受到内存的限制,特别是视频领域,往往需要在高分辨率和长范围帧之间权衡。而最近几年一些研究者的工作指出Transformer可以比CNN获得更快的训练和推理,因此在同样计算量预算下,transformer可以使用更大学习容量。 标准的self-attention需要计算所有tokens相互之间的相似性,这样的做法就是计算量比较大,因此需要考虑如何利用self-attention来处理图像块。论文比较了这方面的几种处理方式:Joint Space-Time Attention、Sparse Local Global Attention 和Axial Attention。这几种方式的共同点是采用ViT中的方式将图像进行分块,而它们之间的区别在于如何用self attention来处理这些块。论文提出Divided attention的方式具有最好的表现。 改进思路 详情请阅读: 论文:End-to-End Object Detection with Transformers 代码:https://github.com/facebookresearch/detr DETR中似乎没有介绍为何这么设计结构,而只是在说要做一个End-to-End的transformer模型。因此这里只介绍一下它的结构。 欢迎关注公众号 CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。 在公众号中回复关键字 “入门指南“可获取计算机视觉入门所有必备资料。
3.Encoder的改进
4.增加Decoder
相关文章阅读