人脸识别人脸识别损失函数学习笔记
Posted 超级无敌陈大佬的跟班
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人脸识别人脸识别损失函数学习笔记相关的知识,希望对你有一定的参考价值。
目录
一、 sphereface:A-Softmax(CVPR2017)
1.1 传统的softmax Loss(第二章中有更详细的公式解释):
1.2 sphereface对softmax进行了两点改进:
1.2 归一化softmax Loss(NSL,Normalization Softmax Loss)
1.3 CosFace Loss(LNCL,Large Margin Cosine Loss)
2.2 NSL:Normalized Softmax Loss:
2.4 CosFace. Large Margin Cosine Loss(LMCL):
3.1 为什么要进行feature Normalization?
一、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函数:
以上是关于人脸识别人脸识别损失函数学习笔记的主要内容,如果未能解决你的问题,请参考以下文章