人脸识别(Facenet)

人脸识别是目前应用非常广泛的一种生物识别技术,与其他生物识别技术(指纹识别,掌形识别,眼虹膜识别和声音识别)相比,人脸识别具有以下优势:


  • 其他每种生物识别方法都需要一些人的配合动作,而人脸识别不需要被动配合,可以自动用在隐蔽的场合,如公安部门监控行动;

  • 当记录一个企图登录的人的生物记录时,只有人脸能更直观,更方便的核查该人的身份;

由于与传统的生物识别技术相比,人脸识别具有更为简便、准确、经济及可扩展性良好等众多优势,可广泛应用于安全验证、监控、控制等各个方面。 人脸相关的任务有以下几种:


  • 人脸检测(将图片中包含的人脸进行初步定位,以及关键点如眼睛、鼻子、嘴巴等更精细的定位,文章封面即为典型人脸检测结果);

  • 人脸跟踪(视频中跟踪人脸位置变化);

  • 人脸验证(输入两张人脸,判定是否属于同一人);

  • 人脸识别(输入一张人脸,判断其属于人脸数据库全部记录中具体哪一人);

  • 人脸聚类(输入一批人脸,将属于同一人的自动归为一类);


准备工作




1. 确保已安装TensorFlow;


2. 确保已安装Anaconda集成环境或者在python下安装以下依赖;


人脸识别(Facenet)_第1张图片


3. 更新Sklearn至最新版本,在Anaconda prompt内输入以下命令:


pip install –U scikit-learn

安装界面如下:


人脸识别(Facenet)_第2张图片




下载Facenet源码工程



1. 源码下载地址:https://github.com/davidsandberg/facenet.git


2. 将下载的源码解压,如图所示:


人脸识别(Facenet)_第3张图片



安装和配置Facenet环境




1. 在自己电脑对应的Anaconda3\Lib\site-packages目录下,新建facenet文件夹,本人的目录如下:


人脸识别(Facenet)_第4张图片


2. 然后,将facenet-master\src目录下的全部文件复制到上面新建的facenet文件夹内;


facenet-master\src目录下的全部文件信息如下:


人脸识别(Facenet)_第5张图片


复制到facenet目录内,如下:


人脸识别(Facenet)_第6张图片


3. 最后,在Anaconda Prompt内输入import facenet,不会报错即可,如下:


人脸识别(Facenet)_第7张图片



 下载LFW数据集



1. LFW数据集是由美国马萨诸塞大学阿姆斯特分校计算机视觉实验室整理的人脸检测数据集,是评估人脸识别算法效果的公开测试数据集,全称为带标签的自然人脸数据库(Labeled Faces in the Wild);


2. LFW数据库内每张图片命名方式为“lfw/name/name_xxxx.jpg”,这里“xxxx”是前面补零的四位图片编号。例如,前美国总统乔治•W•布什的第10张图片为“lfw/George_W_Bush/George_W_Bush_0010.jpg”。


3. LFW数据库 总共有 13233 张 JPEG 格式图片,属于 5749 个不同人。每张图片尺寸都是 250x250;


4. 数据库下载地址:http://vis-www.cs.umass.edu/lfw/lfw.tgz


5. 下载完成后,把数据集解压到facenet\data\lfw\raw下面,如下:


人脸识别(Facenet)_第8张图片



对LFW数据集进行预处理



1. 在下载的数据集内新建一个空文件夹,命名为“lfw_160”;


人脸识别(Facenet)_第9张图片


原图像大小为250*250,如下图:


人脸识别(Facenet)_第10张图片


2. 我们需要将待检测所使用的数据集校准为和预训练模型所使用的数据集大小一致(160*160),转换后的数据集存储在lfw_160文件夹内;


3. 设置环境变量,在计算机-->属性-->高级系统设置-->环境变量 中,新建PYTHONPATH,键入


C:\ProgramFiles\Anaconda3\Lib\site-packages\facenet,如图所示;


人脸识别(Facenet)_第11张图片


4. 在cmd命令行下面,输入set,查看设置情况,如下:


人脸识别(Facenet)_第12张图片

人脸识别(Facenet)_第13张图片


5. 打开Anaconda Prompt切换到facenet目录,输入如下命令进行校准:


python src\align\align_dataset_mtcnn.py --help
人脸识别(Facenet)_第14张图片


6. 再输入如下命令:


python src\align\align_dataset_mtcnn.py data/lfw/rawdata/lfw/lfw_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction0.25
人脸识别(Facenet)_第15张图片


经过20-30分钟,图片转换结束,如下:


人脸识别(Facenet)_第16张图片


7. 校准后,发现图像大小变成160*160;


人脸识别(Facenet)_第17张图片



下载训练好的网络模型



1. facenet提供了两个预训练模型,分别是基于CASIA-WebFace和MS-Celeb-1M人脸库训练的,如下:




2. 第一个模型20170511-185253下载地址:


https://drive.google.com/file/d/0B5MzpY9kBtDVOTVnU3NIaUdySFE/edit


第二个模型20170512-110547下载地址:


https://drive.google.com/file/d/0B5MzpY9kBtDVZ2RpVDYwWmxoSUk/edit


3. 本人使用的是基于数据集CASIA-WebFace采用Inception ResNet v1神经网络结构训练好的模型。模型存储在Google网盘,需要。推荐大家用Lantern;


4. 把下载的文件解压到src\models\目录下面,如下所示:


人脸识别(Facenet)_第18张图片


5. 程序也下载了,测试数据集LFW也有了,模型也有了,接下来就是评估模型的准确率;



评估预训练模型的准确率



1. 在cmd命令行或者Anaconda Propmt下定位到facenet文件夹下;


2. 输入以下命令:


Python src\validate_on_lfw.py data\lfw\lfw_160 src\models\20170511-185252\20170511-185252


预测中,结果如图:


人脸识别(Facenet)_第19张图片



人脸对比



1. Facenet可以直接对比2个人脸经过它的网络映射之后的欧式距离;


运行程序为facenet-master\src\compare.py;


2. 在compare.py所在目录下放入要对比的人脸图像43.jpg和44.jpg(完全不同的2人脸图);


人脸识别(Facenet)_第20张图片


3. 在Anaconda Prompt窗口使用cd进到compare.py所在路径;


4. 输入如下命令:


python compare.py models\20170511-185253\20170511-185253 43.jpg 44.jpg

左图为43.jpg,右图为44.jpg:


人脸识别(Facenet)_第21张图片 人脸识别(Facenet)_第22张图片


运行结果如下:


人脸识别(Facenet)_第23张图片


5. 从LFW数据集内随机选取同一人的2人脸图;


人脸识别(Facenet)_第24张图片


复制到与compare.py同级的目录下:


人脸识别(Facenet)_第25张图片


6. 在Anaconda Prompt内输入如下命令:


python compare.py models\20170511-185253\20170511-185253 Cate_Blanchett_0001.png  Cate_Blanchett_0002.png

运行结果如图:


人脸识别(Facenet)_第26张图片






你可能感兴趣的:(TensorFlow,深度学习,人脸识别)