LV-ViT:使用标志标签更好地训练视觉Transformers.
本文提出了Token Labeling更好地训练视觉Transformers,Token Labeling是一个新的训练目标,借助它可以使得参数量只有26M/56M/150M的视觉Transformer模型在ImageNet上的精度达到$84.4\%/85.4\%/86.2\%$。
1. 训练视觉Transformer的技巧
作者首先总结和列举了之前有过的几种不同的Training Techniques,看看它们对视觉Transformer模型的效果到底如何。
(1)增加模型的深度
原始的视觉Transformer是12个block,简单地多加几个block对模型性能没什么改变。
(2)引入卷积
在视觉Transformer中加入一些卷积操作,能够更容易地提取到low-level的信息,这是因为卷积操作具有inductive bias的能力,使得模型在浅层能很好地学习到low-level的信息,这些信息使得输入给 Transformer Block 的 patch embedding 更有意义。本文沿用了这一操作,在模型中加入了卷积。同时为了使得卷积的感受野更大,本文使得卷积操作的stride更小,这样一来就能够提供更多的overlapped的信息。
(3)调整残差连接
原始Transformer模型的前向过程是这样的:
\[X \leftarrow X +SA(LN(X)) \\ X \leftarrow X +FF(LN(X))\]这样的过程可以视为从输入信号$X$开始,不断地在它上面叠加一些其他的信息。在残差连接中引入scale factor,在叠加之前要先乘上一个系数,而且不同的dimension要乘的系数也不同。
(4)Re-labeling技术
在训练阶段总是会采用一些数据增强的方法,比较常用的是random crop方法,但是在random crop以后,标签并不总是准确的,因为ImageNet中的许多图像包括多个object,并且具有Ground Truth标签的对象可能不会保留在random crop之后的图像中。这个问题,当random crop的图像越小时就会越严重,因为crop出来的图像越小,可能越不会包含Ground Truth的label信息。在使用单标签标注时,图像随机剪裁可能包含与真值完全不同的对象,为训练带来噪声甚至不准确的监督信号。
Re-labeling技术的具体做法是使用多标签对 ImageNet 训练集进行重新标注。作者首先在一个巨大的数据集上训练了一个强大的图像分类器模型,这个数据集是JFT-300M或者InstagramNet-1B,并把这个模型在ImageNet上进行fine-tune。
把一张图片输入这个强分类模型,取它Global Average Pooling之前的输出特征$L \in R^{H\times W\times C}$,把它叫做Label map。原来的分类器得到$1 \times 1\times C$维的输出结果,而现在只需要$H\times W\times C$维的Label map。
假设random crop的区域是$[c_x,c_y,c_w,g_h]$,在训练时首先把这个区域的图片给resize成224×224的大小作为输入图片,再把特征Label map位于$[c_x,c_y,c_w,g_h]$的区域进行ROI Align操作,得到$H \times W\times C$维的输出结果。最后对这个结果进行softmax操作得到最终的$1 \times 1\times C$维的输出结果,作为这个区域图像的label进行训练。
Re-labeling的伪代码如下:
Algorithm A1 ReLabel Pseudo-code
for each training iteration do
# Load image data and label maps (assume the minibatch size is 1 for simplicity)
input, label map = get minibatch(dataset)
# Random crop augmentation
[cx,cy,cw,ch] = get crop region(size(input))
input = random crop(input, [cx,cy,cw,ch])
input = resize(input, [224; 224])
# LabelPooling process
target = RoIAlign(label map, coords=[cx,cy,cw,ch], output size=(1; 1))
target = softmax(target)
# Update model
output = model forward(input)
loss = cross entropy loss(output, target)
model update(loss)
end for
对于Random crop的每一个crop的区域,在参与训练时,其使用的标签都不再是原图的标签了,而是由这个强分类器得到的软标签。而且,使用强分类器生成软标签,解决了标注成本问题;在最终池化层之前使用像素级多标签预测,以充分利用额外的位置特定监督信号。
2. Token-labeling
本文作者把Re-labeling技术用在了视觉Transformer中,设计了Token-labeling方法。视觉Transformer模型的输出,即$[X^{cls},X^1,…,X^N]$,现在只利用了$X^{cls}$,而剩下的$N$个token其实是可以结合上面的Re-labeling技术加以利用。
一张图片分了patch以后,每个patch都会转化成token,这些token其实也是有软标签的。只需要给一个预训练的强分类模型输入一下这个图片,就能够使用Re-labeling技术得到所有这些token的软标签$[y^1,…,y^N]$,这里的每一个$y$都是一个$C$维向量,它也叫作token label。
定义一个 token labeling loss:
\[L_{aux} = \frac{1}{N} \sum_{i=1}^N H(X^i,y^i)\]则总损失为:
\[L_{total} = H(X^{cls},y^{cls}) + \beta L_{aux}\]同时在训练模型时使用了CutMix技术,它能提高模型的性能和鲁棒性。但如果直接在原始图像上应用CutMix,产生的一些补丁可能包含来自两个图像的内容,导致一个小patch内的混合区域,如左图所示。这样的话,很难为每个输出token分配一个干净、正确的软标签。考虑到这种情况,作者重新考虑了CutMix的增强方法,并给出了MixToken,它可以被看作是在Patch embedding后对令牌进行操作的CutMix的修改版本,如图右侧所示。
具体来说,对于两个图像$I_1,I_2$及其对应的token label $Y_1=[y_1^1,…,y_1^N]$以及$Y_2=[y_2^1,…,y_2^N]$,首先把这2个图像变为tokens:$T_1=[t_1^1,…,t_1^N],T_2=[t_2^1,…,t_2^N]$。然后通过一个mask $M$得到一个新的tokens:
\[\hat{T} = T_1 \odot M + T_2 \odot (1-M)\]同时也把这2张图片对应的软标签使用这个mask 进行结合:
\[\hat{Y} = Y_1 \odot M + Y_2 \odot (1-M)\]class token的标签可以写为:
\[\hat{y}^{cls} = \overline{M} y_1^{cls}+(1-\overline{M}) y_2^{cls}\]