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)
,按照一个公式计算出修正后的框的位置和特征点坐标。
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
标准化,得到最终的特征向量
数据库的初始化具体执行的过程就是:
1、遍历数据库中所有的图片。
2、检测每个图片中的人脸位置。
3、利用mtcnn
将人脸截取下载。
4、将获取到的人脸进行对齐。
5、利用facenet
将人脸进行编码。
6、将所有人脸编码的结果放在一个列表中,也即 self.known_face_encodings=[]
;同时也会将它们的名字放入列表self.known_face_names=[]
中,这两个列表中的相同位置的元素都是对应的,方便后面根据对应的编码的索引找到名字,然后实时显示在检测结果中。
第6步得到的列表就是【已知的所有人脸】
的特征列表,在之后获得的实时图片中的人脸都需要与已知人脸进行比对,这样我们才能知道谁是谁。
1、人脸的截取与对齐
2、利用facenet
对矫正后的人脸进行编码
3、将实时图片中的人脸特征与数据库中的进行比对
这个比对过程是这样的:
1、获取实时图片中的每一张人脸特征。
2、将每一张人脸特征和数据库中所有的人脸进行比较,计算距离。如果距离小于门限值,则认为其具有一定的相似度。
3、获得每一张人脸在数据库中最相似的人脸的序号。
4、判断这个序号对应的人脸距离是否小于门限,是则认为人脸识别成功,他就是这个人。
附上参考工程:
https://blog.csdn.net/weixin_44791964/article/details/103697409
https://github.com/bubbliiiing/keras-face-recognition