人脸识别--ArcFace/InsightFace:additive angular margin loss for deep face recognition
原文链接:点击打开链接
1. From Softmax to ArcFace
1.1 softmax
其中x_i表示第i个样本的深度特征,属于第y_i类。特征的维数d设置为512维。w_j表示最后全连接层的权值W的第j列,b是偏置项。batchsize和类别数分别为m和n。
1.2 weights normalisation
简单地,我们固定b_j=0,然后将目标对数函数转换为如下:
我们用L2正则固定||w_j||=1,使得预测仅仅依赖于特征向量和权重之间的角度。
在sphereface实验中,L2权重正则仅仅提高了一点性能。
1.3 Multiplicative Angular Margin
1.4 特征归一化
特征归一化广泛应用于人脸验证,比如,L2归一化欧式距离和余弦距离。我们用L2归一化固定||x_i||,重新缩放||x_i||到s,本文固定s=64。基于特征和权重归一化,我们可以得到1.5 可调整的余弦边界
余弦边界m移动到了外面,因此他们提出了余弦边界损失函数:点击打开链接
在这篇文章中,我们设置余弦边界m为0.35。对比sphereface,可调整的余弦边界(CosineFace)有三个优势:(1)没有棘手的超参数极容易实现;(2)更清晰和在没有soft max监督下更容易训练;(3)明显的性能提升。
1.6 可调整的角度边界
尽管余弦边界从余弦空间到角空间是一对一的映射,这两个边界仍然有差别。事实上,角度边界比余弦边界有更加清晰的几何解释,角空间的边界在超球面流形上对应arc距离。我们增加了角边界m在,对于分类这个约束更加严格。我们提出的ArcFace定义如下:
1.7 在二分类情况下比较
为了更好的理解从softmax到ArcFace的过程,我们给出了在二分类情况下的决策边界,如表1和图3所示。基于权重和特征归一化,这个主要的不同在我们提出的边界方法。
2. 实验
2.1 实验数据
(1)训练集--VGG2和MS-Celeb-1M
VGG2:VGG2数据集包含一个有8,631个身份(3141890个图像)的训练集和一个包含500个身份的测试集(169,396个图像)。VGG2在姿势、年龄、光照、种族和职业方面有很大的变化。因为VGG2是一个高质量的数据集,所以我们直接使用它而不需要进行数据优化。
MS-Celeb-1M:最初的MS-Celeb-1M数据集包含100 k个身份和1000万张图片。为了减少噪声获得高质量的训练数据:
1)将每个身份的人脸图像都按照距离身份中心的距离进行排序。对于特定的身份,人脸图像的特征向量离身份特征中心太远则自动移除。
2)手动核对第一步中阈值附近的人脸。
3) 最后得到一个380万张85k个身份的数据集。
(2)验证集--LFW、CFP、AgeDB
LFW:13233张图像,5749个身份,6000个人脸对。
CFP:500个身份,每个身份有10个正脸,4个侧脸。评估方案:frontal-frontal (FF) and frontal-profile (FP) 人脸验证,有十个文件夹,每个文件夹有350个相同人和350个不同人。本文用CFP-FP进行挑战。
AgeDB:户外数据集。包含12240个身份,每张图片都有关于身份、年龄和性别属性的注释。最小和最大年龄分别为3和101。测试数据:四组测试数据,对应不同的年间隔(5,10,20,30)。
(3)测试集--MegaFace
gallery set(参考图像集):Flickr的子集,包括1百万张图像,690k不同的身份。
probe set(测试集):包含FaceScrub和FGNet。
FaceScrub包含100k张图,530个不同身份,55742个男性,52076个女性。FGNet是一个人脸年龄数据集,有1002张图,包含82个人,每个人有多个不同年龄(范围为1到69岁)的人脸图片。
数据清洗:1)FaceScrub数据集中有605个噪声人脸图(人脸和身份不匹配),提升这个身份准确率1%;2)MegaFace数据集干扰项,最后找到707个噪声人脸图,在测试时,增加一维传统特征用于区别噪声人脸,提升身份准确率约15%。
2.2 网络设置
我们首先使用VGG2作为训练数据,Softmax作为损失函数,基于不同的网络结构设置来评估人脸验证的性能。本文所有的实验都在MxNet框架下实现。我们设置batchsize的大小为512,训练模型在四个或者八个NVIDIA Tesla P40 (24GB)GPUs。学习率从0.1开始,在100k, 140k, 160k迭代次数的时候都除以10。总共迭代次数设为200k。我们设置动量为0.9,权重衰减率为5e-4。
(1)输入设置
我们使用五个人脸关键点(眼睛中心、鼻尖、嘴角)。图片大小为112*112,在RGB图像的每一个像素值大小为[0,255]通过减去127.5然后除以128归一化。在第一个卷积层,我们使用卷积3*3,步长为1代替卷积7*7,步长为2。
(2)输出设置
嵌入特征维数设置为512。(3)块设置
除了原始的ResNet单元之外,我们也研究了一种对于训练人脸识别模型更有利的残差单元设置。在图7中,显示了改进的残差单元(称为:“IR”),包含BN-Conv-BN-PReLu-Conv-BN结构。对比残差单元,我们设置步长为2在第二个卷积层而不是第一个卷积层。另外,PReLu用来代替原来的ReLu。