SphereFace
转载请注明出处 https://blog.****.net/Fire_Light_/article/details/79599020
论文链接:SphereFace: Deep Hypersphere Embedding for Face Recognition
从Center Loss的论文发布开始,人脸识别技术的研究重心就转向损失函数的改进了,这篇论文作者从几种损失函数开始说起。
几种损失函数
softmax损失仅仅能够学到分辨性不够强的特征,除此之外,还有contrastive loss,center loss,triplet loss。
但是它们都在一定程度上存在弊端:
center loss仅能使得类内紧凑,无法使得类间可分。
contrastive loss和triplet loss需要pair/triplet 挖掘过程,增加时间的损耗。
除此之外,还有一个更关键之处:以上的损失函数都使用了欧式距离,而softmax损失学习到的特征有角度上的分布特性。
作者做了一个实验,构建了一个CNN来学习CASIA-webface的一个子集的特征,输出的全连接层FC1为两层,所以可以可视化。原始Softmax训练出来的特征分布如下图(a),其他几张图可以暂时不用看。
通过以上实验与center loss论文,证明了softmax损失学习到的特征有角度上的分布特性,因此在这种意义上,欧式距离与softmax损失是不兼容的,所以作者认为结合softmax损失和欧式距离效果可能不是最佳的。
一步一步推导A-Softmax
modified Softmax
为了让特征学习到更可分的角度特性,作者首先对Softmax进行了一些改进:
为了简单起见,先假设是一个二分类问题,
softmax的决策边界是:
如果我们通过W的归一化来添加约束条件:
那么我们可以得到决策边界:
这样的损失函数称为改进了的Softmax(modified Softmax),通过这样的损失函数学习,可以使得学习到的特征具有更明显的角分布,因为决策边界只与角有关。
假设对于输入特征Xi,它的标签是Yi,用f(Yi)表示WiXi即Softmax对应Yi那一位的输出
Softmax的损失函数:
modified Softmax的损失函数:
A-Softmax
还可以进一步修改
通过添加系数m,对θ1有了更强的约束,因为cos(mθ1)比cosθ1要小。此时损失函数变为:
由于cosθ在[0,pi]上单调递减,因此θ有上界:
我们为了使得这个函数随角度单调递减,构造一个函数去代替cos:
这是一个根据定义域分段的分段函数,博主作为灵魂画手,就手画了一下这个函数的图,给大家一个大概的印象
这样损失函数就会变为
A-Softmax的性质
性质:在二分类问题中,对于一个训练好的A-Softmax层,两个类的类内角度特征距离为m−1m+1θ
其中θ表示两个类的权值W1,W2之间的夹角。证明:
性质一:
A-Softmax Loss定义了一个大角度间隔的学习方法,m越大这个间隔的角度也就越大,相应区域流形的大小就越小,这就导致了训练的任务也越困难。
定义:定义mmin
为当m>mmin
时,类内的最大角度特征距离小于类间的最小角度特征距离。
性质二:
证明左:
证明右:
右边的证明是将多个类的分布视为圆上的平均分布,所以对于任意的Wi,两边都是对称的,可以得到以下不等式:
解之后得到m>=3
实验及结果
网络结构:
训练集:CASIA-webface
batchsize: 128
28K次迭代收敛
测试时的算法:连接一张图以及其水平翻转的图的FC1输出,PCA降维后计算余弦距离
不同m对准确率的影响:
LFW得分: