『Lab』在TensorFlow 中实现人脸识别(FaceNet初识)

一个TensorFlow 下实现人脸识别的玩耍笔记

Github:

facenet https://github.com/davidsandberg/facenet

0 requirements:

tensorflow==1.7
scipy
scikit-learn
opencv
h5py
matplotlib
Pillow
requests
psutil

新建要求Python envs(基于Anaconda)

因为亲测,现有的更新版本tf环境跑不起来。所以最好新建一个py虚拟环境。

conda create -n tf_17 python=3.6    # 新建tensorflow1.7虚拟环境,tf_17为虚拟环境名称,可自定义。

安装python envs packages

conda install --yes --file requirements.txt 
# requirements.txt 当前自建,内容见上。也可放于其他位置,注意修改对应命令地址

1 配置facenet的PYTHONPATH

下载

# 下载
https://github.com/davidsandberg/facenet

解压

# 压缩包内文件解压于某位置(如:D:\envs\facenet)

添加到用户变量

N:PYTHONPATH
V:~\facenet\src        # 如:D:\envs\facenet\src

可以打开一个Python Shell ,保证运行语句"import facenet ”不会报错,则说明环境配置成功.

2 LFW 人脸数据库

@IDforHYIT 2019.04

LFW_Datasets_Info:
    13233 images
    5749 people
    1680 people with two or more images

http://vis-www.cs.umass.edu/lfw/#information

文件目录结构戳此查看。

下载

http://vis-www.cs.umass.edu/lfw/#download    # 172 MB

解压

# 压缩包内文件解压于某位置(如:D:\Datasets\lfw\raw)

3 LFW 数据库上的人脸检测和对齐

处理的第一步是使用MT CNN 进行人脸检测和对齐3 并统一缩放到合适的大小。

激活环境

activate tf17    # 激活tensorflow1.7环境

执行人脸对齐命令

cd ~\facenet    # 为后续方便,cd到facenet目录下,如 cd D:\envs\facenet
python src\align\align_dataset_mtcnn.py D:\Datasets\lfw\raw D:\Datasets\lfw\lfw_mtcnnpy_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25    # 对齐后,照片会缩放到大小为160*160。13233张照片,会花些时间。
# or
python D:\envs\facenet\src\align\align_dataset_mtcnn.py D:\Datasets\lfw\raw D:\Datasets\lfw\lfw_mtcnnpy_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25

4 预训练模型

拿来官方训练好的模型来耍耍

下载

https://drive.google.com/file/d/1EXPBSXwTaqrSC0OhUdXNmKSh9qJUQ55-/view    # 183 MB
# or
链接: https://pan.baidu.com/s/1pW8KyhbN8kCIZEaPvdh8zw 
提取码: 2333

解压

# 压缩包内文件解压于某位置(如:D:\models\facenet\20180402-114759)

测试模型精度

python src\validate_on_lfw.py D:\Datasets\lfw\lfw_mtcnnpy_160 D:\models\facenet\20180402-114759    # cd D:\envs\facenet 的情况下
# or
python D:\envs\facenet\src\validate_on_lfw.py D:\Datasets\lfw\lfw_mtcnnpy_160\ D:\models\facenet\20180402-114759

结果

Accuracy: 0.98500+-0.00658        # 可以看到官方给出的模型精度已经达到了0.985
Validation rate: 0.90100+-0.02395 @ FAR=0.00067
Area Under Curve (AUC): 0.998
Equal Error Rate (EER): 0.016

result-gpu

☝为tensorflow-gpu版本,MX150耗时不到十分钟。
因配置比较麻烦且使用过程中会出现点其他问题需要解决,偶尔尝试,性价比不高。
故本文介绍的是cpu版本的tensorflow1.7,8550u的时间跑了接近半小时。

本文暂到这吧,后续有时间在更新。

登误

如果遇到
RuntimeError: No file "~~~" with extension png or jpg.
把lfw_mtcnnpy_160 移到facenet位置下试试
如facenet目录下
~/data/lfw/lfw_mtcnnpy_160
则此时命令为
python src\validate_on_lfw.py data/lfw/lfw_mtcnnpy_160 D:\models\facenet\20180402-114759

如果文章还有其他错误,欢迎私邮或评论交流。

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:https://idforhyit.github.io/2019/04/07/FaceNet-Notes/