论文阅读笔记:COCO_LOSS: Rethinking Feature Discrimination and Polymerization for Large-scale Recognition
本文主要包含如下内容:
论文地址
代码地址
参考博客
pytorch 实现COCO_Loss/Center_Loss/SoftmaxLoss
2017年NIPS的一篇文章,来自商汤科技。论文提出了一种新的LOSS–“COCO_LOSS”,其目的同样是拉近同样本的特征(类内方差小),拉远不同分类样本的特征(类间方差大)
主要思想
在分类、识别任务的时候常见的loss是softmax,但softmax只有类间的监督,缺乏类内信息。因此,作者提出了一种新的LOSS–“COCO_LOSS”,其主要特征:使用cosine余弦距离;使用center思想;构造新的loss,使得distance具有softmax特性。
算法原理
首先,论文提出了思想:即提高类间距离,减小类内距离。根据思想,论文先将输入特征与中心特征归一化:(其中, c 为目标的特征中心,是可以学习的,总共有 K 类。 f(i) 表示输入特征,i=1,…,N,即batch size为 N。 此外, α 是一个对性能有重要影响的可调节参数)
由于输入特征和中心特征已经做过归一化,因此其Cos距离可以简化为
最终,得到新的LOSS–“COCO_LOSS”:
其中,分子项表示输入特征 f(i) 与其对应的中心特征间的Cos距离;分母项表示输入特征到所有中心特征距离之和。通过取负对数,我们会发现该Loss的优化目标是分子越大越好(类内Cos相似度高),分母越小越好(类间Cos相似度低)。接下来,运用交叉熵就可以得到真正的loss函数。
参数 α 的选择:针对不同的任务调整 loss 的范围,可以得到更好的效果。
总结
是个很好的工作,结果也不错。用归一化的特征把cosine距离和center loss结合起来,除了只用中心点这个信息不够理想之外其他的都还好。
代码实现
没有caffe代码实现,有pytorch代码。代码与Noem_Face类似,可以参考其代码。