这篇文章介绍一下人脸识别方向的综述。
人脸系统流程:
人脸框架
损失函数和网络框架
loss
早在2015谷歌提出的FaceNet使用困难三元组损失已经取得了很好的精度,然而,训练的数据量太大, 一般企业或者实验室根本承受不了算力和资源成本,同时困难三元组训练时loss可能会因为选样本对的问题变得不稳定。2016年center loss 和他的变体被提出,使用聚类和分类相结合的方式提取特征信息,用于判别,然而,center loss 在分类层会需要大量的GPU算力资源,同时也需要每个ID类别的样本量足够多同时各个样本之间数据均匀,这对于人脸检测数据集来说都无法做到。,之后人们又提出了角距离计算loss,angular/cosine-margin-based Loss将人脸的特征映射到球体流型上,诸如L-Softmax A-Softmax 以及后来的ArcFace,CosineFace对损失函数做的改进。精度得到了进一步的提高,然而有人提出,这些基于角距离度量的损失相比于欧式距离度量的损失在数据集不纯净的情况下效果反而不好,人脸数据集其实还是比较难保证数据集时纯净的,同时这种算法从本质上还是没有脱离分类问题,在分类层会需要大量的GPU算力资源,同时也需要每个ID类别的样本量足够多同时各个样本之间数据均匀这些问题都没有得到有效解决。
对于Softmax Loss对应的权重和学习得到的特征向量可以通过归一化的形式变得更好,具体公式如下
W = W ∣ ∣ W ∣ ∣ , x = α x ∣ ∣ x ∣ ∣ W = \frac{W}{||W||}, x = \alpha\frac{x}{||x||} W=∣∣W∣∣W,x=α∣∣x∣∣x
这里的 α \alpha α时区别于归一到1(和权重归一),归一到特定的某个数值。这一点很重要。如果都真的归一到1的话,有论文最后得到的训练loss可能会比较大。
当然后面有人对特征向量做了一下改进。
x = α x − μ √ σ 2 x = \alpha\frac{x-\mu}{\surd\sigma^2} x