当前位置: 代码迷 >> 综合 >> TensorFlow 09——ch06-人脸检测和人脸识别
  详细解决方案

TensorFlow 09——ch06-人脸检测和人脸识别

热度:30   发布时间:2023-09-26 21:30:21.0

目录

    • 一、第一部分
      • 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 )

TensorFlow 09——ch06-人脸检测和人脸识别

  • 中心损失( Center Loss )

TensorFlow 09——ch06-人脸检测和人脸识别

  • 向量表示:

    • 对于同一个人的两张人脸图像,对应的向量之间的欧几里得距离应该比较小。
    • 对于不同人的两张人脸图像,对应的向量之间的欧几里得距离应该比较大。

3.应用

人脸验证、人脸识别、人脸聚类

二、第二部分

1.准备工作

  • 把src目录加入PYTHONPATH

Linux:

export PYTHONPATH=[...]/src 

Windows:

参考TensorFlow 08——ch05-TensorFlow Object Detection 深度学习目标检测

[...]\src 加进去:

TensorFlow 09——ch06-人脸检测和人脸识别

  • 需要的库

可以测试一下:

#以下是该项目中需费包库文件 
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/

TensorFlow 09——ch06-人脸检测和人脸识别

6.在自己的数据上使用已有模型

假设现在有三张图片./test_imgs/1.jpg./test_imgs/2.jpg./test_imgs/3.jpg , 这三张图片中各含再一个人的人脸,希望计算它们两两之间的距离。

TensorFlow 09——ch06-人脸检测和人脸识别

使用 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 

TensorFlow 09——ch06-人脸检测和人脸识别

  相关解决方案