人脸识别人脸识别损失函数学习笔记

Posted 超级无敌陈大佬的跟班

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人脸识别人脸识别损失函数学习笔记相关的知识,希望对你有一定的参考价值。

目录

一、 sphereface:A-Softmax(CVPR2017)

1.1 传统的softmax Loss(第二章中有更详细的公式解释):

1.2 sphereface对softmax进行了两点改进:

1.3 sphereface弊端

二、CosFace(CVPR2018)

1 softmax loss的不同变种

1.1 原始的softmax loss:

1.2 归一化softmax Loss(NSL,Normalization Softmax Loss)

1.3 CosFace Loss(LNCL,Large Margin Cosine Loss)

2. 不同loss的分类边界分析

2.1 Softmax Loss:

2.2 NSL:Normalized Softmax Loss:

2.3 A-Softmax(SphereFace):

2.4 CosFace. Large Margin Cosine Loss(LMCL):

3 CosFace中一些细节问题

3.1 ​为什么要进行feature Normalization?

3.2 特征X L2归一化到1后,为什么使用了缩放系数S?

3.3 CosFace源码中操作流程

3.4 人脸识别模型训练和测试的过程图



一、SphereFace:A-Softmax(CVPR2017)

1.1 传统的softmax Loss(第二章中有更详细的公式解释):

1.2 sphereface对softmax进行了两点改进:

1)改进1:归一化权重W,同时让bias置零;

  • 归一化W的好处:从优化内积变为了优化角度,使训练过程中类别的决策边界只由角度theat决定,不受W的干扰;

2 )改进2:加入margin进行约束;

  • 之前是cos(θ1)>cos(θ2),现在加一个margin m,变成cos(mθ1)>cos(θ2) ,这样就会约束θ1变得更小,也就是类内更加紧凑。
  • 作者对m默认取4。

1.3 sphereface弊端

cosine函数单调性问题。如果实际优化的时候仅仅使用cos,那么需要对theat的范围进行约束以保证cos单调递减,而为了摆脱这一约束实现cnn的直接优化,实际使用的是cos的近似函数:单调递减的一个函数。

PS:这里没有细理解,就是使用一个近似的函数替代cos(theta);

二、CosFace(CVPR2018)

large margin softmax 和 spherface的angular softmax弊端:

  • margin是以一种相乘cos(m*theta)的方式出现的,这样带来的一个问题就是反向传播计算比较复杂,loss优化不是很容易;再加上我们还要设置为了便于收敛的lambda,有非常多的超参数需要处理,对于训练不是很友好。

cosface的出现则是弥补了这个缺陷:

  • cosface是对cosine loss的结果设置margin,即cos(theta) - m,这样优化比较简单;

1 softmax loss的不同变种

1.1 原始的softmax loss:

其中: 是当前的类别权重和特征 x的乘积,theta为X和W的夹角,bias和以前一样置0。然后使用余弦公式的计算可以将wx+b转换一下:

1.2 归一化softmax Loss(NSL,Normalization Softmax Loss)

  • 1)权重W进行L2归一化:分别对W和X做L2 Normalization,使其W的Norm为1;
  • 2)特征X先归一化再缩放到固定值S:考虑到直接将X归一化为1,使得softmax的值太小会导致训练loss太大。因此,对X会再进行一次缩放,固定X为大小S

修改后的loss如下,也称为NSL,Normalized version of Softmax Loss:

 

1.3 CosFace Loss(LNCL,Large Margin Cosine Loss)

  • 引入一个余弦间隔m

上述模型只是转换了学习空间而已,由最开始的优化内积变成了现在的优化角度。但是还未达到作者想要的有鉴别力(区分度)的特征。

因此,引入一个余弦间隔(cosine margin)来对度量进行约束,让当前样本所属的类别在减去一个m之后仍然属于这个类别,即:

注意,margin的相减操作是针对cosine的,所以scale的缩放仍然放在最外层。

2. 不同loss的分类边界分析

2.1 Softmax Loss:

softmax loss的边界函数同时依赖①权重向量的量级和权重②样本特征向量之间的角度所以会导致决策区域有重复。(大概意思是loss受权重W和角度thta两个因素影响)

2.2 NSL:Normalized Softmax Loss:

归一化后的softmax,决策边界只与角度有关,所以在上传中分类决策面就是一条线。

2.3 A-Softmax(SphereFace):

 

A-Softmax是对角度theta进行约束,故呈现在cos(theta)的坐标中,是一个扇形页面分界区。但是A-Softmax的margin是不连续的,随着theta的降低,margin也在跟着减小,当theta等于0的时候margin甚至消失,另外,A-Softmax还需要解决非单调性问题。

2.4 CosFace. Large Margin Cosine Loss(LMCL):

 

 LMCL是对cosine值加margin进行约束,所以他们的分界区是类似于SVM的margin area一样的一块矩形,且margin的宽度为 

3. CosFace中一些细节问题

3.1 为什么要进行feature Normalization?

下面是摘自原文的解释,作者的观点:

1)||X||(特征X的2范数)削弱了对余弦值的优化效果。

  • 没有进行特征归一化的原始softmax loss会隐式学习特征向量X的L2范数(||X||)和角度的余弦值。其中,L2-范数会自适应地去学习如何让整体的损失最小,这相对于削弱了损失Loss对余弦值约束。
  • 如果限制所有的feature都是同样大小的norm,那么整个优化过程就只依赖于余弦值来获得有区分力的特征。
  • (我的理解是,如果loss值只约束余弦值cosine,那么当损失值较大时,会去约束余弦值使得loss变小。但是当训练过程中||X||和余弦值cosine同时影响loss时,当loss较大,此时不会只优化余弦值,还会去优化||X||,这就相对于削弱了对余弦值的优化效果。相当于||X||分散了loss的精力T T)

2)还有一种说法:在测试过程中,一个样本的特征X是不变的,分类的决策边界只跟余弦值cosine相关,因此,训练过程中可以将特征X直接归一化。

3.2 特征X L2归一化到1后,为什么使用了缩放系数S

  • 1)直接将X归一化为1,即||X|| = 1,会使softmax的值太小(因为||W||=1,||X||=1,就只剩一个cos(thita)了,而cos的区间最大值只有1)。这导致训练loss太大(回想-log(cos(thita)的函数曲线图)难以优化。因此,对采用缩放系数S将||X||固定为S。(PS:看一个pytorch源码中其实就在对X归一化后再乘以了一个系数缩放S,S取的64)。
  • 2)缩放系数S的取值:作者论文中强调,缩放参数 s 应设置为一个适当大的值,使得产生性能更好的特征,同时降低训练损失。因为S太小会使得loss过大,导致模型收敛不足甚至不收敛。(看一个pytorch代码中S=64,应该就是论文中作者的取值)

3.3 CosFace源码中操作流程

  • step1. 对权重W和特征X进行L2归一化;
  • step2. 使用全连接层实现W*X操作得到cosine的值;
  • step3. cosine值减去margin;
  • step4. 乘以缩放系数S进行缩放操作;
  • step5. 进行softmax分类。

3.4 人脸识别模型训练和测试的过程图

 三、ArcFace (CVPR2018)

主要思想

ArcFace loss:Additive Angular Margin Loss(附加角度间隔损失函数)。

  • 对特征向量和权重归一化,对θ加上角度间隔m,角度间隔比余弦间隔在对角度的影响更加直接。几何上有恒定的线性角度margen。
  • ArcFace中是直接在角度空间θ中最大化分类界限,而CosFace是在余弦空间cos(θ)中最大化分类界限。

ArcFace loss特性:

  • 1)增加角度间隔:给Xi和Wj之间的角度θ加上角度间隔m(注意是加在了角θ上,而不是cosface中加载余弦值上),以加法的方式惩罚深度特征与其相应权重之间的角度,从而同时增强了类内紧度和类间差异。
  • 2)L2归一化:L2归一化来修正单个权重||W||=1,还通过L2归一化来固定嵌入特征||x||,并将其重新缩放成s。特征和权重的归一化步骤使预测仅取决于特征和权重之间的角度。因此,所学的嵌入特征分布在半径为s的超球体上。

惩罚角度θ 意思:即训练过程中加上m使角度θ值变得更小。

  • 解释Margin是如何使类内聚合、类间分离的:比如训练时降到某一固定损失值时,有Margin和无Margin的e指数项是相等的,但是因为有m的存在,会使得带Margin惩罚的θ值相对的比原来更小了。因此,带Margin的Loss函数在训练时就会把 i 类别的输入特征和权重间的夹角θ变得更小,Margin把θ挤得更加类内聚合了,相对的θ_yi和其他θ类间也就更分离了。

ArcFace Loss函数:

 

 

以上是关于人脸识别人脸识别损失函数学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

《刷脸背后:人脸检测 人脸识别 人脸检索 》PDF 学习下载

识别人脸face_recognition实现

刷脸背后:人脸检测人脸识别人脸检索_张重生资料整理

高科技应用之人脸识别人证比对

人脸识别的人像处理流程是怎样的?

怎样使用OpenCV进行人脸识别