aoi学院

Aisaka's Blog, School of Aoi, Aisaka University

人脸识别-CosFace 论文解读

论文完整标题为:CosFace: Large Margin Cosine Loss for Deep Face Recognition

该论文在2018年发表,提出了新的人脸识别的损失函数。

CNN的发展使得人脸识别有了长足的进步。人脸识别的核心任务为face detection,face verification 和 face identification,这后两种方法都涉及到人脸特征的区别。但是对于CNN的传统损失函数softmax缺乏该能力(人脸特征的区别)。为了解决该问题,提出了center loss(参考 https://blog.csdn.net/u014380165/article/details/76946339)

large margin softmax(https://blog.csdn.net/u014380165/article/details/76864572)

angular softmax loss. 这些损失函数的中心思想都是将类间距离最大化,类内距离最小化。作者提出了新的损失函数 large margin cosine loss(LMCL),从另一个角度来实现损失函数。

损失函数详细介绍见:https://zhuanlan.zhihu.com/p/34044634

作者提出了一种新的损失函数large margin cosine loss (LMCL),将softmax loss 通过对特征和权重向量进行L2正则化表示成cosine loss。

softmax loss公式如下

其中pi为条件概率,N为训练的样本数,C为类别总数,fj表示为

θj为Wj和x向量之间的角度,为了让特征学习更有效,将W部分固定为1,在测试阶段,一对测试图片的分数为两个特征的余弦相似度。x的范数对分数没有贡献,因此将||x||固定为s。得到

其实这里不太明白,难道说这里的cos(θ)指的就是余弦相似度吗?它指的不应该是w和x之间的余弦相似度吗?两者指的是同一个东西吗?

由于只有cos(θ)是可变的,因此学习到的特征是在角度空间可分的。该损失函数为Normalized version of Softmax Loss (NSL)。但是该方法因为强调的是正确分类,也就是说能达到将类内距最小化,却无法同时做到将类间距最大化。

如对一个二分类场景,θi表示第i类Ci的特征向量和权重向量之间的角度,NSL函数令abs(cos(θ1)-cos(θ2))!=0 来区分一类和二类。为了开发large margin classifier,要求cos(θ1) - m > cos(θ2) and cos(θ2) - m > cos(θ1), m是一个固定参数,即其中的margin。该方法可以扩展到多类场景。

Large Margin Cosine Loss(LMCL)公式为

其中N为训练样本数,xi代表yi的特征向量,Wj是j类的权重向量,而θj表示的是Wj和xi之间的角度。

分子分母全部除以分子该项可以得到下图

如此将loss最小化,等同于类间距离最大化同时类内距离最小化。

对LMCL来说,s需要足够大

实现细节

预处理:首先脸部区域和landmark通过mtcnn得到,然后通过5个kps(眼睛2个,鼻子1个,嘴角两个)进行相似度变换。然后将分离出来的面部resize到112*96,接着参考(A discriminative feature learning approach for deep face recognition. In European Conference on Computer Vision (ECCV))将RGB图片中的每一个像素减去127.5,再除以128。

训练:框架选用的是SphereFace: Deep Hypersphere Embedding for Face Recognition.,s设为64,优化函数为sgd,batch size为64,gpu8,weight decay=0.0005

对于小型数据集。学习率初始值为0.1,在16k次迭代时,学习率为0.01,24k时0.001,28k时0.0001,迭代一共30k。而在大型数据集上,迭代一共240k次,初始学习率为0.05,在80k,140k,200k时一次下降。

在测试阶段,原图片和翻转图片的特征进行拼接组成人脸的特征表示,特征之间的余弦距离即为相似度,最后通过阈值筛选和结果分数排名进行识别。

LFW和YTF数据集上m=0.35是最合适的,其他数据集上需要进行测试。

pytorch版本的源代码见:https://github.com/hiteyoshi/CosFace_pytorch


参考资料

https://zhuanlan.zhihu.com/p/59736735