论文链接:https://arxiv.org/abs/1907.12256
作者提出该方法的动机:
论文的贡献:
准备工作:
Loss function(这节的内容是推理了arcFace的公式,感兴趣可以看一下)
常规的softmax loss函数:
由于softmax 缺少增大类间距离,减少类内距离的能力。在sphereFace和NormFace中,移除了偏置项,并固定了以下参数:
尽管(3)式能够保证同一个公式的高相似度,但是却不能很好的区分不同的类别,本文中使用了N-Softmax表示L2。
ArcFace的作者在(3)式中增加了angular margin m在中,这样有效的增加了类类间的紧密程度和类间的差异,ArcFace公式如下:
作者提出的方法:Li-ArcFace
ArcFace的作者增加了一个angular margin m在,将作为target logit。
本文方法中,作者移除了偏执项,同时通过L2回归让代表了和的角度。作者首先提出一个线性函数:同时作者也增加了angular margin m在target logit中。最终的target logit:。最终的Li-ArcFace函数形式:
使用线性函数代替cosine函数有两个优势;
在arcface中,类别之间有重叠;(图3我也看不太懂)
Network architectures
MobileNetV1:使用depthwise separable convolution;
MobileNetV2:引入了inverted residuals和linear bottlenecks去提升网络效率;
MobileFaceNet:通过使用global depthwise conv(GDC)去代替global average pooling,原因:面部的特征学习权重应该不一样,但是global average pooling却把他们当作一样的权重去考虑了,所以使用GDC自己学习面部的不同权重。
作者是在MobileFace网络结构上进行了修改:
作者对于mobileFace的修改主要体现在以下几点:
1)在每个bottleneck中增加了注意力机制(CBAM【18】),并将cbam中的第二个激活sigmoid修改为1+tanh。
2)所有的mobileFace原先使用的relu,修改为prelu;
3)Expansion factor因子的变化(Expansion factor:从linear bottleneck到深度卷积之间的维度比称为Expansion factor(扩展系数),该系数控制了整个block的通道数);
Training tricks for face recognition
Experiments
Evaluation Results of Li-ArcFace
实验一:最后一层权值损耗参数的重要性:
作者通过对最后一层卷积的损耗做实验,证明了最后层权值损耗的重要性;
实验二:超参数m的重要性(Li_arcface参数m)
作者在做实验的时候,由于arcface在训练时无法拟合,所以就使用了N-softmax进行了预训练,而且在设置m时,作者发现LiArcFace的参数在0.4和0.45效果最好,ArcFace的参数在0.45和0.5效果较好,看表3。
实验三:loss函数之间的比较
表3中ArcFace,Li-Arcface,CosFace在LFW上的验证精度差距都很小,但是都明显好于N-softmax;在CFP-FP测试集上,Li-ArcFace效果是优于ArcFace和cosFace;
作者重点对比了不同的loss在CFP-FP和AgeDB上的测试结果:
图4中,Li-ArcFace效果优于其他loss,在测试集AgeDB上,Li-ArcFace效果略好于其他loss函数。总言之,Li-ArcFace效果与Arc-Face等loss函数相比,效果最好,同时Li-ArcFace训练不需要预训练模型。
总结:自己使用了该文提到的注意力机制和蒸馏,效果还挺好的;