人脸识别演变过程中的 softmax loss、center loss、L-Softmax loss、A-Softmax loss、AM-Softmax loss、ArcFace的完整详细讲解

人脸识别流程

人脸检测 → 人脸对齐 → 特征提取(关键步骤,网络模型) → 特征匹配

ArcFace简介

ArcFace其实就是一个针对人脸识别使用的损失函数,因为网络结构上的改进能研究的点越来越少了,大家就把目光放在了损失函数上,ArcFace就是一种用于创新的损失函数的人脸识别方法。

ArcFace演变过程

1. SoftMax loss

SoftMax loss在分类任务中非常常见,具体内容其实就是 SoftMax 和 Cross-Entropy 损失函数相结合使用的一种损失函数。

SoftMax

其中,SoftMax将特征数值都转换成0-1之间,并保证各数值相加等于1,公式如下。
softmax函数

Cross Entropy

而 CrossEntropy(后面简称CE) 是计算标签和预测值之间差距的损失函数,由于在类别的预测过程中,我们只需要让我们需要的那个label的预测值大于其他类别的预测值就行了,也就是让那个label的预测值为 1,其他类别的预测值不用管他,所以CE原来的公式是考虑了所有的类别 k:
CE原来的公式
即可以简化为 loss = -log(f(zc))。

全连接层

结合全连接层的公式:y = w * x + b

组合起来

把这三个公式组合起来,我们就可以推出SoftMax Loss的公式为
在这里插入图片描述
SoftMax loss的优点就是类间距离比较好,但是类内距离处理得比较差,甚至可能会大于类间距离。

2. center loss

提出原因

基于Softmax loss类内距离处理差的问题,有人就提出了Center loss,原文链接如下:

https://ydwen.github.io/papers/WenECCV16.pdf

推导分析

对于每个类都学习一个类的中心,然后让每个样本在训练过程中与类的中心拉近(其实就是在loss中加入一项求样本与类中心的距离)。
center loss公式
其实就是SoftMax loss加上了Center loss(简称cl),这个cl中的 λ 是一个权重,调节softmax loss和center loss的比重,xi则表示第 i 个样本,cyi则表示第 i 个样本的类别的中心点位置。
整个cl其实就是类别中心点和样本间的二阶范数。

3. Large Margin SoftMax Loss(L-SoftMax)

提出原因

同样是为了解决Softmax类内距离处理效果不好的问题。

推导分析

先上论文效果图,从图中我们可以看到,第一列两张图是Softmax的处理效果,很多样本都会混杂到一起;而第二列两张图是L-Softmax loss的处理效果,显然第二列的样本类内距离更加紧凑了。这是怎么做到的呢?其实就是在加上一个角度相关的参数进行损失的计算。
论文图
(1)SoftMax
首先我们可以看到原来的Softmax函数是这样的:
在这里插入图片描述
在这里插入图片描述

(2)转换成 L-Softmax
其中的Wyi和Xi分别表示代表 yi 类类别的特征空间向量和第 i 个样本的特征空间向量,线性代数告诉我们,他们相乘就相当与他们的模相乘,再乘以一个夹角,也就是:向量a•向量b =|向量a|•|向量b|•cosθ
因此,原来的损失函数可以转换成
L-SoftMax loss

损失函数训练过程解释

(1)损失下降,也就是让括号内的部分趋近于 1
(2)训练类别 i 时,让上面的类别越大越好,分母的其他类别越小越好,也就是
在这里插入图片描述
(3) 在训练过程中,向量的模的大小是不变的,而cosθ在0~π的范围内是递减函数,类别 i 的θ会越来越小,这样就可以让样本向量与类别向量的夹角越来越小了。

但是我们还需要一个margin来隔开在特征空间中的各个类别,我们就引入一个参数m,让cosθ变成cos(mθi),这样,0 < θi < π,就变成了0 < mθi < π,即0 < θi < π/m。
m的作用可以这么理解
本来是 0<θ1<θ,我们就会把它判断为类别1,加入m之后,就需要满足 0<θ1<θ/m,才会被判断为类别1,即减少了各个类别判断的角度范围,这样就减少了类间距离。
论文中的损失函数是这样的:
L-SoftMax loss
我们可以看到对于类别yi,用了一个函数ψ(θ)来代替原来的cosθ:
在这里插入图片描述
上面的cos函数很好理解,而下面的D(x)函数,其实就是一个递减的函数,且该函数需要满足:D(π/m) = cos(π/m)。理论上任何满足这两个条件的函数都可以。而文中利用cosθ转换成这个D(x),也就是:
当0 < θ < π/m 时,ψ(θ)=cos(mθ);当π/m < θ < 2π/m 时,ψ(θ)=−cos(mθ)−2;当2π/m < θ < 3π/m 时,ψ(θ)=−cos(mθ)−4;…
也就是论文中的
在这里插入图片描述

4. A-Softmax loss

原文链接
https://arxiv.org/abs/1704.08063

基本思想

这个损失函数其实很简单。只要知道两点就行了:
(1)在Softmax损失函数的基础上,添加另外两个限制条件 ||W||=1、b=0;
Softmax loss
||W||=1,b=0
(2)如同L-Softmax损失函数,添加了角度参数 m 来限制类内距离。
A-SoftMax loss

5. AM-SoftMax

使用尺度系数 s,并使用 cosθ-t,即有
在这里插入图片描述

基本思想

就是在A-Softmax损失函数的基础上,引进了尺度系数s和类间间隔t。
(1)类间间隔t。 这个 t 就是类间的间隔,即类别间的区域至少有 t 的间隔角度。 如果各类别画出来角度差别不大,也就是没有明显的实际角度间隔,我们可以考虑调小这个数值,降低训练难度,让类别yi的特征向量的角度分数(就是上面公式的大括号中分子和分母加号左边部分)更大,更容易让大括号里的数值变成1;如果各类别的特征向量有明显实际间隔,同理,我们可以考虑调大这个数值。
(2)尺度系数s。这个其实就是缩放类间间隔t的差距让训练更快或更慢收敛。因为cosθ我们知道,数值在0~1之间,差距可以说比较小,就可以通过这个尺度系数将它进行缩放,让这个差距变大,损失变大,收敛更快。

6. Additive Angular Margin Loss (Arc Face)

原文链接
https://arxiv.org/pdf/1801.07698.pdf

基本思想

Additive Angular Margin Loss,就是加性角度间隔损失。

加性角度间隔

角度间隔,即我们需要让特征在角度方向上有间隔。如下图,我们可以看到不同颜色就是不同的类,左图显示我们直接用SoftMax的话,各类由于角度没有间隔会混合到一起;右图我们加上了角度间隔,因此可以把各类别区分开来。
那怎么让各类别间有角度间隔呢?
角度间隔图
首先我们看SoftMax loss的公式。上面说了SoftMax Loss的原理,就不赘述了哈。
SoftMax
添加角度间隔:

  1. 首先我们让特征向量各样本的距离只与角度相关,即让权重与特征向量的分布相同。我们直接用一个归一化就可以了,比如,令||W||和||x||均为1,其他数值理论上也可以。
  2. 然后添加一个缩放系数s,这个缩放系数s是为了训练的时候能让损失收敛加快,因为cos的值是-1~1嘛,数值较小。
    角度间隔
  3. 添加加性角度间隔m这个加性角度间隔m就是直接加到角度上去,所以叫加性角度间隔。cos(θ) → cos(θ+m)。相当于是让角度更难收敛,需要让角度收敛得更小的时候才能达到以前同样的收敛效果。什么意思呢,比如原来收敛到 θi,才能分类成类别 i,但是加上这个间隔m后,就需要收敛到 (θi - m),才能有原来 θi 的收敛效果。这样就让各个类别的类别角度范围缩小了,相当于是,加大了类间间隔。
    加性角度间隔

以上。
个人学习,如有错误,请各位大佬指出,非常感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值