insightFace
本文主要引用于:人脸识别:《Arcface》论文详解
且只做学习记录使用,若侵权,留言删除
论文地址:ArcFace: Additive Angular Margin Loss for Deep Face Recognition
内容理解来自于:人脸识别的LOSS
该篇论文详细的介绍了数据,网络,损失函数的三个改进。
1、首先利用VGG2数据集和MS-Celeb-1M数据集(有对数据集进行清洗),作为训练数据集。LFW、CFP、AgeDB数据集作为验证数据集,MegaFace数据集作为测试数据(有对数据进行清洗);
2、然后针对网络的输入,输出,网络基础块、backbone等方面做出优化处理
3、最后对sphereFace、consineFace、arcFace三个损失函数对比结果。
1、主要工作内容
本文在影响人脸识别精度的三个因素做了相关工作
a、数据
对MS-Celeb-1M,MegaFace FaceScrub做了清洗。清洗后的数据公开。
b、网络
详细对比了不同的主流网络结构的性能,提出了能够在较大姿态和时间跨度上表现较好的网络block形式。
c、loss
详细分析了L-softmax,Sphereface,ConsineFace等loss,提出ArcFace,在MegaFace上获得了state-of-the-art精度。
2、从Softmax到Arcface
loss对网络的优化具有导向作用,不同的loss使得网络更加侧重学习到数据的某一特性。从Center Loss的提出,到SphereFace,CosineFace,InsightFace等都有在损失函数这一环节提出新的解决方案,而最终,这些loss都是基于对softmax-loss的修改得到的。
1、softmax-loss
这是我们传统的Softmax公式,其中,代表我们的全连接层输出,我们在使损失降的过程中,则必须提高我们的占有的比重,从而使得该类的样本更多地落入到该类的决策边界之内。
2.2、center-loss
Center Loss的整体思想是希望一个batch中的每个样本的feature离feature 的中心的距离的平方和要越小越好,也就是类内距离要越小越好。作者提出,最终的损失函数包含softmax loss和center loss,用参数λ来控制二者的比重
2.3、SphereFace
center-loss的出现,使得人脸识别的研究转向了对loss的优化,人们发现,在softmax-loss中,由知,特征向量相乘包含由角度信息,即Softmax使得学习到的特征具有角度上的分布特性,为了让特征学习到更可分的角度特性,作者对Softmax Loss进行了一些改进
其中,作者在中约束了**||W||=1**并且令 bj=0,并将从区分出来,就是为了让特征学习到更可分的角度特性。通过这样的损失函数学习,可以使得学习到的特征具有更明显的角分布,因为决策边界只与角相关。
对于Softmax而言,希望能有cos(θ1)>cos(θ2),所以作者增加了在角度空间中对损失函数的约束cos(t⋅θ1)>cos(θ2),也就是要把同类数据压缩在一个紧致的空间,同时拉大类间差距
由于cosθ在**[0,π]上单调递减,因此θ有上界,为了使得这个函数随角度单调递减,作者构造一个函数去代替cosθ**。
sphereFace在实际训练中,softmax可以保证模型的收敛,于是作者对φ(θyi)函数做了变更,并同时用参数λ来控制二者的比重。
t 大小是控制同一类点聚集的程度,从而控制了不同类之间的距离。而 **λ **也从 1000 降到 5。
后续的F-Norm SphereFace对SphereFace做了更新,仅注重从数据中得到的角度信息,而不考虑特征向量的值,所以采用了s=64作为特征归一化参数替代了**||x||**,因此公式更新为:
2.4、Cosine-loss
与sphereFace最大的区别就是 t 从余弦函数里面挪到了外面。
- 相对于SphereFace而言要更加容易实现,移除了φ(θyi),减少了复杂的参数计算
- 去除了Softmax监督约束,训练过程变得简洁同时也能够实现收敛
- 模型性能有明显的改善
2.5、arcFace
尽管余弦裕度具有从余弦空间到角度空间的一对一映射,但是这两个裕度之间仍然存在差异。 实际上,与余弦余量相比,角度空间具有更清晰的几何解释,并且角度空间中的余量对应于超球面的弧距。于是,作者提出了Angular Margin Loss,将角度边缘t置于cos(θ)函数内部,使得cos(θ+t)在θ∈[0,π−t]范围内要小于cos(θ),这一约束使得整个分类任务的要求变得更加苛刻。在满足如下公式的情况下:
arcFace的loss计算公式为:
如果扩展提议的加法角余量cos(θ+ t),我们将得到cos(θ+ t)= cosθcost - sinθsint。与附加余弦余量cos(θ)- t相比,拟议的ArcFace相似,但是由于sinθ,余量是动态的。
3、Loss对比分析
为了研究 SphereFace、 CosineFace 和ArcFace是如何提高人脸识别的效果,作者使用了 LResNet34E-IR网络和M1SM人脸数据集分别使用不同的损失函数对网络进行训练。target logit指的是网络的全连接层输出(也就是网络的预测为真实类别值:cosine的Target Logit 也就是指的值)。
由该图可知,0°-30°时,consineFace的惩罚力度比其他的都大,30°-60°时arcFace的惩罚力度要大。
作者同样给出了网络开始、中间和收敛时 θ 的分布图,从图中我们可以看出,0 ~ 30°内的 θ值很少可以忽略不计,consineFace和arcFace的 θ 值基本在 30°~60°的范围内,而这个范围里,arcFace比cosineFace 的惩罚力度要大
我们已经由θ的分布图可知在收敛的时候ArcFace的θ中心值与CosineFace相比要偏左一点,同时,由上图可知,收敛的时候红色实线要高于蓝色和黄色实线,也就意味着,收敛的时候ArcFace相对于其他Loss使得同一类更加“紧凑”,相对于其他的Loss实现了将同一个类压缩到一个更紧致的空间,更密集,使得网络学习到的特征具有更明显的角分布特性。
4、网络设置
作者首先使用VGG2作为训练数据并使用Softmax作为损失函数,根据不同的网络设置评估人脸验证性能。 本文中的所有实验均由MxNet实施。batch_size设置为512,并在四块或八块NVIDIA Tesla,P40(24GB)GPU上训练模型。 学习率从0.1开始,并在100k,140k,160k迭代中除以10。 总迭代步长设置为200k。 我们将momentum设为0.9,weight decay设为5e-4。
4.1、输入设置
大多数神经网络在Image-Net的分类网络的输入尺寸为224,然而人脸的尺寸是112,若直接输入会导致输出尺寸由 7 X 7 变为 3 X 3。因此作者将预训练模型的第一个7x7的conv(stride=2)替换成3x3的conv(stride=1)。实验中将修改后的网络在命名上加了字母**“L”**,比如SE-LResNet50D。
4.2 、输出设置
所有网络的最后都是添加GAP(global Average pooling)层,不同的输出选择对网络模型的性能选择影响不同。作者探究了不同的输出模式对结果的影响,在测试期间,通过两个特征向量的余弦距离来计算的。比较用于面部识别和验证任务中采用最近邻和阈值。
- Option-A: Use global pooling layer(GP).
- Option-B:Use one fullyconnected(FC) layer after GP.
- Option-C: Use FC-Batch Normalisation (BN) after GP.
- Option-D: Use FC-BN-Parametric Rectified Linear Unit (PReLu) after GP.
- Option-E: Use BN-Dropout-FC-BN after the last convolutional layer.
通过比较,可知选择E方法作为输出能获得更好的表现。
4.3、网络模块设置
作者设计了一残差网络的改进版进行模型训练。结构为BN-Conv-BN-PReLu-Conv-BN structure,并在第二层网络设置 stride = 2,同时用Prelu替代relu,结构图如下:
实验结果表明,使用 E 方法加改进的网路结构能获得更好的效果。
综上所述,最终在Resnet网络上做出了3项改进,第一是将第一个7x7的卷积层(stride=2)替换成3x3的卷积层(stride=1),第二是采用了Option-E输出,第三是使用了改善后的残差块。
5、评估
作者比较不同backbone下的测试精度、测试速度以及模型大小,并在基于精度,速度和模型尺寸之间的权衡,作者选择LResNet100E-IR进行Megaface挑战的实验。
同时,MegaFace作为百万规模级别的面部识别算法的测试基准,作者以LResNet100E-IR作为网络结构,以MS1M作为训练集,分别对比了不同损失函数在MegaFace上的表现,其中最后两列括号中有“R”是代表清洗过的MegaFace,Rank1指标代表第一次命中率,VR@FAR代表在误识率FAR上的TAR,也就是说第一次命中率Rank1越高越好,VR@FAR越高越好。