粗读Targeted Supervised Contrastive Learning for Long-Tailed Recognition

相比于直接对图像进行分类,本文更关注特征提取部分,通过令提取的不同类特征在超球面上尽可能远离,让属于同一类的特征尽可能靠近,来提高模型面对样本不平衡时的分类性能。

粗读Targeted Supervised Contrastive Learning for Long-Tailed Recognition_第1张图片

这是本文的方法和效果示意图。第一行的KCL是之前的方法,TSC为本文方法。之前的方法在面对极端的样本不平衡时,训练图像多的类会挤占训练图像少的类,让小样本的类之间的特征混在一起,导致分类准确率下降,而本文方法面对极端不平衡时依然可以保持不同类的中心尽可能远离。

粗读Targeted Supervised Contrastive Learning for Long-Tailed Recognition_第2张图片

上图是流程示意图,模型主要分为两步,第一步,根据类的数量,在超球体上确定多个锚点,锚点数量等于类别数,每个锚点要尽可能远离其他锚点。

作者原本想让每个锚点的分布达到最优,但发现这是个NP问题,于是退而求其次,通过最小化下面这个公式达到近似最优的结果

可以看到,公式基本就是计算每个类和其他类的相似度,log和再求和。之所以两个向量点积就能求相似度,个人理解是如果每一位数字相同时,就是多个数的平方和,即点积结果是a^2+b^2+...

如果数字不同,就可以看作是原来的数字加了个数减了个数相乘,即可以看作是(a+x)(a-x)+(b+y)(b-y),结果当然会变小。虽然在极端情况下,a^2小于(b+x)(b-x)是有可能的,如a=3而b=100,x=1。但本文锚点位于超球体上,且是多个点之间互相计算,所以不用担心最小化这个函数会导致某对点从相隔甚远变得十分靠近。

第二步,得到几个中心后,就要将不同的类分配给不同的中心,如果是简单的随机分配,语义特征相似的类可能会分得特别开,例如猫和狗语义特征相似,但分得的锚点却可能位于超球体两端,这样让模型更加迷茫,不知道如何提取特征。

于是作者在每一轮训练结束后,即每张训练集图片喂给模型完毕后,计算每个类的中心,通过匈牙利算法,将类与锚点进行配对。

分配完毕后,计算下面的损失函数,然后指导模型更新参数。

粗读Targeted Supervised Contrastive Learning for Long-Tailed Recognition_第3张图片

其中,N为一个batch的大小,V为该batch全部图像,vi为图像xi提取出来的特征,是排除了vi后的其他所有图像,是除了vi之外其余的与vi为同一类的图像集合,U是所有锚点t的集合,而ci则是vi分得的锚点。

按照前面的理论,两个向量点积越大,就可近乎地看作相似度越高。于是前半段是让同一类的特征尽可能靠近,而后一段则是让每个点尽可能靠近自己分得的锚点,远离其他锚点和其他类的特征。

你可能感兴趣的:(深度学习,人工智能,深度学习,机器学习)