今天要读的论文MViTv2仍然来自Facebook AI。
论文名称:MViTv2: Improved Multiscale Vision Transformers for Classification and Detection
论文地址:https://arxiv.org/abs/2112.01526
代码地址:https://github.com/facebookresearch/mvit
首先咱们来看MViT存在的缺点。
1)MViT采用的是和ViT一样的绝对位置编码,即物体在图片中移动之后其绝对位置发生了改变,相应的绝对位置编码也发生了变化。这其实忽略了一个很重要的视觉先验知识,即平移不变性。
2)在MViT中,池化Q张量时,只在每个stage的第一个Transformer block中计算,且步长只有(1,2,2)。而池化K、V张量时,在stage所有的Transformer block中计算,步长(1,8,8),这相差很大,可能会存在Q向量信息不足问题。
如何解决MViT存在的问题,咱们来看改进版MViTv2。
在本文中,作者研究并试图将多尺度视觉transformer(MViTv2)作为图像、视频分类和目标检测的统一架构,提出了一个改进的MViT版本。它结合了分解的相对位置嵌入和残差池化连接,本文以五种size实例化这种架构,并在ImageNet分类、COCO检测和Kinetics视频识别方面对其进行评估,其性能优于之前的工作。作者进一步将MViTv2的池化注意力与窗口注意力机制进行比较,前者在准确性/计算方面胜出。在没有花里胡哨的情况下,MViTv2在3个领域达到了SOTA:ImageNet分类的准确率为 88.8%,COCO对象检测的准确率为58.7 APbox,Kinetics-400视频分类的准确率为86.1%。代码和模型可在 https://github.com/facebookresearch/mvit 获得。
为不同的视觉识别任务设计架构历来很困难,最广泛使用的架构是结合简单性和有效性的架构,例如VGGNet和ResNet 。最近,vision transformer,ViT表现出了良好的性能,并可与卷积神经网络CNN相媲美。最近有很多工作针对ViT提出了广泛的修改,将它们应用于不同的视觉任务。
虽然ViT在图像分类中很受欢迎,但它用于高分辨率目标检测和时空视频理解任务仍然具有挑战性。视觉信号的密度在计算和内存需求方面提出了严峻的挑战,因为这些尺度在基于Transformer 的模型的自注意力块中的复杂性呈二次方关系。社区已经通过不同的策略解决了这种负担:两个流行的是1)在窗口内计算局部注意力,用于对象检测,以及2)池化注意力,在计算视频任务中的自注意力之前,局部聚合特征。
后者促进了多尺度vision transformer,MViT的发展,它不再像VIT将图像以固定的比例分为一定数量的patch,而是具有从高分辨率到低分辨率的多阶段、特征层次结构。
在本文中,作者开发了两种简单的技术改进,以进一步提高其性能,并研究将MViT作为单一模型家族,用于跨3个任务进行视觉识别任务:图像分类、目标检测和视频分类,以了解它是否可以作为空间的通用视觉骨干网络和时空识别任务(见图 1)。
改进架构MViTv2包括以下:
1)创建了强大的基线,以改善沿两个轴的池化注意力:
(a)平移不变性位置嵌入,使用分解的位置距离注入位置信息到Transformer 块中;
(b)残差池化连接,以补偿pooling stride在注意力计算中的作用。
简单而有效的升级带来了明显更好的结果。
2)MViTv2,采用了标准的密集预测框架:带有特征金字塔网络FPN的 Mask R-CNN,并将其应用于对象检测和实例分割。
MViT是否可以通过使用pooling attention来处理高分辨率视觉输入,以克服所涉及的计算和内存成本?实验表明,池化注意力比局部窗口注意力机制(例如Swin transformer)更有效,作者进一步开发了一种简单而有效的混合窗口力注意方案,可以补充池化注意力以获得更好的准确性/计算折衷。
3)以五种规格(宽度、深度、分辨率)实例化了架构,并提出了大型多尺度transformer实际训练方法。MViT变体应用于图像分类、目标检测和视频分类,其修改最小,以求研究其作为通用视觉架构的目的。
作为计算机视觉任务包括图像识别、目标检测和视频识别的主要骨干网络。
自ViT的工作以来,它在图像patch上应用Transformer架构,并在图像分类方面显示出非常有竞争力的结果。目前社区已经开发了不同的工作来进一步改进ViT,包括有效的训练方法、多尺度transformer结构和先进的自注意力机制设计。在这项工作中,我们建立在多尺度vision transfromer,MViT的基础上,并将其作为各种视觉任务的通用骨干网络。
ViT目标任务设法解决检测的挑战,通常需要高分辨率输入和特征图进行准确的目标定位。由于transformer中自注意算子的二次复杂度,这大大增加了计算复杂度。最近有些技术缓解了此计算开销,包括shifted window attention和 Longformer attention。同时,MViT中的池化注意力旨在从不同的角度有效地计算自注意力。本文研究了用MViT进行检测,而且更一般地将池化注意力与局部注意力机制进行了比较。
ViT视频识别任务最近也显示出强劲的结果,但大多依赖于大规模外部数据(如ImageNet21K)的预训练。MViTv1报告了基于Transformer的Kinetics数据架构的良好从头开始训练方法。本文通过改进的池化注意力来改进MViT架构,这在准确性上简单而有效;此外,还研究了ImageNet预训练对视频任务的巨大效果。
MViTv1的关键思想是构建不同的stage为low and high-level多尺度视觉建模,该方案打破了ViT中固定比例尺度的思想,同时引入了pooling attention。池化注意力通过池化Q张量实现不同stage的分辨率降低(对应的是序列长度),并通过池化K和V张量来显著降低计算和内存复杂度。
Pooling Attention可以在每个stage都进行池化,这样可以大大减少Q,K,V计算时的内存成本和计算量。
虽然MViT已经显示出它们在建模token之间的交互能力,但它们专注于内容,而不是结构。时空结构建模仅依赖于“绝对”位置嵌入来提供位置信息,这忽略了视觉中移位不变性。也就是说,MViT对两个patch之间的交互进行建模的方式会根据它们在图像中的绝对位置而改变,即使它们的相对位置保持不变。为了解决这个问题,我们结合了相对位置嵌入,它只依赖于token之间的相对位置距离到池化自我注意计算中。
在本节中,将描述如何将 MViT 主干网络应用于对象检测和实例分割任务。
MViT的层次结构在四个stage产生多尺度特征图,因此自然地集成到特征金字塔网络(FPN)中进行目标检测任务,如图3所示。FPN中横向连接的自顶向下金字塔在所有尺度上为MViT构建了语义特别强的特征映射。通过使用带有 MViT 骨干网络的 FPN,我们将其应用于不同的检测架构(例如 Mask R-CNN)。
Transformers 中的自注意力具有二次复杂度 w.r.t 令牌的数量。对于目标检测来说,这个问题更加严重,因为它通常需要高分辨率输入和特征图。本文研究了两种显著降低这种计算和内存复杂性的方法:首先,在MViT的注意力块中设计的池化注意力pooling attention。其次,在Swin目标检测任务中,窗口注意力window attention作为一种减少计算的技术。
池化注意和窗口注意都通过减少Q,K和V张量的大小来控制自我注意的复杂性。然而,它们的内在性质是不同的:池化注意力通过局部聚合对它们进行下采样来汇集特征,但保持全局自注意力计算;而窗口注意力保持张量的分辨率,但通过将输入(patch化标记)划分为不重叠的窗口在本地执行自注意力,然后仅在每个窗口内计算局部自注意力。这两种方法的内在差异促使我们研究它们是否可以在目标检测任务中执行互补。
默认情况下,窗口注意力仅在窗口内执行局部自注意力,因此缺乏跨窗口的连接。与使用移位窗口来缓解这个问题的Swin不同,本文提出了一种简单的混合窗口注意力 (Hwin) 设计来添加跨窗口连接。Hwin计算所有窗口内的局部注意力,但输入到FPN的最后三个stage的最后一个块。这样,FPN的输入特征映射包含全局信息。5.3节中的消融表明,这种简单的Hwin在图像分类任务和目标检测任务上的表现始终优于Swin。此外,结合池化注意力和Hwin在目标检测方面能取得了最佳性能。
与ImageNet分类不同,输入是固定分辨率的裁剪(例如 224×224),对象检测通常在训练中输入不同大小尺寸。对于 MViT 中的位置嵌入(绝对或相对),首先从ImageNet预训练权重初始化参数,对应于具有 224×224 输入大小的位置嵌入,然后将它们插值到各自的大小以进行对象检测训练。
相比于基于图像的MViT,基于视频的MViT只有三个差异:1)在投影层,patch化主干需要将输入投影到时空立方体而不是2D patch中; 2)池化算子现在汇集时空特征图; 3)相对位置嵌入参考时空位置。
由于 1) 和 2) 中的投影层和池化算子默认由卷积层实例化,因此我们使用膨胀的初始化作为CNN。具体来说,在预训练模型中用2D conv层的权重初始化中心帧的conv过滤器,并将其他权重初始化为 0。对于 3),我们利用方程4中分解的相对位置嵌入,简单地将来自预训练权重作时间嵌入,空间嵌入初始化为 0。
我们构建了几个具有不同参数和FLOP数量的 MViT 变体,如表 1 所示,以便与其他vision transformer工作进行公平比较。具体来说,通过改变基本通道维度、每个阶段的块数和块中的头数,为MViT设计了五种变体(Tiny、Small、Base、Large 和 Huge)。请注意,本文使用较少数量的头来改进运行时间,因为更多的头会导致较慢的运行时间,但对FLOP和参数没有影响。
遵循 MViT池化注意力设计,默认在所有池化注意力块中使用K和V pooling,在第一阶段将池化步幅设置为4,并自适应地衰减跨阶段的步幅 w.r.t 分辨率。
首先在ImageNet图像分类和COCO目标检测上检测了MViTv2的性能,然后进行全面的消融实验。其中在AVA数据集上动作检测效果如下。
Comparison with previvous work on AVA(Spatio-Temporal Action Detection v2.2)
本文研究了pooling attention和Hwin自注意力,实验结果如下:
(1)对于ViT-B模型,基于窗口的方法减少了计算量和内存消耗,但是由于缺少跨窗口之间的交互,使得精度也下降了2.0%,Swin window可以提升0.4%的精度。
本文的HWin则与Full attention性能相近,比Swin Window提升1.7%,结合pooling attention则在计算量减少38%的情况下达到了最佳精度。
(2)对于MViTv2-S,默认使用pooling attention,添加Swin和HWin都可以降低模型的复杂度,但性能会略有衰减。通过进一步增加池化的步幅可以实现最佳的精度/算力折衷。
Positional embeddings
针对不同的位置嵌入观察到:(i)将(2)与(1)进行比较,绝对位置仅比 no pos 性能略有提高,这是因为池化算子(由 conv 层实例化)已经对位置信息进行建模。(ii) 比较(3, 4)和(1, 2),相对位置可以通过将平移不变性先验引入池化注意力来带来性能提升。最后,分解的相对位置嵌入比COCO上的联合相对位置快3.9倍。
Residual pooling connection
简单地添加残差路径(2)可以提高 IN-1K (+0.3%) 和 COCO (APbox +0.8) 的结果,成本可以忽略不计。(3)使用残差池并将Q池化添加到所有其他层(步幅为=1)会导致显着提升,尤其是在COCO(+1.4 APbox)上。这表明MViTv2中Q pooling block和残差连接式十分有必要。
Runtime Compression
可以看到MViT比Swin有更高的吞吐率,图略。
目标检测时,使用单尺度检测和多尺度检测器,可以看到FFN显著提升了两个backbone的性能。MViT-B显著优于ViT-B,这说明使用多尺度的层次化设计非常适合密集预测的目标检测任务。
在Kinetics-400、Kinetics-600和Kinetics-700和Something-Something-v2(SSv2)数据集上做了实验,部分结果如下。
实验观察到:针对MViTv2-S和MViTv2-B模型,与从头开始训练相比,使用IN1K或IN21k预训练可以提高准确性。另外对于大型模型,ImageNet预训练是必要的,因为它们在从头开始训练时严重过拟合。
本文提出了一种改进的Multiscale Vision Transformer作为视觉识别的通用层次结构。在实证评估中,与其他相比,MViTv2表现出强大的性能,并在图像分类、目标检测、实例分割和视频识别中广泛使用的基准上实现了最先进的准确性。希望对视觉识别的进一步研究有用。
本文由深圳季连科技有限公司AIgraphX自动驾驶大模型团队整理编辑。如有错误,欢迎在评论区指正。