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

论文阅读

代码阅读

5.1 Trick有哪些?

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

1.Re-weighting

现有的re-weighting方法:

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

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

    p5-1
  • Focal loss

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

    p5-2
  • 类别平衡损失

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

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

    • CB_Focal

      p5-3
    • CB_CE

      p5-4

对re-weighting方法进行实验:

p5-5

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

2.Re-sampling

现有的re-sampling方法:

  • 随机过采样

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

  • 随机降采样

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

  • 类别平衡采样

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

    p5-6

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

  • 平方根采样

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

  • 逐步平衡采样

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

    p5-7

对re-sampling方法进行实验:

p5-8

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

3.Mix-up training

现有的mixup方法:

  • Input mixup(输入混合)

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

    p5-9
  • 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。

    p5-10

在mixup 训练后进行fine-tuning:

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

mixup training方法进行实验:

p5-11

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

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

p5-12

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

4.Two-stage training

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

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

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

p5-13

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

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

Two-stage training方法进行实验:

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

p5-14

从表中可以得出:

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

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

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

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

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

p5-15

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

5.2 Trick包

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

p5-16

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

我把它们按照训练时的顺序进行一个总结(我自己的理解):

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

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