在本机与Docker容器中运行Facenet训练人脸识别器
在本机运行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运行环境
- 在docker内拉取一个Python3.5或者Python3.6的镜像。(只要Python的版本支持Tensorflow即可)
参考代码如下:
docker pull python:3.5
- 基于此镜像创建一个容器,并将Docker的一个文件夹挂载到一个本机的文件夹实现容器的本机的文件共享。
参考代码如下:
docker commit -m "docker_facenet" -a "lzh940411" $container_id $image_name
- 在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
- 运行各种Facenet程序,此时与在本机运行类似。需注意此时各个文件的路径是在docker的文件系统中的路径。
留言
评论
${{item['author_name']}} 回复 ${{idToContentMap[item.parent] !== undefined ? idToContentMap[item.parent]['author_name'] : ''}}说 · ${{item.date.slice(0, 10)}} 回复
暂时还没有一条评论.