深度学习算法二:人脸检测与识别(mtcnn+facenet)思路理解小记录

一、人脸检测流程(mtcnn)

1、首先整个模型一共是有三个网络,按顺序依次是P-net,R-net,O-net

2、在传入P-net之前,我们会对图片进行预处理,主要是将一张图片转换成多个尺寸,然后将多个尺寸都传入到P-net中,这样可以适应不同大小的人脸检测

3、P-net将一张图片分成了h/2*w/2个网格,输出有两部分,会被放入同一个列表中:[(1,h/2,w/2,2),(1,h/2,w/2,4)],前一个是h/2*w/2(不是人脸的概率,是人脸的概率)这样的,第二部分是h/2*w/2个框的左上角和右下角两个位置的偏移量,每个点有(dx,dy)两个偏移量,所以两个点一共四个值,也即(dx1,dy1,dx2,dy2)

4、P-net出来之后,会再经过一个后处理模块,主要作用是:根据设置的阈值筛选掉一些框,然后根据网格在(h/2*w/2)个网格中的位置以及预测的偏移量,由一个公式计算出在原图中的实际位置;还会根据之前预测的是人脸的概率得出score,这样最后的输出就是(n_p,x1,y1,x2,y2,score),这里的n代表框的个数,是小于h/2*w/2的,因为后处理是设置了阈值,会去掉一部分框

5、同理,我们按照P-net后处理得到的框的信息,对图片进行截取,也即把每一个认为有人脸的区域单独截取出来,每一个都作为一张图片然后传入R-net,得到的输出也是(n_r_1,2)和(n_r_1,4)

6、然后再经过后处理,它会根据预测得到的(dx1,dy1,dx2,dy2),按照一个新的公式计算出修正后的框的位置,并且会设置一个新的阈值,再次筛选掉一些预测框,最后的输出形状是(n_r_2_,x1,y1,x2,y2,score)

7、R-net后处理之后的输出,会再传入O-net,它的输出是:(x1,y1,x2,y2,sc,pts0,pts1,pts2,pts3,pts4,pts5,pts6,pts7,pts8,pts9),也即(n_o_1,15),包括位置,score,五个特征点坐标

8、最后再经过后处理模块,根据预测的(dx1,dy2,dx2,dy2),按照一个公式计算出修正后的框的位置和特征点坐标。

二、人脸编码流程(facenet)

1、输入一张人脸图片,一般是人脸检测之后通过位置信息抠出来的人脸,并且经过了仿射变换,变成正脸

2、通过深度学习网络提取特征,这个网络也就是facenet,它的主干网络就是Inception-ResNetV1,一共有四个重要的部分:stem、 Inception-resnet-A、Inception-resnet-B、Inception-resnet-C;后面三个模块其实都是Inception和resnet结合的变种残差网络。它们在Inception-ResNetV1中会作为一个block被使用多次,例如5个连续的Inception-resnet-A放在一块使用,因为是残差网络,所以输入和输出是可以直接相加的,因此可以连续使用5个Inception-resnet-A;同理后面两个会被连续调用10次和5次。最后再经过一个全连接dense层,输出(128,)的特征向量,这个特征向量是进行人脸识别的关键,因为相似的人脸它们的特征向量在欧式空间的距离是非常小的,我们就可以通过这个距离小于某个阈值来判断人脸。

3、对得到的(128,)的特征向量进行L2标准化,得到最终的特征向量

三、人脸识别流程(mtcnn+facenet)

1)、数据库初始化:

数据库的初始化具体执行的过程就是:

1、遍历数据库中所有的图片。
2、检测每个图片中的人脸位置。
3、利用mtcnn将人脸截取下载。
4、将获取到的人脸进行对齐。
5、利用facenet将人脸进行编码。
6、将所有人脸编码的结果放在一个列表中,也即 self.known_face_encodings=[];同时也会将它们的名字放入列表self.known_face_names=[]中,这两个列表中的相同位置的元素都是对应的,方便后面根据对应的编码的索引找到名字,然后实时显示在检测结果中。

第6步得到的列表就是【已知的所有人脸】的特征列表,在之后获得的实时图片中的人脸都需要与已知人脸进行比对,这样我们才能知道谁是谁。

2)、实时图片的处理

1、人脸的截取与对齐
2、利用facenet对矫正后的人脸进行编码
3、将实时图片中的人脸特征与数据库中的进行比对

这个比对过程是这样的:
1、获取实时图片中的每一张人脸特征。
2、将每一张人脸特征和数据库中所有的人脸进行比较,计算距离。如果距离小于门限值,则认为其具有一定的相似度。
3、获得每一张人脸在数据库中最相似的人脸的序号。
4、判断这个序号对应的人脸距离是否小于门限,是则认为人脸识别成功,他就是这个人。

附上参考工程:

https://blog.csdn.net/weixin_44791964/article/details/103697409

https://github.com/bubbliiiing/keras-face-recognition

猜你喜欢

转载自blog.csdn.net/qq_39507748/article/details/109983717