人脸检测和人脸识别原理 (4)

  这是一个非常简单的定义。不过还有一个问题没有解决,那就是如何确定每个类别的中心$c_{yi}$呢?从理论上来说,类别$y_{i}$的最佳中心应该是它对应的所有图片的特征的平均值。但如果采取这样的定义,那么在每一次梯度下降时,都要对所有图片计算一次$c_{yi}$,计算复杂度就太高了。针对这种情况,不妨近似一处理下,在初始阶段,先随机确定$c_{yi}$,接着在每个batch内,使用$L_i=\|f(x_i)-c_{yi}\|_2^2$对当前batch内的$c_{yi}$ 也计算梯度,并使用该梯度更新$c_{yi}$ 。此外,不能只使用中心损失来训练分类模型,还需要加入Softmax损失,也就是说,最终的损失由两部分构成,即$L = L_{softmax}+\lambda L_{center}$,其中$\lambda $是一个超参数。

  最后来总结使用中心损失来训练人脸模型的过程。首先随机初始化各个中心$c_{yi}$,接着不断地取出batch进行训练,在每个batch中,使用总的损失$L$,除了使用神经网络模型的参数对模型进行更新外,也对$c_{yi}$进行计算梯度,并更新中心的位置。

  中心损失可以让训练处的特征具有“内聚性”。还是以MNIST的例子来说,在未加入中心损失时,训练的结果不具有内聚性。再加入中心损失后,得到的特征如下图所示。 

   

人脸检测和人脸识别原理

从图中可以看出,当中心损失的权重λ越大时,生成的特征就会具有越明显的“内聚性” 。

五、使用特征设计应用

当提取出特征后,剩下的问题就非常简单了。因为这种特征已经具有了相同人对应的向量的距离小,不同人对应的向量距离大的特点,接下来,一般的应用有以下几类:

人脸验证(Face Identification)。就是检测A、B是否属于同一个人。只需要计算向量之间的距离,设定合适的报警阈值(threshold)即可。

人脸识别(Face Recognition)。这个应用是最多的,给定一张图片,检测数据库中与之最相似的人脸。显然可以被转换为一个求距离的最近邻问题。

人脸聚类(Face Clustering)。在数据库中对人脸进行聚类,直接用K-means即可。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspjwd.html