如大家参考上篇博客完成了对facenet配置的话,那恭喜了,接下来我们开始上硬菜了,go!
facenet源码中实现的很多功能,如:图像裁剪对齐、对比、训练、测试模型精确度、训练svm分类器、人脸识别等等,下面我开始来意义介绍:
- 运行图像裁剪对齐程序(align\align_dataset_mtcnn.py)
对下载好的lfw数据集下载后解压在data文件夹中,此外lfw同一目录下建立一个裁剪后的图像保存文件夹备用,这是因为程序中神经网络使用的是谷歌的“inception resnet v1”网络模型,这个模型的输入时160*160的图像,而我们下载的LFW数据集是250*250限像素的图像,所以需要进行图片的预处理。
参数的修改:input_dir: /home/user/facenet/data/lfw output_dir:/home/user/facenet/data/lfw_160 裁剪尺寸参数:--image_size 160 --margin 32 --random_order(如果不指定,默认的裁剪结果是182*182像素的)
终端输入:/home/user/facenet/data/lfw output_dir:/home/user/facenet/data/lfw_160 --image_size 160 --margin 32 --random_order
- 运行人脸比对程序(compare.py)
对下载好的预训练模型放入compare.py同目录下,从lwf数据集中随意抽取两张图像进行测试。
参数修改:模型位置+图像,如:/home/user/facenet/src/20170512-110547 1.png 2.png
- 运行训练程序(train_tripletloss.py)
训练程序前首先打开.py文件,在input_dir出将数据集的路径给上,方便后期训练,如下图:
或者直接在终端出给出路径,如: sudo train_tripletloss.py /home/user/facenet/data/lfw_160
- 运行模型测试程序(validate_on_lfw.py)
参数设置:/home/user/facenet/data/lfw_160 /home/user/facenet/src/20180803-131712
这将执行以下四个操作:
1)加载模型。
2)加载和解析文本文件与图像对。
3)计算所有图像(以及它们的水平翻转版本)在测试集中的向量。
4)计算精度,验证率(@ FAR = -10e-3),曲线下面积(AUC)和等误差率(EER)等性能指标。
运行结果
Model directory: /home/user/facenet/src/20180803-131712/ Metagraph file: model-20180803-131712.meta Checkpoint file: model- model-20180803-131712.ckpt-275 Runnning forward pass on LFW images ........................ Accuracy: 0.9975+-0.00152 Validation rate: 0.98367+-0.00948 @ FAR=0.00100 Area Under Curve (AUC): 1.000 Equal Error Rate (EER): 0.003
如上述程序能完整跑下来,则实现了通过两照对比检测是不是同属于一个人,由于时间关系,下篇将介绍如何通过分类器实现真正意义上的人脸识别,持续更新中。
最后,附上原来的文件中各py文件的作用
一、主要函数
align/ :用于人脸检测与人脸对齐的神经网络
facenet :用于人脸映射的神经网络
util/plot_learning_curves.m:这是用来在训练softmax模型的时候用matlab显示训练过程的程序
二、facenet/contributed/相关函数:
1、基于mtcnn与facenet的人脸聚类
代码:facenet/contributed/cluster.py(facenet/contributed/clustering.py实现了相似的功能,只是没有mtcnn进行检测这一步)
主要功能:
① 使用mtcnn进行人脸检测并对齐与裁剪
② 对裁剪的人脸使用facenet进行embedding
③ 对embedding的特征向量使用欧式距离进行聚类
2、基于mtcnn与facenet的人脸识别(输入单张图片判断这人是谁)
代码:facenet/contributed/predict.py
主要功能:
① 使用mtcnn进行人脸检测并对齐与裁剪
② 对裁剪的人脸使用facenet进行embedding
③ 执行predict.py进行人脸识别(需要训练好的svm模型)
3、以numpy数组的形式输出人脸聚类和图像标签
代码:facenet/contributed/export_embeddings.py
主要功能:
① 需要对数据进行对齐与裁剪做为输入数据
② 输出embeddings.npy;labels.npy;label_strings.npy