《Rethinking Feature Discrimination and
Polymerization for Large-scale Recognition》
摘要
文章关注大规模的测试类别和开集测试的场景下如何使得提取的图像特征高内聚、低耦合。作者提出了一种coco loss的损失函数,实验结果证明了该损失函数的有效性。
简介
实际应用中使用深度学习进行分类有两个挑战:
- 类别数非常大,因此需要特征具有判别力,不同的特征之间有较大的margin;
- 测试时是开集测试,即测试样本的类别不包含在训练样本中,需要学习到的特征高度内聚。
softmax损失函数的缺点就是只关注了类间的区分能力,没有关注类内部的聚合力。
对比损失、triplet损失和center loss改善了上述问题,但是在训练集的batch内部构建三元组会造成训练过程的不稳定;center loss中心位置的更新没有在训练过程中跟随参数变化,并且需要和softmax联合使用,增加了要学习的参数数量。
作者提出的coco loss,在网络训练过程中持续更新中心位置,并且单独使用,没有增加额外的训练参数,可以端到端训练,稳定的收敛。
几种损失函数学习到的特征分布情况对比图
coco loss
f(i)∈RD , f(x) 是特征向量, D 维
两个特征向量之间的余弦相似度为
- 最直观的损失函数是最大化下式:
β 表示mini-batch, δ(⋅,⋅) 指示函数, ϵ 数据稳定项。
上面的式子问题是计算复杂度太高,两个for循环比对, O(M2) 。 - 替代方案,训练过程中引导特征尽可能接近对应的正确的类中心
最大化的损失函数是
分子保证样本特征离正确的类中心距离尽可能接近,分母保证样本特征离错误类中心的距离尽可能远。
实现上,首先对特征向量和中心点进行归一化操作,然后对特征进行尺度缩放,再计算coco loss,如下图所示:
将 m=li 包含在分母中易于计算且对计算结果的影响很小。
α 的取值有一个公式可以进行推导:
α>12logK−1exp(ϵ)−1 ,其中, K 是总的类别数,ϵ 是损失值 L 的上限。
实验结果
首先实验结果表明了,太小的