这篇文章主要针对减少Vision Transformer的计算消耗,提出了一种新的方法。在ViT中我们已知Transformer的token数量与patch大小成反比,这表示patch大小越小的模型计算成本越高,而patch越大模型效果的损失就越大。这正和我们的目的相背离。SuperViT的作者从两个方面来提升性能:多尺度的patch分割和多种保留率。尽量的减少计算量加速计算并维持较好的模型性能。该种方法用在图像分类上基本没什么问题,但是在超分领域,像素的丢弃还是会较严重的影响模型的性能。
作者试图降低VIT的计算成本。于是乎提出了一种新的训练范式,该范式一次只训练一个ViT模型,但能够以不同计算成本提供改进的图像识别性能。新模型被称为超级视觉Transformer(SuperViT),具有接受多个不同大小的patch以及以多个保留率来保留信息token的能力,以实现良好的硬件推理效率,因为可用的硬件资源经常会不时变化。
在ImageNet上的实验结果表明,SuperViT可以显著降低ViT模型的计算成本,同时提高性能。
Vision Transformer (VIT)最初于2020年推出,现已在计算机视觉领域广泛推广,并很快成为各种主流视觉任务中最普遍和最有前景的架构之一,如图像分类、目标检测、视频理解。ViT的基本思想是将图像分解为一系列局部patch,并使用线性投影将这些patch标记为输入。ViT的优点在于能够利用多头自注意(MHSA)机制捕捉图像不同部分之间的长期关系。
ViT的最大缺陷在于巨大的计算消耗,Transformer的token数量与patch大小成反比,这表示patch大小越小的模型计算成本越高,这严重阻碍了其在实际应用中的使用。减小计算成本最直观的方法是通过增大patch大小来减少Transformer的token数。然而,在ViT文章中已经证明在以较小尺寸的patch作为输入时模型表现更好。因此模型的高效性和性能之间的平衡仍待我们去探索。
现有的几种利用图像的冗余信息,丢弃部分包含信息较少的像素的方法。
虽然这些token丢弃的方法能够降低计算成本,但它们牺牲了识别精度。 例如,最近的PS-ViT和Evo-ViT将DeiT-S的顶级性能降低了0.4%。其次现有的大多数方法都是在固定token保持率的前提下训练ViT模型。
现状:大多数现有方法仅限于处理具有相同patch大小的token序列或以固定的保留率来挖掘token间的冗余信息。一旦训练完成,推理过程是确定的,因此这些方法会产生一个静态复杂度的训练模型,这在性能和推理成本之间存在很差的权衡。
↓ ↓ ↓
由此:作者提出了一种新的训练范式,该范式一次只导出一个ViT模型,但具有通用的图像识别能力,其复杂性可以动态地适应当前的硬件资源。将输入图像复制到多个平行分支中,每个分支被分割成包含不同信息程度特定大小的局部patch。这些patch分支依次馈送到ViT模型,以获取多个感受野大小的patch信息。对于每个patch序列,作者还努力从训练具有多个token保持率的网络的角度挖掘冗余区域信息。
SuperViT的优势:
(1)与牺牲识别准确性的token-drop方式相比,观察到superViT的训练范式提供了更好的识别能力。例如,在ImageNet上,将策略应用于DeiT-S的骨干网络上时,即使丢弃了50%的token,收益仍会增加0.2%。
(2) SuperViT提供了更好的硬件效率,因为它可以通过调整输入图像的patch大小以及token保持率来适应当前可用的硬件资源,从而实现快速的精度效率权衡。
ViT模型得益于MHSA,对输入token之间的长期依赖关系进行建模。然而,主要的计算复杂性也源于MHSA层。MHSA已成为ViT模型中的计算瓶颈。怎么减少计算成本?
第一种简单的方法是通过扩大分割patch的大小来减少Transformer的输入序列长度,然而,ViT模型的性能也与patch大小密切相关。
第二种直观的方法是丢弃网络中信息量较小的token,但这会降低准确性。
权衡模型的计算复杂度和识别精度后,作者通过增加不同感受野的的输入patch分支,适当的增大输入patch的大小,减少计算量。又尽量的减少丢弃部分token带来的图像损失,同时采用不同的丢弃保留率来适应不同的输入patch感受野大小。关键点就两个:patch分割和丢弃率怎样权衡。下面具体看做法,分为两个部分:多尺度patch分割、多种保留率。

虽然较大尺寸的patch可以降低计算成本,但较小尺寸的patch可以提高识别效率。为了在较低的计算量下保持良好的性能,作者在ViT模型的训练中同时利用了不同尺寸大小的输入,以分支的形式。(实际上分割后patch size是不变的,因为token要保持相同的维度才能进行计算,但是改变了输入图像的大小,也就是说每个patch里包含的信息范围改变了,感受野变了)
将输入图像复制到G个平行分支中,每个分支中patch大小不变,patch数量N不同(并以不同的保持率丢弃,在下一节),根据patch数量将图像缩放到对应分辨率大小。如图,三个分支分别有 N 1 、 N 2 、 N 3 = 16 、 9 、 4 N_1、N_2、N_3=16、9、4 N1、N2、N3=16、9、4。图像将会缩放到刚好能分割成对应数量patch的大小,并进行分割。在Transformer中计算单元是token,是每个token和其余token之间计算相似度,所以要保持不同分支每个token的维度相同,也就是patch大小相同,这样才能共享不同分支的模型参数。图像的缩放使用简单经济的双线性插值进行降采样/升采样,以进行形状对齐。
使用分辨率的patch作为输入,能够适应不同复杂度的图像,能够在计算消耗和精度性能之间进行权衡。
鉴于图像内容中广泛存在冗余区域,为了进一步降低SuperViT的计算成本:大多数现有的方法丢弃包含信息量较小的token,表现都不是很理想,因为它们使用固定的token保持率训练ViT模型,这无法适应不同复杂性的图像。因此,作者使用了多种保持率来加强SuperViT。
也就是说在不同的分支使用不同的保持率来适应不同的输入size。(分割后的patch大小是不变的)
根据现有的研究,作者文中直接保留具有较大注意值的标记。(并不是随机丢弃)训练具有多个token保持率的ViT模型也有助于提高性能,同时删除信息量较小的token以节省计算量。
这篇文章的内容不多,主要就两个点,多尺度分割和不同保持率,还是写满了九页。
文章目的是在保持良好性能的前提下减小计算成本,而计算复杂度和patch大小成反比,patch size变大又会是性能下降,于是作者使用多尺度分割方法,将输入复制到几个分支,并缩放到不同的分辨率。以往的方法丢弃包含信息较少的token来减少计算消耗,但会影响性能,于是作者使用多种保留率来逐次丢弃不重要的信息。该方法还能自适应不同的硬件条件,达到最佳的计算效果。
代码中在每个分支的第3,6,9次相似度计算时丢弃,相当于丢弃叠加了三次
两个分支各自记录下loss求和再梯度反传,并且loss的计算使用保留率为1的部分 + 散度(保留率不为1的计入散度)
最后祝各位科研顺利,身体健康,万事胜意~