本文相对应的代码请见:https://github.com/Emma0118/CosFace_Adaptive_S_1
1. Scale Parameter S
在Margin Based Classification为基础的人脸识别算法中,有两个重要的超参数 S, M。
- S: 是一种特征缩放因子。最早在L2-Softmax[5]中提出,在进行了feature L2 normalize之后,范数小的特征算出来的梯度会更大;而范数小的特征一般对应的是质量较差的图片。因此,某种程度上特征归一化起到类似于难例挖掘的作用。然而对特征层强行进行L2的约束会导致分类空间太小,导致模型训练困难,Loss值难以下降分类效果不佳。在实际的模型训练中为了便于模型优化作者加入尺度缩放因子将分类的超球空间放大。
- M: Margin, 通过对 Margin施加的位置和计算方法上对原始的softmax loss进行优化。例如,AM-Softmax[8]是把角度裕量从cos(mθ)改进为cos(θ)+mcos(mθ)改进为cos(θ)+m,使模型容易收敛;ArcFace可以看做是针对AM-Softmax的改进版本,直接针对角度去加Margin(红线标记的部分),这样做的好处是角度距离比余弦距离在对角度的影响更加直接。ArcFace同时对特征和权重归一化,参考L2-Softmax加入了固定的特征尺度因子S。
如上所说,S会极大影响模型对于一个样本的分类的置信度。因此在不同的样本空间需要手动设置S,以使模型有好的分类表现。但是所有的论文中并未对S的设置进行详细的说明,也并未深入挖掘和量化S对于算法的影响。本文将尝试对S的合理设置进行理论的推导和说明。
2.the correlation between S and class number
- 预测概率 P
我们知道,算法对于一个样本属于它所在的类别的概率可以如下计算。
- Cross Entropy Loss:
其中:
N: 样本的数量或者batch size
yi: 样本 i 的标签,一个one hot 的向量,长度为 N, 如[0,0,1,0]
所以可以简化为:
一般的,在人脸识别算法中我们定义 Loss为:
其中红色为上面提到的预测概率 P。
同时,我们令
一般我们认为如果一个样本和对应的weights, 即 ground truth 的夹角越大越不可能为同一类,即,P 会随着夹角从0到90度从1变为0。据此,我们设定false_class_sum中夹角为90度,因此可以得出:
因此,false_class_sum = num_class - 1,这是一个常数。
我们从新定义 Loss 函数为:
其中,
如果我们想要在样本与ground truth 的在某个夹角时依然具有优化的趋势,那么我们另 L 关于 夹角的二阶导数为零,求得使得L变化趋势最大化, 即:
得到
我们可以自由设定这夹角,比如可以设定为45%,则可以得到和类别数量相关的理想的s的值:
- 形象的理解
在我的实践中,s的设置最直接影响的是训练的效率和最终的表现,如果 Scale 设置的过大,那么模型难以训练,具体表现就是学习很慢;而如果设置过小,那么loss和梯度很快趋于饱和,从而,模型虽然accracy不高,但是模型已经失去学习能力。在具体的训练实践中,class的number能直接影响Scale的选取,从而影响模型的效果。这里45度的选取,可以理解为一个阈值,即在这种角度下通过Scale的合理设置引导模型继续优化。
3.code of implementation
关于以上推导,我已经在对应的项目中进行实现。项目基于CosFace,使用CASIA-webface, 共有10575个class。实验证明,在默认 s = 30.0时,经过30个epoch时,Loss依然震荡,最终停止在12.99 。
而,根据上面公式的推导,增加自适应scale的计算代码:
Adaptive Scale
# core implementation of Cos face, using cuda scale = math.sqrt(2) * math.log(args.num_class - 1) MCP = MarginCosineProduct(512, args.num_class, s=scale).cuda()
设置 S 为 13.10
在12个epoch时loss已经下降到6.7。最后, loss下降到6.7。
References:
[1] F. Schroff, D. Kalenichenko, and J. Philbin. Facenet: A unified embedding for face recognition and clustering. In Proc. CVPR, 2015.
[2] Y. Sun, X. Wang, and X. Tang. Deep learning face representation by joint identification-verification. CoRR, abs/1406.4773, 2014.
[3] O. M. Parkhi, A. Vedaldi, and A. Zisserman. Deep face recognition. In BMVC, 2015
[4] A. Hermans, L. Beyer, and B. Leibe. In defense of the triplet loss for person re-identification. arXiv preprint arXiv:1703.07737, 2017
[5] Wu, C. Manmatha, R. Smola, A. J. and Krahenb uhl, P. 2017. Sampling matters in deep embedding learning. arXiv preprint arXiv:1706.07567
[6] W. Liu, Y. Wen, Z. Yu, M. Li, B. Raj, and L. Song. Sphereface: Deep hypersphere embedding for face recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition, 2017
[7] Zhang, K., Zhang, Z., Li, Z., Qiao, Y.: Joint face detection and alignment using multi-task cascaded convolutional networks. arXiv preprint, 2016
[8] Yu Liu, Hongyang Li, and Xiaogang Wang. 2017. Learning Deep Features via Congenerous Cosine Loss for Person Recognition. arXiv preprint arXiv:1702.06890, 2017
[9] M. Jaderberg, K. Simonyan, A. Zisserman, and K. Kavukcuoglu. Spatial transformer networks. In NIPS, 2015.
[10] W. Liu, Y. Wen, Z. Yu, and M. Yang. Large-margin softmax loss for convolutional neural networks. In ICML, 2016.
[11] F. Wang, W. Liu, H. Liu, and J. Cheng. Additive margin softmax for face verification. In arXiv:1801.05599, 2018.
[12] CosFace: Large Margin Cosine Loss for Deep Face Recognition
[13] Deng, J., Guo, J., Zafeiriou, S.: Arcface: Additive angular margin loss for deep face recognition. In: Arxiv preprint. 2018
[14] Y. Wen, K. Zhang, Z. Li, and Y. Qiao. A discriminative feature learning approach for deep face recognition. In ECCV, 2016.
[15] Y. Liu, H. Li, and X. Wang. Rethinking feature discrimination and polymerization for large-scale recognition. arXiv:1710.00870, 2017.