为尾部样本构造特征云,就像用电子云填充空旷的原子——长尾数据上的特征学习方法

长尾数据下的特征学习格外困难。解决尾部类别样本少、类内多样性不足的根本做法是增加样本。那么如何增加?我们在CVPR2020“Deep Representation Learning on Long-tailed Data: A Learnable Embedding Augmentation Perspective”的工作中提出了为尾部类别构造云、用“特征云”来充实尾部类的方法。与之前两个方法(CVPR2019[1]和NeurIPS2018[2])的工作不同,它们都利用生成对抗网络(GAN),为尾部类别生成额外的“虚构”样本,取得了更好的提升。然而,真的需要在原始图像空间来增加吗?GAN的训练与调用都非常消耗资源,有没有更实用、高效的办法?我们的工作给出了更巧妙、高效的解决。

我们的方法直截了当地聚焦到了特征空间,在学到的特征空间中,为尾部ID增加一些虚拟的样本。这些新增的虚拟样本就像电子云缠绕原子核一样,缠绕在实际样本四周,因此我们形象地称之为“feature cloud”。任何cloud的本质是一个概率模型,如何建立这个“feature cloud”的概率模型呢,我们提出向头部ID学习。我们使尾部ID保持“矮要承认,挨打站稳”的低姿态,既然自身由于样本数量稀少,导致类内多样性不足,那么就以谦虚的态度向头部ID 学习,将头部ID 的类内多样性transfer到尾部ID。因此,我们的方法可以非常直观地描述为——用特征云填充尾部类别单薄的特征空间,就像电子云填充空荡荡的原子一样。

接下来我们按照:什么是长尾分布?长尾分布会带来什么问题?我们是怎么解决的?以及使用我们的方法会尾部数据的特征学习带来什么改善?四个方面对我们的工作进行介绍.

1. 什么是长尾分布?


数据分布呈现上图所示的分布被称之为长尾分布,顾名思义就是有很长的“尾巴”的分布。这样的分布是广泛存在于实际的训练数据中的,即有大量的ID,它们所拥有的样本数量十分稀少,有限的样本数量不足以代表这个类别真实的分布情况,这样的ID 被定义为tail class (图中黄色部分)。而少量的ID,其样本量充分,类内多样性丰富,这样的类别定义为head class(图中蓝色部分)。

2. 长尾分布会带来什么问题?

CVPR2019[1]认为:当数据呈现长尾分布时,会导致分类器出现bias(势利眼),分类器更偏向于识别样本量充足,类内多样性丰富的头部类,从而忽略了尾部类,这对尾部类而言是不公平的。我们认为由于尾部ID的数量庞大,而且每个尾部ID所拥有的样本数量稀少,这会导致特征空间十分混乱,大量类别的辨识度不高,使得特征空间发生扭曲,畸变。最终网络学习得到的是一个不健康的模型,先天畸形。

具体地,我们将特征空间想象成一片巨大的领土,我们在Duke数据集中挑选8个头部类,使用t-SNE对其进行可视化。在(a)中我们可以发现每个head class都具有很大的“领土面积”,并且每个head class之间具有较大的类间距离,可以被很好的区分开(头部ID之间互相不爽,彼此之间分的很开)。如图(b)所示,当我们将其中4个头部类的样本数量进行削减,重新训练模型,我们发现tail class在特征空间中所占据的“领土面积”变得十分狭窄,受到了head class的“欺凌”,并且tail class不具有良好的区分度,它们与head class之间距离变得很近(人微言轻,势单力薄,寻求大腿,赶紧抱好)。最终导致原始良好的特征空间发生了崩塌。为了进一步验证我们的发现(特征空间中的“阴暗”),我们对特征向量与其类中心的夹角进行建模。这个角度的分布是可以反映类内分布的。在re-ID的一组实验设置<H20,S4>下,其中H 表示head class别数,T 表示每个tail class的样本数量,我们对类内夹角做定量的分析:head class的类内夹角方差为0.463(±0.0014),tail class的类内夹角方差为0.288(±0.0089)。这进一步说明了:相比较于tail class,样本数量丰富的head class具有更高的类内多样性。由于tail class的类内多样性不足,有限的样本不足以表征其所属ID 的真实分布,网络在学习的过程中,也不会对该类别进行充分的学习。这最终就会导致特征空间发生了畸变,模型丧失了对大部分ID(尾部ID)有效的鉴别能力。

3. 我们是怎么解决长尾分布带来的问题的?

毕竟打铁还需自身硬,要想让分类器对尾部类具有很好的辨识能力,那么尾部类自身就要“硬”起来,即在训练过程中,我们希望样本数量有限的尾部ID 也能够提供丰富的类内多样性,那应该怎么办呢?我们提出让tail class去学习head class的类内多样性,换句话说,我们将从head class学习的类内多样性transfer到tail class以此来弥补在训练过程中tail class类内多样性的不足。为此,我们提出了“feature cloud”的概念:给定一个尾部类的特征向量,围绕为其生成许多虚拟的特征向量 (概率分布服从在head class中学习到的分布),我们将这一簇 称之为特征云。



在模型训练过程中,给tail class中每个instance的特征向量构建一个“特征云”,这样一个具体的特征向量就被一个“”代替,一个tail class 就被属于这个类的多个“”所表示,使得tail class可以在特征空间中占据更多的“领土面积”,通过将每一个属于tail class 的feature构建为一个“特征云”,进而将自身与其他类推的更远(这简直就是翻身农奴把歌唱啊)。

那么如何构建这个“特征云”呢?方法十分简单,我们使用特征向量与其对应的类中心之间的夹角分布来建模类内的特征分布。因此我们要学习head 与tail的类内夹角分布,我们假设夹角分布服从Gaussian distribution且每个类的夹角分布是彼此独立的。通过在训练过程中不断统计每个类别的类内夹角分布,可以得到:

  • head class 的类内夹角分布(如图红色线):
  • tail class的类内夹角分布(如图绿色线):
  • 特征云的分布(如图黄色线):
  • 我们将在head class学习到的角度方差transfer到tail 类中,为每个属于tail class的特征向量构建一个“feature cloud”,最终我们可以得到一个新的tail class类内夹角分布(如图蓝色线):

4. 使用我们的方法会对尾部类的特征学习带来什么样的改善?

通过对tail class构建“feature cloud”,我们训练得到新模型,我们使用t-SNE对其提取的特征进行可视化,如下图所示:

我们发现通过在训练过程中为尾部数据构建“feature cloud”,丰富其在训练过程中的类内多样性,最终模型训练结束后:

  • tail class 的类内变得更加紧凑;
  • 每个tail class可以与其它类明显地区分开,即使属于每个tail class的真实样本数量少,但是通过像head class学习,增强了自身的“实力”,可以做到和head class平起平坐);

在<H20,S4>这组实验设置下,我们再次统计了最终尾部类的类内角度方差为:0.201,比baseline(0.288)中要低,这说明通过使用我们的方法,进一步提升了tail class的类内紧凑性。

我们的方法在没有使用GAN 这种复杂的augmentation手段的前提下,获得了和这些方法一致的提高,简单而有效地缓解了长尾分布对特征学习造成的恶劣影响。具体方法及实验结果见论文:

https://arxiv.org/abs/2002.10826arxiv.org


  1. Yin X, Yu X, Sohn K, et al. Feature transfer learning for face recognition with under-represented data[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 5704-5713.
  2. Gao H, Shou Z, Zareian A, et al. Low-shot learning via covariance-preserving adversarial augmentation networks[C]//Advances in Neural Information Processing Systems. 2018: 975-985.
编辑于 03-10

文章被以下专栏收录