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

栏目: 软件资讯 · 发布时间: 7年前

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

我爱计算机视觉 标星,更快获取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。

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

更多技术干货,详见:

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

长按关注 我爱计算机视觉

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTTP Essentials

HTTP Essentials

Stephen A. Thomas、Stephen Thomas / Wiley / 2001-03-08 / USD 34.99

The first complete reference guide to the essential Web protocol As applications and services converge and Web technologies not only assume HTTP but require developers to manipulate it, it is be......一起来看看 《HTTP Essentials》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具