《A Discriminative Feature Learning Approach for Deep Face Recognition》
可鉴别性的特征学习用于人脸识别,对每个类别维护一个Center vector,然后对损失函数增加一项到Center向量的L2损失。使得各个类别的类内分布变小实现intra-class的compactness,从而特征更具区分性,对于人脸识别来说能够增大识别的把握。
Key Words:Convolutional neural networks 、Face recognition、Discriminative feature learning、 Center loss
ECCV, 2016
作者:Yandong Wen,Kaipeng Zhang,Zhifeng Li…
https://github.com/jxgu1016/MNIST_center_loss_pytorch
提出问题
我们在做neural network 训练的时候一般使用的都是softmax loss,softmax loss能够有效的区分开inter-class,让我的分类任务得到解决,但是softmax loss的局限在于它只能get到inter-class的difference。
softmax loss的问题是不能够get到intra-class的compactness,所以论文中用MNIST为例把deep feature的dimension改成2方便可视化如上图。可以看出我们用softmax loss能够把inter-class的bound找到,但是每个类别仍然存在很大的类内误差,这是不利于我们用这个特征来识别的尤其是对人脸识别来说,验证是困难的,因此作者提出了center loss来解决这个问题。
softmax loss 和 center loss联合
通过添加center loss 让简单的softmax 能够训练出更有类内紧密性的特征。
下图是使用softmax loss结合center loss后产生的deep feature的distribution,我们能够发现deep feature在学习到了如果区分类间差异的同时也缩小了类内差异,通过不同的lamada值能够产生不同的效果,看这个图能给出的启示是可以用这个特征利用kmeans做一个完美的聚类分析,得到一个高效的类别,对于细分任务是有帮助的。
计算Center Vector
如果想计算一个类别所有样本的中心,那么一定要通过计算该类别所有的样本才行,但是我们在真实的模型训练当中每次都用全量数据去训练是不现实的,都是用mini-batch的方式来训练的,所以我们在每轮迭代计算center loss的同时也要更新center vector。
给每一个类别都训练出来一个center vector其shape和deep feature要保证一样,然后在训练过程中对比样本的deep feature和center vector,计算欧氏距离得到的loss和softmax loss一起去更新参数。
MNIST做实验
Only softmax loss
Add center loss
参数设置
α \alpha α一般取0.5,是CenterVector更新的参数
λ \lambda λ一般取0.1-0.0001之间,需要实验调参,用于loss中占比的参数