首先下载facenet网络facenet github,然后打开src文件。 重要的文件基本上都在这里
其中,align文件夹下有面部检测、定位和裁剪。 打开对齐
其中的align_dataset_mtcnn.py是执行面部检测、然后修剪的程序。
您可以通过打开detect_face.py文件来找到此函数。
可知det1.npy、det2.npy、det3.npy是面部检测网络中的权重。
安装和配置Facenet环境
这是我的facenet解压缩位置e :hs yinface net-mastersrc
setpythonpath=e :hs yinface net-mastersrc
接下来可以运行面部检测程序。 我使用的数据集是LFW lfw数据集
因为程序中的神经网络使用的是谷歌的“inception resnet v1”网络模型,所以这是输入该模型时的160*160的图像,而下载的LFW数据集为250*250像素
将lfw数据放置在e :hs yinface net-masterdatalfwraw中,同时创建新的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:hsyinfacenet-master目录,然后输入命令。
python srcalignalign _ dataset _ mt CNN.py data/lfw/raw data/lfw/lfw _ 160-- image _ size 160-- margin 32 DD
评价预训练模型的精度
然后去官网下载训练过的模型:
将模型放置在指定文件夹中:输入以下命令: python srcvalidate _ on _ lfw.py datalfwlfw _ 160 srcmodels 2018 04 08-102900结果:
与人脸的对比
1.Facenet可以直接比较人脸通过其网络映射后的欧式距离
可执行文件为facenet-mastersrccompare.py;
选择的是两个不同的人的脸,第一张如下。
第二张呢
执行:
python srccompare.py srcmodels2018 04 08-102900 datalfw _ lfw _ 160aaron _ eckhart _ Aron _ eckhart meck hart
结果如上。 这两张的距离是1.4144。 接下来,我们测试了两张人脸:
选择了第一张和第二张
这两张图的距离是0.5886,所以同一个人的脸的距离越小。 可以设定阈值,当两张图像大于一定值时判断他们不是同一个人