最近几年网络效果的提升除了改变网络结构外,还有一群人在研究损失层的改进,这篇博文要介绍的就是较为新颖的center loss。center loss来自ECCV2016的一篇论文:A Discriminative Feature Learning Approach for Deep Face Recognition。
论文链接:http://ydwen.github.io/papers/WenECCV16.pdf
代码链接:https://github.com/pangyupo/mxnet_center_loss
摘要
这篇博客是对论文A Discriminative Feature Learning Approach for Deep Face Recognition的总结。这篇论文中,作者提出了一种新的辅助损失函数(center loss),结合 softmax交叉熵损失函数,在不同数据及上提高了识别准确率。
相关工作
基于triplet loss的image pair方法
在这种方法中,训练样本两个样本对pair_1 : (positive_1, positive_2), pair_2 : (positive_1, negative_1),训练的目标是使得pair_1之间的距离小于pair_2之间的距离。这种方法的缺点在于样本对的数量会爆炸,假设有10个人,每个人10张图片,则共有81000(C110C210C12C190C101C102C21C901)个样本对。
基于孪生网络的方法
着这种方法中,训练时输入一对图片,标签为0或者1,0表示图片属于不同的人,1表示图片属于相同的人。训练的目标在于使得属于同一个人的图片距离尽可能小,属于不同人的图片距离尽可能大。与triplet loss相同,这种方法同样面临样本对爆炸的可能。假设有10个人,每个人10张图片,则共有900(C110C210+C210C110C101C102+C102C101)个样本对。
提出的方法
对于常见的图像分类问题,我们常常用softmax loss来求损失,。如果你的损失采用softmax loss,那么最后各个类别学出来的特征分布大概如下图Fig2。这个图是以MNISTt数据集做的实验,一共10个类别,用不同的颜色表示。从Fig2可以看出不管是训练数据集还是测试数据集,都能看出比较清晰的类别界限。
如果你是采用softmax loss加上本文提出的center loss的损失,那么最后各个类别的特征分布大概如下图Fig3。和Fig2相比,类间距离变大了,类内距离减少了(主要变化在于类内距离:intra-class),这就是直观的结果
接下来详细介绍center loss。如果你还是不熟悉传统的softmax loss,那么先来看看传统的softmax loss。首先区分softmax和softmax loss的区别,可以看博客:softmax,softmax-loss,BP的解释。下面公式1中log函数的输入就是softmax的结果(是概率),而Ls表示的是softmax loss的结果(是损失)。wx+b是全连接层的输出,因此log的输入就表示xi属于类别yi的概率。
那么center loss到底是什么呢?先看看center loss的公式LC。cyi表示第yi个类别的特征中心,xi表示全连接层之前的特征。后面会讲到实际使用的时候,m表示mini-batch的大小。因此这个公式就是希望一个batch中的每个样本的feature离feature 的中心的距离的平方和要越小越好,也就是类内距离要越小越好。这就是center loss。
关于LC的梯度和cyi的更新公式如下:
Cyi表示属于yi类的特征的的中心
这样做是存在问题的:
理想情况下,我们每次更新权值都要遍历全部的训练集去获得每个类的中心,这是低效甚至不实际的
为了解决这个问题,作者使用了minbatch中的每个类的中心来更新,(虽然这样可能有些类的中心在一次迭代中无法更新到):
具体的算法描述可以看下面的Algorithm1:
实验
作者在LFW和YTF上做了对比试验,结果如下表:
从表中可以看出,在这两个数据集上,论文提出的方法取得了最高的acc。
结论
虽然新提出的方法取得了良好的结果,但是也有一些不足之处,最麻烦的地方在于如何选择训练样本对。在论文中,作者也提到了,选取合适的样本对对于模型的性能至关重要,论文中采用的方法是每次选择比较难以分类的样本对重新训练,类似于hard-mining。同时,合适的训练样本还可以加快收敛速度。