【论文理解】ArcFace: Additive Angular Margin Loss for Deep Face Recognition(InsightFace)

【论文理解】ArcFace: Additive Angular Margin Loss for Deep Face Recognition(InsightFace)

论文地址:https://arxiv.org/abs/1801.07698

github:https://github.com/deepinsight/insightface

这篇论文基本介绍了近期较为流行的人脸识别模型,loss变化从softmax一路捋到CosFace,然后提出ArcFace,可以说起到很好的综述作用。论文评价对比方面也做了非常详细的对比策略方案分析。数据清洗工作也对后续研究应用有较大意义。数据和代码都开源,相当良心。

本文主要工作概述:

在三个影响人脸识别模型精度的主要因素上都做了相关工作

(1)       数据

对MS-Celeb-1M,MegaFace FaceScrub做了清洗。清洗后的数据公开。

(2)       网络

详细对比了不同的主流网络结构的性能,提出了能够在较大姿态和时间跨度上表现较好的网络block形式。

(3)       Loss

扫描二维码关注公众号,回复: 2046890 查看本文章

详细分析了L-softmax,Sphereface,ConsineFace等loss,提出ArcFace,在MegaFace上获得了state-of-the-art精度。


loss的演变历程:

2. 从Softmax到ArcFace

2.1 Softmax:

Softmax并没有明确的将特征优化成正样本能够有更高的相似度,负样本能够有更低的相似度,也就是说并没有扩大决策边界。

 

2.2 WeightsNormalisation

权重归一化之后,loss也就只跟特征向量和权重之间的角度有关了


在Sphereface论文中表明,权值归一化至提高了一点点效果。

 

2.3 MultiplicativeAngular Margin

Sphereface中,角度扩大m倍

由于cosine不是单调的,所以用了个策略给转成单调的

训练的时候加入了softmax帮助收敛,引入了一个参数lamda实际上

可是这个参数的引入让训练变的复杂微妙起来。

 

2.4 FeatureNormalisation
特征和权重正则化消除了径向变化并且让每个特征都分布在超球面上,本文将特征超球面半径设为s=64,正则化为64,sphereface的loss变为:

 

2.5 Additive Cosine Margin

本文把m设为0.35. 与sphereface相比,cosine-face有三个好处:(1)没有超参数简单易实现,(2)清晰且不用softmax监督也能收敛,(3)性能明显提升

 

2.6 Additive AngularMargin

Cos(theta + m)

这下margin随着theta的变化也是动态变化的。

 

2.7 Comparison underBinary Case

 


2.8 Target Logit Analysis

这里对Sphereface,consineFace和arcFace为何能提升性能进行分析。使用LResNet34E-IR模型和MS1M dataset进行分析。

先看a图


稍微降低softmax的Target Logit够提升性能同时也提高了训练难度,不过降低太多会导致训练发散。也就是为什么sphereface 在m =2 和lambda =0的情况下训练发散。

再看c图


theta的变化时从训练开始的90度左右最终慢慢变为三四十度。对照图a,在30~90度之间,ArcFace曲线更低,也就是说在这个区间,ArcFace对margin的惩罚比consineFace更大。所以到最后ArcFace收敛的角度区间位置比ConsineFace更小,也就是说收敛的更好一些(图c),从b也能看出训练之初,arcFace惩罚更大,训练后期ArcFace惩罚又比consineFace更小,也就是说收敛的更好。

在图c可以看出收敛后,theta基本都小于60度,超出60度的基本都是困难样本或者噪声样本。虽然从a中看在theta<30度时,consineFace惩罚力度更大,但是直到训练后期这部分也很少,所以也没什么用。

所以从曲线上来说,在30~60度区间上,增加惩罚边界能够提升精度,因为这部分与最有效的一般困难的样本有关,多惩罚一下这种的,有助于提升精度,但惩罚太多会导致发散。这也就是为什么性能从Softmax, SphereFace, CosineFace 到 ArcFace逐步提升。


3. 实验

3.1.1 训练数据

VGG2: 训练集--8631人314 1890张图片;测试集—500人16 9396张图片,姿态,年龄,光照,种族,职业跨度大。质量较高的数据集。直接使用。

MS-Celeb-1M: 原始包含10万人1000万图片。

清洗方式:获取每个人的身份质心,将每个人的图片按照距离质心的距离进行排序。距离质心过远的图片自动移除。然后人工确认在距离阈值边缘的图片,最终剩下的数据集包含85000人的380万图片。清晰数据结果公开。

 

3.1.2 验证数据

LFW:包含5749人的13233张图片,姿态表情和光照变化较大,6000face pairs上验证

CFP:500人,每人10张正面和4张侧面图片。测试包含正面-正面和正面-侧面验证,10个文件夹包含350人same personpairs和350different person pairs。本文只使用了较有挑战性的CFP-FP验证组。

AgeDB:这是自然环境下具有较大姿态,表情,光照和年龄变化的数据集。440人12240张图片,年龄范围3到101岁,标注有身份性别和年龄。本文使用的是AgeDB-30.包含300正样本对和300负样本对。

 

3.1.3 测试数据

MegaFace: 开源的最大测试基准,百万级别的测试分布。

Gallery set:69万人超过100万张图片,有噪声

Probe set:FaceScrub和FGNet

FaceScrub包含530人的10万张图片,其中55742张男性图片,52076张女性图片。有噪声

FGNet是年龄数据及,有82人的1002张图片。每人都有跨越年龄的多张人脸。

 

清洗FaceScrub:

获取每个人的身份质心,将每个人的图片按照距离质心的距离进行排序。然后人工排查,共找出605张噪声图片。测试阶段,将噪声图片进行了替换,识别精度提升了1%。

 

清洗MegaFace

人工清洗,找到707张噪声图片片,测试阶段,增加了一个额外的特征维度来区分这些噪声脸,识别精度提高15%。

 

清洗结果公开

 

3.2 网络设置

使用MxNet架构。

首先使用VGG2作为训练数据softmax作为损失函数验证了各种不同的网络设定。

Batch size 512

4or8块NVIDIA tesla P40(24G)GPU

学习率起始0.1,在100k, 140k和160k时分别缩小10倍

总iters 200K

Momentum0.9

Weight decay 5e-4

 

3.2.1 输入设定

采用5个关键点校准人脸并resize到112*112 RGB,归一化到-1~1

因为很多卷积网络都是为ImageNet分类任务设定的,那个输入是224*224,而本文的输入是112*112,所以为了保证特征图的分辨率,本文将conv7*7stride2替换为conv3*3 stride1.

这样最后卷积的输出是7*7

 

3.2.2 输出设定

在最后的几层,使用不同的策略来调查特征嵌入设定如何影响模型的表现。

Option-A:使用Global pooling(GP)

Option-B:在GP后使用一个全连接

Option-C:在GP后使用FC+batch normalization

Option-D:使用在GP后使用FC-BN-PRELU

Option-E: 最后一个卷积层后+BN-Dropout-FC-BN

除A外,其余特征维度都是512,A的维度由卷积层输出size决定。

 

3.2.3 Block setting

使用了改进的残差网络结构。

 

3.2.4 Backbones

网络主干使用了当前较为流行的一些模型

MobileNet

Inception-Resnet-V2

DenseNet

SEnet

DPN

比较了这些网络在精度速度和模型size上的区别。

3.2.5 网络设定总结

Input selects L.

第一层convLayer 卷积核为3*3stride1时,网络输出7*7;卷积核为7*7stride2时,网络输出3*3

通过比较发现,输出特征图维度大的性能更好一些,所以还是选择卷积核为3*3stride1。

 

Output selects E.

通过对比发现Option-E的输出方案能够获得最好的效果。Dropout参数设定为0.4,有效避免过拟合并且获得较好的泛化能力。

 

Block selects IR.

BN-Conv(stride=1)-BN-PReLu-Conv(stride=2)-BN这个结构能够获得更高的精度。

 

Backbones Comparisons

速度在P40 GPU上测的,

Inception-Resnet-V2 network obtains the best performance with long runningtime (53:6ms) and largest model size (642MB).

MobileNet can finish face feature embedding within 4:2ms with a model of 112MB, and the performance only dropsslightly.

综合考虑速度和精度,LResNet100E-IR较为理想。本文就是用这个在MegaFace上测试的。

 

3.3 LOSS setting

由于参数m对决策边界有重要影响,因此先分析找出最佳m

使用LMobileNetE+arcFace loss在refined MS1M数据集上训练,m从0.2到0.8变化。0.5最优,选择0.5.

 

基于LResNet100E-IR和refined MS1M数据集,比较了不同的loss函数对精度的影响。

结论(1)与Softmax和Sphereface相比,cosine face和ArcFace在较大的姿态和年龄变化时,精度明显提升。(2)CosineFace和ArcFace比SphereFace更易实现,不需要softmax的辅助就能很容易的收敛,而对于sphereface,softmax的辅助是必不可少的。(3) ArcFace比consineFace略微好一丁点,不过ArcFace更为直观并且在超球面维度上有更清晰的解释。

 

3.4. MegaFace Challenge1 on FaceScrub

LResNet100E-IR network and the refined MS1M dataset

MS1M和FaceScrub重复的人剔除,分别计算两个库中每个人的特征质心,578个中心距离小于0.45的人,然后将这578人再MS1M中移除。重新比对结果

 

3.5 Further Improvement by Triplet Loss

受限于GPU内存,基于softmax的方法训练困难。一个较为实用的解决方案是使用度量学习的方法,较为常用的是triplet loss,不过triplet loss的收敛速度比较慢,所以本文使用triplet loss微调现有的人脸识别模型。

Finetuning时,本文使用LResNet100EIR模型,lr设为0.005, momentum为0, weight decay 5e-4.

用AgeDB-30验证,发现(1)用较少人数训练的Softmax然后用较多人数的数据集通过triple loss finetuning后精度明显提升,同时也说明了2步训练机制的有效性,训练速度比直接训练tripletloss快很多;(2)通过在同样的数据集上triplet finetuning也能提升精度,说明局部的提升有助于全局模型的提升;(3)局部度量学习的方法可以补充全局超球面度量学习的方法。


由于tripletloss 的margin是欧氏距离,之后作者会继续研究基于角度margin的triplet loss。

猜你喜欢

转载自blog.csdn.net/littlestudent12/article/details/80797301