什么是mtcnn和facenet
1、mtcnn
MTCNN,英文全称是Multi-task convolutional neural network,中文全称是多任务卷积神经网络,该神经网络将人脸区域检测与人脸关键点检测放在了一起。总体可分为P-Net、R-Net、和O-Net三层网络结构。
2、facenet
谷歌人脸检测算法,发表于 CVPR 2015,利用相同人脸在不同角度等姿态的照片下有高内聚性,不同人脸有低耦合性,提出使用 cnn + triplet mining 方法,在 LFW 数据集上准确度达到 99.63%。
通过 CNN 将人脸映射到欧式空间的特征向量上,实质上:不同图片人脸特征的距离较大;通过相同个体的人脸的距离,总是小于不同个体的人脸这一先验知识训练网络。
测试时只需要计算人脸特征EMBEDDING,然后计算距离使用阈值即可判定两张人脸照片是否属于相同的个体。
简单来讲,在使用阶段,facenet即是:
1、输入一张人脸图片
2、通过深度学习网络提取特征
3、L2标准化
4、得到128维特征向量。
mtcnn原理和facenet原理可以参考我的另外两篇博客。
睿智的目标检测13——Keras搭建mtcnn人脸检测平台
神经网络学习小记录32——facenet详解及其keras实现
实现流程
整体的代码摆放如下:
一、数据库的初始化
face_dataset里面装的是想要识别的人脸,比如说obama.jpg指的就是奥巴马。
数据库中每一张图片对应一个人的人脸,图片名字就是这个人的名字。
数据库初始化指的是人脸数据库的初始化。
想要实现人脸识别,首先要知道自己需要识别哪些人脸。
这就是数据库的一个功能,将想要检测到的人脸放入数据库中,并进行编码。
数据库的初始化具体执行的过程就是:
1、遍历数据库中所有的图片。
2、检测每个图片中的人脸位置。
3、利用mtcnn将人脸截取下载。
4、将获取到的人脸进行对齐。
5、利用facenet将人脸进行编码。
6、将所有人脸编码的结果放在一个列表中。
第6步得到的列表就是已知的所有人脸的特征列表,在之后获得的实时图片中的人脸都需要与已知人脸进行比对,这样我们才能知道谁是谁。
二、实时图片的处理
1、人脸的截取与对齐
利用mtcnn我们可以获得一张图片中人脸的位置,但是我们截取下来的人脸是这样的:
我们可以很明显的看出来人脸是歪着的,我们如果人脸可以正过来,那么将对人脸的特征提取非常有好处。
下面这张图看着就正多了。
常见的对齐方法有
1、通过双眼坐标进行旋正
2、通过矩阵运算求解仿射矩阵进行旋正
这里简单讲讲通过双眼坐标进行旋正。
利用双眼坐标进行旋正需要用到两个参数,如图所示分别是:
1、眼睛连线相对于水平线的倾斜角。
2、图片的中心。
利用这两个参数我们可以知道需要图片需要旋转的角度是多少,图片旋转的中心是什么。
2、利用facenet对矫正后的人脸进行编码
facenet是一个人脸特征获取的模型,将第1步获得的对齐人脸传入facenet模型就可以得到每个人脸的特征向量。
3、将实时图片中的人脸特征与数据库中的进行比对
这个比对过程是这样的:
1、获取实时图片中的每一张人脸特征。
2、将每一张人脸特征和数据库中所有的人脸进行比较,计算距离。如果距离小于门限值,则认为其具有一定的相似度。
3、获得每一张人脸在数据库中最相似的人脸的序号。
4、判断这个序号对应的人脸距离是否小于门限,是则认为人脸识别成功,他就是这个人。
————————————————
版权声明:本文为CSDN博主「Bubbliiiing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44791964/article/details/103697409