FaceNet源码使用方法和讲解细节补充

表示感谢:https://blog.csdn.net/u013044310/article/details/79556099史上最全的FaceNet源码使用方法和讲解(一)(附预训练模型下载)和https://blog.csdn.net/u013044310/article/details/80481642史上最全的FaceNet源码使用方法和讲解(二),学习操练之后的经验分享在此。

首先 facenet源代码的使用是有规律的。拿图片处理程序align_dataset_mtcnn.py来说,如下图:
FaceNet源码使用方法和讲解细节补充
所有带–的参数都是有默认值的,不是必须输入的,如果要改此默认值,那参数输入的时候要加–。不带–的参数都是必须输入的,记得参数之间加空格。路径经过测试,左右斜杠不分(D:/Tensorflow/facenet/data/detetpicture和windows路径D:\Tensorflow\facenet\data\detetpicture都是对的)。
其次是程序的放置位置问题。我跟参考博主(开头两篇链接)的用法不同,他是直接用的一个集成软件,我是基于自己在windows下搭建的平台(见我的博文“python集成tensorflow和opencv运行于windows 10”),一切指令都在cmd下输入运行,对于环境变量和参数只能自己琢磨。下载了github上的facenet源代码和lfw数据集,又根据参考博文下载了简化版的facenet源码(其实就是原版facenet代码中的src文件夹下的所有)和他提供的预训练模型。如下图:
FaceNet源码使用方法和讲解细节补充
FaceNet源码使用方法和讲解细节补充
此次练习主要用到compare.py,validate_on_lfw.py,classifier.py,train_tripletloss.py以及align文件夹中的align_dataset_mtcnn.py,没用到的也不能删,有包含关系。
预训练模型包含的文件如下图:
FaceNet源码使用方法和讲解细节补充
FaceNet源码使用方法和讲解细节补充
上图中的.pb文件是跨平台用的最终模型文件,这里用不上(书中的模型没有此文件,可能是参考博主自己加进去的吧),继续训练和识别用ckpt文件就行了。新建facenet文件夹,把精简版的facenet全部考进来,同时把预训练模型20170512-110547也考进来,位置如下图(Tensorflow只是我为了方便查找,随便建的一个文件夹):
FaceNet源码使用方法和讲解细节补充
注意到我的里面多了align_dataset_mtcnn.py文件,那是从align文件夹考过来的。我运行python代码都是通过cmd进入文件所在目录运行的,align_dataset_mtcnn.py头部如下图所示:
FaceNet源码使用方法和讲解细节补充
其中用到了facenet文件夹中的facenet.py文件和align文件夹下面的detect_face.py文件,如果在align文件目录运行,那这两个地方都会报错,所以要直接考到facenet文件夹里,同级目录里的文件引用不用输入路径,下一级文件目录中的如align文件夹用align.表示,就不会有问题了。
另外classifier.py需要的图片大小也要是160160大小的,需要先裁剪分类图片。报错误的操作如下图:
FaceNet源码使用方法和讲解细节补充
test.pkl是输出SVM分类的记录文件,很重要,不用提前建此文件,test也是自己命名的,会自动生成。处理图片后,正确操作如下图:
FaceNet源码使用方法和讲解细节补充处理图片忘了更改–image_size 160 --margin 32 --random_order,裁剪输出了182
182大小的图片(可能会对后面有影响)。
图片是自己建的,按参考博文来的,9个人,没人20张照片,放在data文件夹中,如下图:
FaceNet源码使用方法和讲解细节补充
test_160文件夹需要提前建好,程序输出后,其内部如下图:
FaceNet源码使用方法和讲解细节补充
FaceNet源码使用方法和讲解细节补充
有了test.pkl,再弄几张自己的图片,就可以开始分类应用了。
FaceNet源码使用方法和讲解细节补充
自己弄来的图片需要建立在文件夹中,直接图片不行,如下图:
FaceNet源码使用方法和讲解细节补充
每个图片文件夹中仅含有一个图片。
最后,我还趁势测试了contribute中的predict.py,也考到facenet文件夹下,并在此文件夹中放了一张需要识别的图片tingting.png,图片大小没有要求(自动裁剪),图片和运行如下:
FaceNet源码使用方法和讲解细节补充
FaceNet源码使用方法和讲解细节补充
正确识别出是F3这个人,但确信度不大,可能是前面160*160没有严格裁剪的关系。