token labeling
LV-VIT论文技术点分析
本文转载于参考资源
论文:https://arxiv.org/pdf/2104.10858.pdf
项目:https://github.com/zihangJiang/TokenLabeling
1、总结几种训练技术
1.1 增加模型的深度
原始的视觉Transformer是12个block,简单地多加几个block对模型性能没什么改变,这一点已经在DeepViT和CaiT的论文中得到了证实。
1.2 引入卷积提升归纳偏置的能力
在视觉Transformer中加入一些卷积操作,能够更容易地提取到low-level的信息 (即edges 和 lines),这是因为卷积操作具有inductive bias的能力,使得模型在浅层能很好地学习到low-level的信息,这些信息使得输入给 Transformer Block 的patch embedding 更有意义。本文沿用了这一操作,在模型中加入了卷积。同时为了使得卷积的感受野更大,本文使得卷积操作的stride更小,这样一来就能够提供更多的overlapped的信息。在模型中引入卷积这一点已经在CvT,CeiT的论文中得到了证实。
1.3 在残差连接中加入缩放因子
残差结构中,在将叠加信息添加到shorcut分支的时候,先与放缩因子矩阵相乘,使不同的维度乘以不同的放缩尺度。这种实现,主要归功于放缩因子是主对角矩阵。本文也采用了这个做法,这一点的作用已经在CaiT,ReZero/Skipinit and Fixup等多篇论文中得到了证实。
1.4 Re-Labeling技术
在训练阶段总是会采用一些数据增强的方法,比较常用的是random crop方法,但是在random crop以后,标签并不总是准确的,因为ImageNet中的许多图像包括多个object,并且具有Ground Truth标签的对象可能不会保留在random crop之后的图像中。这个问题,当random crop的图像越小时就会越严重,因为crop出来的图像越小,可能越不会包含Ground Truth的label信息,如下图3所示。在使用单标签标注时,图像随机剪裁可能包含与真值完全不同的对象,为训练带来噪声甚至不准确的监督信号。
为了解决这个问题,Token-Labeling作者使用了https://arxiv.org/pdf/2101.05022.pdf提出了的Re-Labbeling技术。
Re-labeling技术的具体做法是使用多标签对 ImageNet 训练集进行重新标注,具体是怎么做的呢?
Re-labeling论文的作者首先在一个巨大的数据集上训练了一个强大的图像分类器模型,这个数据集是JFT-300M或者InstagramNet-1B,并把这个模型在ImageNet上进行fine-tune。 作者认为这个图像分类器模型非常接近人类的预测了。那么因为这个数据集是私有的,并且训练这个模型非常耗费时间和算力 (上百个GPU days),所以为了后人研究的方便,作者开源了这个模型。
将一张图片输入这个强分类模型,取它的GlobalAveragePooling之前的输出特征,假设这个特征是\(L\in R^{H \times W \times d}\),称之为Label map,如下图所示。
如上图所示,原始模型是简单的分类模型,我们最后输出\(1 \times 1 \times C\)的预测,但是随机裁剪问题就在这里,我们对裁剪后的图片进行了无差别处理,为了获取对应区域的软标签,我们对模型修改为上图中Label map所在是模型。 假设我们随机裁剪的区域为\(\left [ c_{x},c_{y},c_{h},c_{w} \right ]\),再对Label map进行ROIAlign操作,得到\(1 \times 1 \times C\)的输入,最后将其进行softmax操作,得到最终的\(1 \times 1 \times C\)输出结果,作为这个区域图像的label进行训练。
也就是说,对于Random crop的每一个crop的区域,在参与训练时,其使用的标签都不再是原图的标签了,而是由这个强分类器得到的软标签。而且,使用强分类器生成软标签,解决了标注成本问题;在最终池化层之前使用像素级多标签预测,以充分利用额外的位置特定监督信号。
上图所示就是再提一遍具体的做法:比如输入一张左上角的图片,这个图片里面有房子,有牛,有天空等等。我们在做Random crop的时候得到了4个crop的图片,就是第2行所列的4个图,并且都把它们resize到224×224的大小。这时,我们使用这4张resize到224×224的图进行训练,我们给每张图片分配一个\(K\)维的score map,这里 \(K\)是数据集的类别数,比如对于ImageNet-1k就是1000。这个score map就是之前提到的在JFT-300这个超大的私有数据集上训练的强分类器得到的。对于Random crop的每一个crop的区域,在参与训练时,其使用的标签都不再是原图的标签了,而是由这个强分类器得到的软标签。
1.5 Token Labeling
Token Labeling可以使用如下的图示说明:
一张图片分patch之后,每个patch都会转化为token,假设最后一个transformer块的输出为\(\left [X^{cls}, X^{1},X^{2},\cdots ,X^{N} \right ]\),那么这些token经过强分类模型是可以得到每个token的软标签\(\left [ y^{1},y^{2},\cdots ,y^{N} \right ]\)。这里每一个\(y\)都是一个\(K\)维向量,也叫做token label。
因为每个token可以生成一个软标签,所有我们可以设置token labeling loss:
总的损失可以设置为:
超参数\(\beta\),设置为0.5。其中,\(H\left( .,. \right)\)是softmax交叉熵损失。
同时在训练模型时总是使用了CutMix技术,它能提高模型的性能和鲁棒性。但如果我们直接在原始图像上应用CutMix,产生的一些补丁可能包含来自两个图像的内容,导致一个小patch内的混合区域,如下图左图所示。这样的话,很难为每个输出token分配一个干净、正确的软标签(一个token内有两张图片的内容)。考虑到这种情况,作者重新考虑了CutMix的增强方法,并给出了MixToken,它可以被看作是在Patch embedding后对令牌进行操作的CutMix的修改版本,如下图右侧所示。
MixToken实际上就是让每个token只来自于同一个图片。
这里使用MixToken后,计算损失是类似的,我们可以计算两张图片的所有token label序列\(Y_{1}=\left [ y_{1}^{1},y_{1}^{2},\cdots ,y_{1}^{N} \right ]\)、,\(Y_{2}=\left [ y_{2}^{1},y_{2}^{2},\cdots ,y_{2}^{N} \right ]\)同时拿到token序列\(T_{1}=\left [ t_{1}^{1},t_{1}^{2},\cdots ,t_{1}^{N} \right ]\)、,\(T_{2}=\left [ t_{2}^{1},t_{2}^{2},\cdots ,t_{2}^{N} \right ]\),此时,我们只需要使用一个mask \(M\)即可得到新的token序列
与新的软标签序列
则,class token的标签可以写为:
其中\(\bar{M}\)是\(M\)元素值的平均值。
完!