在本机与Docker容器中运行Facenet训练人脸识别器

by LINKTIME CLOUD 2018-11-02

在本机运行Facenet

Facenet简介

Facenet是一个基于Tensorflow实现的人脸识别器,其核心思想来自于论文:“FaceNet: A Unified Embedding for Face Recognition and Clustering”。在Facenet的官方Github-wiki中给了6个运行范例。此篇博客主要介绍如何用Facenet的预训练模型来训练自己的Classifier。

使用Facenet的预训练模型训练自己的Classifier

利用Facenet的预训练模型,我们可以训练自己的Classifier实现人脸识别。在训练自己的Classifier之前,我们要做一些准备工作。

需安装的软件包

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

克隆Facenet的github仓库到本机

选择一个本机目录,并进入这个目录,将Facenet克隆到此目录下。
参考代码如下:
git clone https://github.com/davidsandberg/facenet.git

设置python的环境变量

export PYTHONPATH=[...]/facenet/src
[...]为本机facenet的目录

下载LFW数据集和预训练模型

本文基于LFW数据集来训练Classifier。
LFW数据集下载地址:http://vis-www.cs.umass.edu/lfw/#download
Facenet的github主页上提供了两个已训练好的model:20180408-102900和20180402-114759。
下载地址:https://pan.baidu.com/s/11jb62A4Pq_aTd_nlZAA8zA 密码:zdfn

对LFW数据集中的人脸图片进行预处理

在训练Classifier之前,我们首先要进行一个图片预处理的工作。将一个包含人脸的图片中的人脸部分截取出来,再输出这个人脸的部分的图片。后面训练Classifier的时候,会基于这些被截取出来的人脸图片来进行训练。
运行代码参考如下:
for N in {1..4}; do \
python src/align/align_dataset_mtcnn.py \
~/datasets/lfw/raw \
~/datasets/lfw/lfw_mtcnnpy_160 \
--image_size 160 \
--margin 32 \
--random_order \
--gpu_memory_fraction 0.25 \
& done

基于LFW数据集训练Classifier

对LFW数据集进行预处理之后,我们可以用预处理之后的图片来训练自己的Classifier。
运行代码可参考如下:
python src/classifier.py TRAIN ~/datasets/lfw/lfw_mtcnnpy_160 ~/models/facenet/20180408-102900/20180408-102900.pb ~/models/lfw_classifier.pkl --batch_size 1000 --min_nrof_images_per_class 40 --nrof_train_images_per_class 35 --use_split_dataset

测试Classifier的效果

运行代码参考如下:
python src/classifier.py CLASSIFY ~/datasets/lfw/lfw_mtcnnpy_160 ~/models/facenet/20180408-102900/20180408-102900.pb ~/models/lfw_classifier.pkl --batch_size 1000 --min_nrof_images_per_class 40 --nrof_train_images_per_class 35 --use_split_dataset

在Docker容器中运行Facenet

Docker简介

Docker是一个开放源代码的平台,为开发者提供容器来进行开发。Docker让容器的创建与维护变得更加轻便和快捷。相比于传统的虚拟化方式,docker容器没有自己的内核,容器中的应用会直接运行于宿主的内核。所以Docker容易比传统的虚拟机更加轻便与快捷。

下载Docker

可在Docker的官方网站上下载适合自己电脑的Docker版本
官网地址:https://docs.docker.com/install/

在Docker容器中搭建Facenet运行环境

  1. 在docker内拉取一个Python3.5或者Python3.6的镜像。(只要Python的版本支持Tensorflow即可)
    参考代码如下:
    docker pull python:3.5
  2. 基于此镜像创建一个容器,并将Docker的一个文件夹挂载到一个本机的文件夹实现容器的本机的文件共享。
    参考代码如下:
    docker commit -m "docker_facenet" -a "lzh940411" $container_id $image_name
  3. 在Docker容器内安装各种运行Facenet需要的包。(同在本机上安装的那些包)
    参考代码如下:
    pip install --upgrade tensorflow
    pip install scipy
    pip install scikit-learn
    pip install opencv-python
    pip install h5py
    pip install matplotlib
    pip install Pillow
    pip install requests
    pip install psutil
  4. 运行各种Facenet程序,此时与在本机运行类似。需注意此时各个文件的路径是在docker的文件系统中的路径。

留言

评论

${{item['author_name']}} 回复 ${{idToContentMap[item.parent] !== undefined ? idToContentMap[item.parent]['author_name'] : ''}} · ${{item.date.slice(0, 10)}} 回复

暂时还没有一条评论.