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

  图中框的大小各有不同,除了框回归的影响外,主要是因为将图片金字塔的各个尺度都使用P-Net计算了一遍,因此形成了大小不同的人脸框。P-Net的结果还是比较粗糙的,所以接下来又使用R-Net进一步调优。R-Net的网络结构如下图所示。

   

人脸检测和人脸识别原理

  这个结构与之前的P-Net非常类似,P-Net的输入是12x12x3的图像,R-Net是24x24x3的图像,也就是说,R-Net判断24x24x3的图像中是否含有人脸,以及预测关键点的位置。R-Net的输出和P-Net完全一样,同样有人脸判别、框回归、关键点位置预测三部分组成。

  在实际应用中,对每个P-Net输出可能为人脸的区域都放缩到24x24的大小,在输入到R-Net中,进行进一步的判定。得到的结果如下图所示:

   

人脸检测和人脸识别原理

  显然R-Net消除了P-Net中很多误判的情况。

  进一步把所有得到的区域缩放成48x48的大小,输入到最后的O-Net中,O-Net的结构同样与P-Net类似,不同点在于它的输入是48x48x3的图像,网络的通道数和层数也更多了。O-Net的网络的结构如下图所示:

   

人脸检测和人脸识别原理

  检测结果如下图所示:

   

人脸检测和人脸识别原理

  从P-Net到R-Net,最后再到O-Net,网络输入的图片越来越大,卷积层的通道数越来越多,内部的层数也越来越多,因此它们识别人脸的准确率应该是越来越高的。同时,P-Net的运行速度是最快的,R-Net的速度其次,O-Net的运行速度最慢。之所以要使用三个网络,是因为如果一开始直接对图中的每个区域使用O-Net,速度会非常慢慢。实际上P-Net先做了一遍过滤,将过滤后的结果再交给R-Net进行过滤,最后将过滤后的结果交给效果最好但速度较慢的O-Net进行判别。这样在每一步都提前减少了需要判别的数量,有效降低了处理时间。

  最后介绍MTCNN的损失定义和训练过程。MTCNN中每个网络都有三部分输出,因此损失也由三部分组成。针对人脸判别部分,直接使用交叉熵损失,针对框回归和关键点判定,直接使用L2损失。最后这三部分损失各自乘以自身的权重再加起来,就形成最后的总损失了。在训练P-Net和R-Net时,更关心框位置的准确性,而较少关注关键点判定的损失,因此关键点判定损失的权重很小。对于O-Net,关键点判定损失的权重较大。

二、使用深度卷积网络提取特征

  经过人脸检测和人脸对齐两个步骤,就获得了包含人脸的区域图像,接下来就要进行人脸识别了。这一步一般是使用深度卷积网络,将输入的人脸图像转换为一个向量的表示,也就是所谓的“特征”。

  如何针对人脸来提取特征?可以先来回忆VGG16的网络结构(见微调(Fine-tune)原理),输入神经网络的是图像,经过一系列卷积计算后,全连接分类得到类别概率。

  在通常的图像应用中,可以去掉全连接层,使用卷积层的最后一层当作图像的“特征”。但如果对人脸识别问题同样采用这种方法,即使用卷积层最后一层做为人脸的“向量表示”,效果其实是不好的。这其中的原因和改进方法是什么?在后面会谈到,这里先谈谈希望这种人脸的“向量表示”应该具有哪些性质。

  在理想的状况下,希望“向量表示”之间的距离可以直接反映人脸的相似度

  对于同一个人的两张人脸图像,对应的向量之间的欧几里得距离应该比较小。对于不同人的两张人脸图像,对应的向量之间的欧几里得距离应该比较大。

  例如,设人脸图像为$x_{1}$,$x_{2}$,对应的特征为$f(x_{1})$,$f(x_{2})$,当$x_{1}$,$x_{2}$对应是同一个人的人脸时,$f(x_{1})$,$f(x_{2})$的距离$\left \| f(x_{1}),f(x_{2}) \right \|$应该很小,而当$x_{1}$,$x_{2}$是不同人的人脸时,$f(x_{1})$,$f(x_{2})$的距离$\left \| f(x_{1}),f(x_{2}) \right \|$应该很大。

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

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