长尾分布论文(一):Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks

长尾分布论文(一):Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks

本文系统总结了用于长尾识别的各种trick,实验得出了不同trick组合会带来不同的效果,给出了详细的实验指南;并提出了一种新的基于CAM的DRS采样方法;通过本文的trick组合,在CIFAR-LT、iNaturalist、ImageNet-LT上得到了最好的结果。

一、Trick有哪些?

本文把长尾识别的trick分为了四个类别,包括:

1.Re-weighting

现有的re-weighting方法:

  • 代价敏感softmax交叉熵损失(CS_CE)

该损失在普通的交叉熵损失函数(CE)前乘上了最小类别中的训练图像数与每个类别的图像数的比值。相当于减少了多数类别的损失贡献,增加了少数类别的损失贡献。

  • Focal loss

focal loss可以通过设置参数 \alpha\gamma 的来控制少数类别、难分类类别对损失的贡献。

  • 类别平衡损失

类别平衡损失这篇文章提出了一个“样本体积”的概念,其核心思想在于:数据集中的样本并不是都能提供有效的信息,因此应该以类别中的有效类别数量对loss进行加权(而不是直接使用样本数量对loss进行加权)。

具体来说,就是在普通的损失(如CE、Focal等)前加上一个 \frac{1-\beta}{1-\beta^{n_c}} 项,其中 \beta 是一个超参数。

  • CB_Focal
  • CB_CE

对re-weighting方法进行实验:

可以从实验结果看出,增加图片类别之后一些re-weighting的方法反而不如普通CE好了。

2.Re-sampling

现有的re-sampling方法:

  • 随机过采样

通过随机重复采样少数类别样本来构建平衡的数据集;

  • 随机降采样

通过随机删除多数类别的样本来构建平衡的数据集;

  • 类别平衡采样

首先对类别进行统一采样,即每个类别被采样的概率都一样(下式中 q=0 的情况);然后从每个类别中有放回地随机采样实例,从而构建一个平衡的数据集;



该式中 p_j 表示从数据集中随机采样一个样本,其来自类别 j 的概率。
  • 平方根采样

上式中 q=1/2 的情况。

  • 逐步平衡采样

先对多个epochs进行实例平衡采样(上式q=1,也就是没有任何平衡操作的采样),然后在剩下的epochs中进行类别平衡采样。这种采样方法需要设置一个超参数来调整从哪一个epoch开始变换采样方式。也可以使用更软的阈值,即随着epoch的增加逐渐调整实例平衡采样(IB)和类别平衡采样(CB)所占的比例,如下面公式所示。



对re-sampling方法进行实验:



从实验结果可以看出,直接将重采样用于训练过程得到了轻微的改进.

3.Mix-up training

现有的mixup方法:

  • Input mixup(输入混合)

通过下式对训练样本进行数据增强。其中 (x_i,y_i)、(x_j,y_j) 是随机采样的两个样本, \lambda 是一个从beta分布中随机采样得到的0到1之间的数值。在训练时使用 (\hat{x},\hat{y}) 作为输入。​



  • Manifold mixup(流形混合)

首先将随机采样的两个样本 (x_i,y_i)、(x_j,y_j) 输入网络,在网络的第 k 层得到输出 (g_k(x_i),y_i)、(g_k(x_j),y_j) ,随后通过下式对两个训练样本的中间输出进行混合, \lambda ​是一个从beta分布中随机采样得到的0到1之间的数值。在训练时使用 (\hat{g_k},\hat{y}) 作为输入。​在本文中只是使用了一层网络进行manifold mixup。



在mixup 训练后进行fine-tuning:

前人已经证明在mixup训练的后面几个epochs去掉mixup,所得的结果会有明显的提升[1]。在本文中,为获得进一步提升,先使用mixup训练,然后用源数据集对mixup训练后的模型进行了微调。

mixup training方法进行实验:



从表中可以看出Input mixup和Manifold mixup的方法相对于baseline都有一定的提升;当设置 \alpha=1 且混合位置设置为pooling layer时Input mixup和Manifold mixup的结果相当。

对“先mixup 训练、再进行fine-tuning”的方法进行实验:



从表中可以看出Input mixup训练后进行微调可以得到进一步的提升,但Manifold mixup训练后进行微调效果反而变差了。

4.Two-stage training

在不平衡训练后进行平衡微调:

从长尾分布的数据集中模型可以学到高质量的特征表示,但是在尾部类中的识别准确率很低。现有的两阶段方法的两个阶段可以归纳为:首先在不平衡的数据集中对模型进行训练、然后使用重采样(DRS,实际上就是RS,论文中换了一种说法:延迟重采样,下同)或重加权(DRW)的方法对模型的分类器进行微调。

本文提出的基于CAM的DRS方法:



该方法首先对长尾分布数据集进行重采样得到平衡数据集,然后对于每张采样到的图片,使用在第一个训练阶段得到的参数化模型,根据其真实标签和相应地全连接层权重生成CAM(具体方法参考[2]),之后根据CAM地平均值对图片前景和背景进行分割,最后对前景进行变换(对每张图片随机选取“水平翻转、平移、旋转和缩放”中的一种进行变换),同时保持背景不变,生成新的图片作为训练集。

对于前面说的重采样方法,本文将CAM和现有的重采样方法(降采样、过采样、类别平衡采样、平方根采样、逐步平衡采样)进行了结合,命名为“CAM-based xx-sampling”。

Two-stage training方法进行实验:

第二阶段采用重采样方法的实验结果:



从表中可以得出:

1)两阶段(第二阶段重采样)的方法相比直接重采样的方法结果有所提升;

2)基于CAM的采样方法可以让结果更好;

3)基于CAM的类别平衡采样得到了最佳的结果;

4)加入了只进行图像变换(即水平翻转、平移、旋转或缩放)的方法作为对比,证明了CAM的有效性。(我觉得这个对比实验加的很不错,给读者一种实验很严谨、很充分的感觉

第二阶段采用重加权方法的实验结果:



从表中可以看出,两阶段(第二阶段重加权)的方法相比直接重加权的方法结果有所提升,且CS_CE方法的效果最好。

二、Trick包

本文通过实验探索了怎么样组合Trick可以得到最佳的准确率,得到了如下的结果:



最终得出了最佳的Trick组合:输入混合(Input mixup)+用本文提出的基于CAM重采样方法进行两阶段训练+在mixup training之后进行微调

我把它们按照训练时的顺序进行一个总结(我自己的理解,如果理解的不对还请在评论里指出):

第一阶段:用输入混合(Input mixup)方法对数据集进行增强,然后在开始的几个epochs用增强的数据集训练模型,接下来的几个epochs用未增强的数据集对模型进行fine-tuning;

第二阶段:用本文提出的基于CAM重采样方法对数据集进行平衡采样,之后用平衡数据集对模型的分类器进行重新训练。


更多内容:

长尾分布论文(一):Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks

长尾分布论文(二):Adaptive Class Suppression Loss for Long-Tail Object Detection

长尾分布论文(三):Equalization Loss v2: A New Gradient Balance Approach for Long-tailed Object Detection

长尾分布论文(四):Improving Calibration for Long-Tailed Recognition

长尾分布论文(五):Distribution Alignment: A Unified Framework for Long-tail Visual Recognition


[1]He Z, Xie L, Chen X, et al. Data augmentation revisited: Rethinking the distribution gap between clean and augmented data[J]. arXiv preprint arXiv:1909.09148, 2019.

[2]Zhou B, Khosla A, Lapedriza A, et al. Learning deep features for discriminative localization[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 2921-2929.

编辑于 2021-10-18 18:57