首先下载facenet网络facenet github,之后打开src文件,重要的文件基本在这里,
其中align文件夹下面是人脸检测、对齐与裁剪。打开align
其中那个align_dataset_mtcnn.py 就是运行人脸检测、对其与裁剪的那个程序。
打开detect_face.py文件,可以发现这个函数:
可以发现det1.npy,det2.npy,det3.npy是人脸检测网络中的权重。
安装和配置Facenet环境
这是我的facenet解压的位置 E:\hsyin\facenet-master\src
set PYTHONPATH=E:\hsyin\facenet-master\src
接下来可以运行人脸检测程序,我用的数据集是LFW lfw数据集
因为程序中神经网络使用的是谷歌的“inception resnet v1”网络模型,这个模型的输入时160*160的图像,而我们下载的LFW数据集是250*250限像素的图像,所以需要进行图片的预处理。
将lfw的数据放到 E:\hsyin\facenet-master\data\lfw\raw,同时新建一个lfw_160文件夹
遇到一个问题就是tensorflow版本的问题
max_axis = tf.reduce_max(target, axis, keepdims=True)
这是facenet上的代码:
但是我的版本的代码应该是
max_axis = tf.reduce_max(target, axis,keep_dims=True)
将上面改正就不会报错了
打开cmd将位置切换到E:\hsyin\facenet-master目录下,输入命令:
python src\align\align_dataset_mtcnn.py data/lfw/raw data/lfw/lfw_160 --image_size 160 --margin 32
data/lfw/raw是lfw的原始图片位置,data/lfw/lfw_160是生成图片的位置。
评估预训练模型的准确率
接下来去官网上下载训练好的模型:
Python src\validate_on_lfw.py data\lfw\lfw_160 src\models\20180408-102900
结果:
人脸对比
1. Facenet可以直接对比2个人脸经过它的网络映射之后的欧式距离;
运行程序为facenet-master\src\compare.py;
选用的是两个不同的人脸,第一张为:
第二张为:
运行:
python src\compare.py src\models\20180408-102900 data\lfw\lfw_160\Aaron_Eckhart\Aaron_Eckhart_0001.pngdata\lfw\lfw_160\Aaron_Guiel\Aaron_Guiel_0001.png
接下来试验两张人脸的结果:
选用的是第一张和第二张
这两张图的距离为0.5886,所以相同的人脸的距离越小。你可以设置一个阈值,当两张图片大于一定值时判断他们不是同一个人