目录
-
- 一、第一部分
-
- 1.人脸检测和人脸对齐:MTCNN
- 2.深度卷积网络提取特征
- 3.应用
- 二、第二部分
-
- 1.准备工作
- 2.下载LFW 人脸数据库
- 3.修改代码
- 4.对LFW进行人脸检测和对齐:
- 5.验证已有模型的正确率
- 6.在自己的数据上使用已有模型
代码:https://github.com/MONI-JUAN/Tensorflow_Study/tree/master/ch06-人脸检测和人脸识别
百度云链接:https://pan.baidu.com/s/1i4a85oHe5huA5U7pR9N_-w
提取码:aldv
一、第一部分
1.人脸检测和人脸对齐:MTCNN
- P-Net(输入12×12×3)
- (输出1×1×2)人脸判断
- (输出1×1×4)框回归
- (输出1×1×10)人脸关键点位置:左眼、右眼、鼻子、左嘴角、右嘴角
- R-Net(输入24×24×3)
- (输出1×1×2)人脸判断
- (输出1×1×4)框回归
- (输出1×1×10)人脸关键点位置:左眼、右眼、鼻子、左嘴角、右嘴角
- O-Net(输入48×48×3)
- (输出1×1×2)人脸判断
- (输出1×1×4)框回归
- (输出1×1×10)人脸关键点位置:左眼、右眼、鼻子、左嘴角、右嘴角
2.深度卷积网络提取特征
- 三元组损失( Triplet Loss )
- 中心损失( Center Loss )
-
向量表示:
- 对于同一个人的两张人脸图像,对应的向量之间的欧几里得距离应该比较小。
- 对于不同人的两张人脸图像,对应的向量之间的欧几里得距离应该比较大。
3.应用
人脸验证、人脸识别、人脸聚类
二、第二部分
1.准备工作
- 把src目录加入PYTHONPATH
Linux:
export PYTHONPATH=[...]/src
Windows:
参考TensorFlow 08——ch05-TensorFlow Object Detection 深度学习目标检测
把 [...]\src
加进去:
- 需要的库
可以测试一下:
#以下是该项目中需费包库文件
import tensorflow as tf
import sklearn
import scipy
import cv2
import hSpy
import matplotlib
import PIL
import requests
import psutil
cv2 没有的话,安装不是cv2是opencv-python
2.下载LFW 人脸数据库
在地址http://vis-www.cs.umass.edu/lfw/lfw.tgz 下载lfw数据集,并解压到~/datasets/中:
百度云链接:https://pan.baidu.com/s/1i4a85oHe5huA5U7pR9N_-w
提取码:aldv
Linux:命令
cd ~/datasets
mkdir -p lfw/raw
tar xvf ~/Downloads/lfw.tgz -C ./lfw/raw --strip-components=1
Windows:手动
./datasets/lfw/
建两个:
raw
:放解压的一大堆文件夹
lfw_mtcnnpy_160
:空着放结果
3.修改代码
src\align\detect_face.py
中的load()
加上allow_pickle=True
data_dict = np.load(data_path, encoding='latin1', allow_pickle=True).item() # 加上allow_pickle=True
4.对LFW进行人脸检测和对齐:
Linux:命令
python src/align/align_dataset_mtcnn.py \~/datasets/lfw/raw \~/datasets/lfw/lfw_mtcnnpy_160 \--image_size 160 --margin 32 \--random_order
在输出目录 ~/datasets/lfw/lfw_mtcnnpy_160
中可以找到检测、对齐后裁剪好的人脸。
Windows:
python src/align/align_dataset_mtcnn.py ./datasets/lfw/raw ./datasets/lfw/lfw_mtcnnpy_160 --image_size 160 --margin 32 --random_order
5.验证已有模型的正确率
Linux:
python src/validate_on_lfw.py \
~/datasets/lfw/lfw_mtcnnpy_160 \
~/models/facenet/20170512-110547
Windows:
python src/validate_on_lfw.py datasets/lfw/lfw_mtcnnpy_160 src/models/facenet/20170512-110547/
6.在自己的数据上使用已有模型
假设现在有三张图片./test_imgs/1.jpg
、 ./test_imgs/2.jpg
、 ./test_imgs/3.jpg
, 这三张图片中各含再一个人的人脸,希望计算它们两两之间的距离。
使用 compare.py 就可以实现,运行下面的代码.
Linux:
python src/compare.py \
~/models/facenet/20170512-110547/ \
./test_imgs/1.jpg ./test_imgs/2.jpg ./test_imgs/3.jpg
Windows:
python src/compare.py src/models/facenet/20170512-110547/ ./test_imgs/1.jpg ./test_imgs/2.jpg ./test_imgs/3.jpg