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

目录

一、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):

2.5 不同loss的决策边界:

3. CosFace中一些细节问题

3.1 ​为什么要进行feature Normalization?

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

3.3 CosFace源码中操作流程

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

 三、ArcFace (CVPR2018)

主要思想

ArcFace loss特性:

ArcFace Loss函数:

实验验证:

小修改了网络结构:

四、Center Loss


一、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:

其中:f_{j} 是当前的类别权重W_{j}和特征 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的分类边界分析

softmax:无分类间隔;SphereFace:角度值变小时间隔也变小了;cosface:基于余弦值间隔;ArcFace:角度间隔

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的宽度为 \sqrt{2}m

2.5 不同loss的决策边界:

ArcFace中s=64、m=0.5(SphereFace和CosFace分别为1.35和0.35时性能最佳)

3. CosFace中一些细节问题

3.1 \bigstar\bigstar\bigstar为什么要进行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函数:

ArcFace与CosineFace相比的优点:

 cos(\theta +t)可以转化为,不仅形式简单,并且还动态依赖于sin\theta,使得网络能够学习到更多的角度特性。

实验验证:

1)作者首先画出不同角度下全连接层输出矩阵中预测为真实类别的输出target logit曲线图,即为。发现在30度到60度范围内,ArcFace的效果要好于其他算法(值更小,loss更大)。

2)然后,统计训练过程角度θ的变化,发现在训练后期角度集中在30~60度区间。然而1)中得到在30度到60度范围内,ArcFace的效果优于其它loss。

小修改了网络结构:

1)Input selects L:将预训练模型的第一个7x7的卷积层(stride=2)替换成3x3的卷积层(stride=1)

因为基网络在分类任务中输入为224x224,而人脸识别的输入为112x112。如果采用7*7(stride=2)卷积会使得最后一层特征尺寸太小。修改后的网络在命名上加了字母“L”,比如SE-LResNet50D。

2)修改了resnet的block(名称中用IR标识):具体在下图中标明了.

3)Output selects E:最后一层使用BN-Dropout-FC-BN,其中Dropout=0.4。使用时一般没有加这一步。

四、Center Loss

Center Loss的整体思想是:

  • 希望一个batch中的每个样本的feature离feature 的中心的距离的平方和要越小越好,也就是类内距离要越小越好。
  • 损失函数包含softmax loss和center loss,用参数λ来控制二者的比重,如下面公式所示: 

加入了Softmax Loss对正确类别分类的考虑以及Center Loss对类内距离紧凑的考虑,总的损失函数在分类结果上有很好的表现力。

下面是新的损失函数并调节不同的参数λ得到的实验结果,加入了Center Loss后增加了对类内距离的约束,使得同个类直接的样本的类内特征距离变得紧凑。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值