小学期的实训题目是实验室进出人员身份识别和记录学习时间,那么基本功能是实现人脸识别。人脸识别其实又分为两部分,人脸检测和人脸识别,在本次博客中,人脸检测使用MTCNN模型,然后利用facenet进行人脸识别。
Github链接:https://github.com/ALittleLeo/FaceRcognization/tree/master
觉得有用的话请打个星!
目录
MTCNN,Multi-task convolutional neural network(多任务卷积神经网络)
利用MTCNN网络把人脸数据图库转换为人脸特征库(embedding库)
系统实现流程
1、建立人脸数据图库
2、搭建MTCNN网络
3、利用MTCNN网络把人脸数据图库转换为人脸特征库(embedding库)
4、使用MTCNN网络提取待检测的人脸图片的特征
5、使用facenet比较待识别的人脸和人脸库特征,绘制图片,得到最终结果
项目目录结构
打开FaceNet Github地址: https://github.com/davidsandberg/facenet,把我们需要的文件拷贝到自己独立的工程中,(1)align文件夹,(2)facenet.py文件
目录说明:
- align文件夹中包含三个mtcnn要用到的模型文件,以及搭建mtcnn网络的文件
detect_face.py
,这里面的东西在facenet的项目中的都可以找到 - dataset文件夹中主要存放数据,包括images(人脸数据图库),emb(人脸特征库),test_images(测试图片)
- models文件夹中存放facenet预训练模型(链接: https://pan.baidu.com/s/1l16K7EktS6EO4a4pVNXvsQ 提取码: rvtv )
- utils是工具类文件夹,用于文件读写,图片相关操作。
- predict.py是进行人脸识别的入口
- create_dataset.py用于将人脸数据图库转换为人脸特征库
建立人脸数据图库
人脸图片放在dataset/images文件夹下,每个子目录放同一个人的照片,以子目录名作为人名,上图所示胡歌和周杰伦
MTCNN,Multi-task convolutional neural network(多任务卷积神经网络)
正如上图所示,该MTCNN由3个网络结构组成(P-Net,R-Net,O-Net)。
Proposal Network (P-Net):该网络结构主要获得了人脸区域的候选窗口和边界框的回归向量。并用该边界框做回归,对候选窗口进行校准,然后通过非极大值抑制(NMS)来合并高度重叠的候选框。
Refine Network (R-Net):该网络结构还是通过边界框回归和NMS来去掉那些false-positive区域。
只是由于该网络结构和P-Net网络结构有差异,多了一个全连接层,所以会取得更好的抑制false-positive的作用。
Output Network (O-Net):该层比R-Net层又多了一层卷基层,所以处理的结果会更加精细。作用和R-Net层作用一样。但是该层对人脸区域进行了更多的监督,同时还会输出5个地标(landmark)。
(详细介绍等后面再写