查看原文
其他

人脸识别损失函数综述(附开源地址)

王希玺 我爱计算机视觉 2019-07-13

点击我爱计算机视觉标星,更快获取CVML新技术



本文原载于知乎,对人脸识别常用损失函数进行了非常好的总结和比较,“我爱计算机视觉”获作者王希玺授权转载。感谢大佬的分享~

原文地址:

https://zhuanlan.zhihu.com/p/51324547


Softmax


softmax是最常见的人脸识别函数,其原理是去掉最后的分类层,作为解特征网络导出特征向量用于人脸识别。softmax训练的时候收敛得很快,但是精确度一般达到0.9左右就不会再上升了,一方面是作为分类网络,softmax不能像metric learning一样显式的优化类间和类内距离,所以性能不会特别好,另外,人脸识别的关键在于得到泛化能力强的feature,与分类能力并不是完全等价的。


公式中m是batch size的大小,n是类别数目。如果训练进行了停滞,可以采用挑选hard sample(即那个些预测错误但是预测值较高的样本)的办法进行帮助训练。


Triplet Loss


Triplet loss属于Metric Learning, 相比起softmax, 它可以方便地训练大规模数据集,不受显存的限制。缺点是过于关注局部,导致难以训练且收敛时间长。


这里提一下Metric Learning的概念,它是根据不同的任务来自主学习出针对某个特定任务的度量距离函数。通过计算两张图片之间的相似度,使得输入图片被归入到相似度大的图片类别中去。通常的目标是使同类样本之间的距离尽可能缩小,不同类样本之间的距离尽可能放大。


Center Loss


首先我们看一张图:

可以看到,在separable features中,类内距离有的时候甚至是比内间距离要大的,这也是上问题到softmax效果不好的原因之一,它具备分类能力但是不具备metric learning的特性,没法压缩同一类别。在这个基础上,center loss被提出来,用于压缩同一类别。center loss的核心是,为每一个类别提供一个类别中心,最小化每个样本与该中心的距离:


左边是softmax, 右边则是约束各个样本到样本中心的距离。


L-Softmax


原始的Softmax的目的是使得

在这个基础上,L-softmax( Large-margin softmax) 希望可以通过增加一个正整数变量m,使得产生的决策边界可以更加严格地约束上述不等式,让类内的间距更加的紧凑,类间的间距更加具有区分性


L-Softmax的公式:



cos函数在(0,π)内是单调递减的,乘上正整数m后内积会减小,这样可以加大类间的差别,如图所示:



由于L-softmax有一个更加难的实现目标,所以说它更能避免过拟合。同时L-softmax不仅在分类问题上有优势,同样在识别问题上也有优势,因为它使得类内的距离更加的紧凑。 通过控制m的大小,调整类间距离。m越大,类间距离就越大,类内更加紧凑。


不同m带来的分类效果

SphereFace( A-softmax)



SphereFace是在softmax的基础上将权重归一化,即使得


 

它与前面提到的L-sofrmax最大的区别在于SphereFace将W权重归一化了。L-Softmax会同时从角度和权重长度上区分不同类别,而SphereFace只从角度上去区分不同类别,在数据集大小固定的条件下,L-softmax的精确度可能不如sphereFace。



CosFace( LMSL: Large Margin Cosine Loss)



CosFace的思想和SphereFace( A-softmax)的思想接近,其中主要做了以下三点的改进:

  • loss的形式做了稍微的改变,将超参数m由乘法运算变成了减法运算

  • 不仅对权重进行了正则化,还对特征进行了正则化

  • 再乘上一个scale参数,超球面过小时,分类映射到超球面上不好分类,这个scale参数可以扩大超球面体积,帮助分类

如下图所示,A-softmax存在一个问题,它的决策边界会随着

的变化而变化,

为0的时候,margin=0, 而CosFace(即LMCL)克服了这个缺点,两个类别之间有一个明确的决策边界(margin>0), 相对来说有更好的鲁棒性

各大损失函数的决策边界

决策边界


这里插播一下决策边界( Decision Boundaries)的概念,它表示的是在需要分类的数据中,如何区分不同类别的边界。

那么这么决策边界怎么计算呢,以二分类为例做一个简单说明。对于二分类而言,分类边界就是样本属于两个类别的概率相等。以softmax来距离,假设某个样属于类别1的概率是L1中log函数的输入,那么属于类别2的概率只是将log函数输入的分子换成类别2而已,分母是不变的,又因为以e为底的指数函数又是递增函数,所以直接让两个类别的指数相等就能得到softmax的分类边界函数:


ArcFace


Arcface的思想和CosFace类似,主要区别是将m放入了cos中,角度距离比余弦距离对角度的影响更加直接:


论文中提供了大量对照实验:



开源实现


想要研究softmax和triplet loss,可以参照google facenet的开源实现:

https://github.com/davidsandberg/facenet


想要研究各种ArcFace、CosineFace等,可以参照deepinsight洞见实验室的开源代码:

https://github.com/deepinsight/insightface


从在数据集表现上来说,ArcFace优于其他几种loss, 著名的megaface赛事,在很长一段时间都停留在91%左右,在洞见实验室使用ArcFace提交后,准确率哗哗就提到了98%,之后再刷的团队也大同小异,多使用ArcFace, CosineFace等损失函数。

这两个开源算法我也都跑过,粗略地比较了一下,可以见

https://zhuanlan.zhihu.com/p/52560499


参考文献

人脸识别Loss对比:L-Softmax, SphereFace, CosFace, ArcFace

ArcFace算法笔记 - AI之路 - CSDN博客

人脸识别论文再回顾之一:Center Loss


加入专业讨论群

加入52CV-人脸识别专业讨论群,扫码添加52CV君(your-word)拉你入群:

(请务必注明:人脸)

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:928997753。

(不会时时在线,如果没能及时通过验证还请见谅)


更多技术干货,详见:

新年快乐!"我爱计算机视觉"干货集锦与新年展望


长按关注我爱计算机视觉

【点赞与转发】就是一种鼓励

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存