参考这两篇博客:
-
https://blog.csdn.net/u013841196/article/details/89921479
-
https://blog.csdn.net/qq_34914551/article/details/86515184?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
Insightface:
Centre loss主要惩罚了深层特征与其相应的欧几里得空间类中心之间的距离,以实现类内紧凑性。
SphereFace假设在最后一个完全连接的层中的线性变换矩阵可以用角空间中的类中心来表示,并且以乘法方式惩罚深度特征与其相应的权重之间的角度。
DCNN特征和最后一个完全连接的层之间的点积等于特征和权重归一化之后的余弦距离。利用余弦函数(arc-cosine function)计算人脸特征和目标权重之间的夹角。然后,在目标角度上增加一个附加的角余量,通过余弦函数再次得到目标logit。最后,用一个固定的特征范数重新缩放所有logits,并且后续步骤与softmax loss中的步骤完全相同。
传统的softmax loss损失函数:
这里做了一个变换,将
变成了
就是向量内积的结果是向量各自的模相乘,在乘上向量夹角的cos值。那么向量相乘得到的结果其实就是xi对应在第j类的夹角。
然后使用L2正则化处理Wj使得||Wj||=1,L2正则化就是将Wj向量中的每个值都分别除以Wj的模,从而得到新的Wj,新的Wj的模就是1,实际上是个方向向量。再乘以一个scale参数s,这就获得了logit,再经过softmax获得probability。
并且将cos(θyi)用cos(θyi+m)替代,这部分是ArcFace的核心
—————————————————————————
那么insigface对使用了cos(m1θ+m2)的约束,如果
对于cos(m1θ+m2)+m3,其泰勒展开式
m1:(二阶约束)
m2:(一阶约束)
m3:(0阶约束)
对于m1、m2、m3约束能力是逐步下降的,因为m1中,m是x^2的系数,m2中,m是x的系数,m3中,m不是x的系数,调整不同的值来看效果:
从结果可以看出,m1、m2、m3一起约束会有比较好的效果。