【导读】本文探索了用于提升ViT性能的各种训练技巧。通过一系列实验对比、改进与组合,本文所提方案取得了SOTA方案,超越了EfficientNet、T2TViT、DeiT、Swin Transformer、CaiT等方案。
标题&作者团队
paper: https://arxiv.org/abs/2104.10858
Code: https://github.com/zihangJiang/TokenLabeling
本文是新加坡国立大学&字节跳动的研究员在Transformer方面的最新研究成果。本文目标不在于提出一种新颖的
Transofrmer
架构,而是探索了用于提升ViT性能的各种训练技巧。通过一系列实验对比、改进与组合,本文所提方案取得了SOTA方案,超越了EfficientNet、T2TViT、DeiT、Swin Transformer、CaiT等方案。以26M参数量的ViT为例,所提方案在ImageNet上可以取得84.4%的top1精度;当参数量扩展到56M/150M时,模型性能可以进一步提升到85.4%/86.2%,且无需额外数据。
本文为ImageNet分类任务中的Vision Transformer
(ViT)提供了一个强基线方案。尽管ViT在ImageNet任务中取得了非常好的结果,但它们的性能距离强效CNN仍存在差距。
本文目标不在于提出一种新颖的Transofrmer
架构,而是探索了用于提升ViT性能的各种训练技巧。本文结果表明:通过简单调节ViT的架构并引入token labeling
,本文所提方案既可以取得比CNN与其他Transformer更佳的性能(同等参数量与计算量)。
以26M参数量的ViT为例,所提方案在ImageNet上可以取得84.4%的top1精度;当参数量扩展到56M/150M时,模型性能可以进一步提升到85.4%/86.2%,且无需额外数据。
上表对比了本文所提方案与CaiT在训练、模型方便的配置信息,可以看到:采用更少的训练技巧、参数量与计算量,所提LV-ViT即可取得比当前SOTA模型CaiT更佳的性能。
上图对比了所提方案与其他Transformer在参数量与性能方面的对比,可以看到:本文所提LV-ViT在56M参数量下可以取得比其他Transformer更佳的性能。
我们首先对ViT的结构进行简要介绍,然后描述如何通过训练技巧提升ViT的性能。
典型的ViT包含以下五个基本成分:
token
。所得特征向量将与class token
拼接并送入到骨干网络用进行特征编码。transformer
的排列不变特性,一般会添加一个额外的可学习位置编码到输入token
以便于将每个块与位置信息相结合。这是非常有必要的,且有助于模型更好的学习视觉结构。从经验来看,固定的sinusoidal
位置编码或者可学习编码均可,因为它们具有相似的分类性能。所有头的输出再沿着通道维度拼接并采用线性投影得到最后的输出,定义如下:
接下来,我们将介绍一系列有助于提升ViT性能的技术(可参见上图),包含以下各个方面:
Transformer
模块的计算如下:对此,我们解释为:通过逐渐添加源自其他token的信息调整输入。原始的ViT采用固定比例1添加信息调整,我们提出采用更小比例重缩放残差特征值:
由于更少的信息经过残差分支,这种方式可以增强残差链接;调整残差分支的缩放因子可以改善模型的泛化性能。
re-labeling
策略,为每个图像重设一个K=1000维得分图以得到更精确的标签。不同于知识蒸馏需要老师模型在线生成监督标签,re-labeling
是一种廉价操作且可视作预处理操作。在训练过程中,我们仅需对每个裁剪图像计算K维稠密得分。因此我们能够以近乎可忽略的额外计算改善标签质量。re-labeling
提供的稠密得分图,我们可以采用它为每个图像块与其对应token提供一个独特标签,我们称之为token labeling
。具体来说,我们添加了一个token labeling
损失函数,它利用了每个训练图像的稠密得分图并计算每个token与对应标签之间的交叉熵损失作为辅助损失。假设ViT的输出为,K维得分图为,整个图像的标签为。辅助损失定义如下:注:H表示交叉熵损失。因此,总体损失定义如下:
token labeling
策略同样是在块层面进行处理。如果我们直接将CutMix用于原始图像,某些图像块可能包含来自两个图像的内容,进而导致混合区域问题,见下图。当实施token labeling
时,我们很难为每个输出token赋予干净而正确的标签。考虑到这个问题,我们重新思考了CutMix并提出了MixToken,它可以视作改进版CutMix,见上图右。具体来说,假设两个图像表示为,他们对应的标签为,我们首先将两个图像送入块嵌入模块将每个图像序列化得到;然后,我们通过MixToken按照如下方式生成新的序列token:
注:M的生成方式与CutMix相同。对于每个标签,我们采用类似方式混合:
cls的标签重写如下:
直接看结果咯,先看一下不同训练技巧的影响,再看所提方法与其他方案的性能对比。
我们采用DeiT-Small作为基线模型,上表给出了所提方法性能一步步演进,随着更多训练技巧的添加,模型性能逐渐提升。
Explicit inductive bias 上表给出了关于块嵌入的消融实验分析,可以看到:
Enhance residual connection 上图给出了残差缩放因子的性能对比,可以看到:引入残差缩放因子可以带来性能提升。与此同时,我们发现:采用更小的缩放因子可以导致更好地性能、更快的收敛速度。
Re-labeling 我们采用预训练NFNet-F6对ImageNet数据进行重标记,每个图像可以得到1000维得分图。从Table3可以看到:re-labeling
可以带来0.4%的性能提升。
MixToken 上表给出了Mix-Token与Token labeling所带来的性能提升,可以看到:
上表对比了不同数据增广的性能对比,可以看到:CutOut+RandAug的组合带来的最高性能。
上表对比了不同模型配置下的性能对比,可以看到:提升模型深度与嵌入维度可以进一步提升模型性能。
sota
上表给出了本文所提方案与CNN、其他Transformer在计算量、性能方面的对比,可以看到:
本文亮点总结
1. 本文目标不在于提出一种新颖的transformer架构,而是探索了用于提升ViT性能的各种训练技巧。本文结果表明:通过简单调节ViT的架构并引入transformer,本文所提方案既可以取得比CNN与其他Transformer更佳的性能(同等参数量与计算量)。
2. 本文通过逐渐提升基线ViT的深度对其如何影响ViT的性能进行了研究。由于添加更多的模块不可避免会引入更多的模型参数,我们减少前馈层的隐含层维度(对模型性能几乎没有负面影响)。