FaceNet---Tensorflow下的下的实战篇
@WP20190225
===============目录===============
一、FaceNet算法简介
二、FaceNet配置与使用
2.1 安装环境的确定
2.2 下载文件:FaceNet源码 + LFW数据集 + 模型
2.3 环境配置
2.4 测试自己的数据
三、遇到的问题与解决方式
3.1 安装requirements.txt里要求的依赖项时报错
3.2 非法指令 (核心已转储)
3.3 找不到路径
3.4 模型版本太旧
===============正文===============
一、FaceNet算法简介
FaceNet算法,是谷歌开发的人脸检测算法,发表于 CVPR 2015,利用相同人脸在不同角度等姿态的照片下有高内聚性,不同人脸有低耦合性,提出使用 cnn + triplet mining 方法,在 LFW 数据集上准确度达到 99.63%,在 youtube 人脸数据集上准确度 95.12%,比以往准确度提升了将近 30%。【引用】
FaceNet算法原理,这里不做介绍。
二、FaceNet使用环境
2.1 安装环境的确定
Ubuntu 18.04 + Tensorflow 1.5.0 + Python 2.7 + OpenCV 3.2.0
说明:之前已经安装过Python + OpenCV,长时间不用Ubuntu系统忘记装的什么版本了,通过命令查看已安装的版本。要知道自己电脑的opencv 版本,因为版本不同,调用的头文件就不同。
(1)查看Python版本: $ python
(2)查看Tensorflow 版本: $ import tensorflow as tf
$ tf.__version__
(3)查看OpenCV版本: $ pkg-config --modversion opencv
2.2 下载文件:FaceNet源码+模型
(1)FaceNet在github源码地址为: https://github.com/davidsandberg/facenet/tree/master
FaceNet库源码下载链接:https://codeload.github.com/davidsandberg/facenet/zip/master
(2)LFW数据集: http://vis-www.cs.umass.edu/lfw/#resources
网址打开后下载Download the database: All images as gzipped tar file
(3)FaceNet库模型下载链接:
FaceNet预训练的模型,官网给出是在谷歌连接上,可能不方便下载,自己想招。下面备注一下,个人在网络资源上找的下载链接。
- 20170512-110547模型下载地址:https://pan.baidu.com/s/1nvBX233 密码:s0sb
- 20180402-114759模型下载地址:https://drive.google.com/open?id=1EXPBSXwTaqrSC0OhUdXNmKSh9qJUQ55-
如果不能翻墙,可以通过下面的链接下载:https://download.csdn.net/download/rookie_wei/10609076
说明:20170512-110547模型,后面使用时出现了模型版本太旧,所以又下载了20180402-114759模型。
2.3 环境配置
(1)FaceNet源码的解压与配置依赖项
前提是已经配置好python、opencv环境,然后解压FaceNet源码。这里尝试了两种方式:一是,计算机根目录下使用python,直接在根目录下解压FaceNet源码;二是,计算机下安装了conda虚拟机,在ananconda下使用python,在ananconda目录下解压FaceNet源码。两者配置FaceNet方式相同,只是在配置好后,使用方式稍微有点区别。
接下来,仅仅细说在ananconda下的配置过程。
1>解压FaceNet源码到路径/home/wp/anaconda2/test_py2/facenet-py2。【文件夹facenet-py2是FaceNet源码的解压文件。】
2>利用pip安装运行代码所需引入工具包
提示:因为后面安装调试的时候,发现了本人的ubuntu18.04系统不支持tf1.7、tf1.10版本的问题,这里直接将requirements.txt里要求的tensorflow==1.7改成tensorflow==1.5.0后再往下进行。
进入facenet源码文件夹,安装依赖项:
$ cd /home/wp/anaconda2
$ source activate test_py2 【激活虚拟环境,开始使用,里面之前安装过tf1.5】
$ cd test_py2
$ cd facenet-py2 【进入FaceNet源码解压文件:文件夹facenet-py2是中】
$ pip install -r requirements.txt
$ source deactivate 【最后,不使用了,记得关闭。即,退出虚拟环境。】
【利用pip安装运行代码所需的依赖项,如果使用的是python3,则用pip3 install -r requirements.txt。稍微等待一会儿,不报错,安装完后基本可以使用facenet了。报错,解决一下就可以了。】
3>设置环境变量
为了正常执行FaceNet,还要设置好环境变量,也就是,PYTHONPATH实际指向你的facenet存储位置中的src目录。这里提供两种方式:一是,每次重启电脑,都需要设置一下的;二是,不需每次重启电脑,永久生效。
方式一,终端下直接执行命令:
$ export PYTHONPATH=$PATH:/home/wp/anaconda2/test_py2/facenet-py2/src
或者 $ export PYTHONPATH=/home/wp/anaconda2/test_py2/facenet-py2/src
为了避免每次开机都执行,将其写到~/.bashrc文件中。可以采用方式二:
首先:$ sudo gedit ~/.bashrc
接着,添加内容并保存:
$ export PYTHONPATH=$PATH:/home/wp/anaconda2/test_py2/facenet-py2/src
最后,每次修改.bashrc后,使用:$ source ~/.bashrc,使修改立即生效
注:后面的地址是facenet目录+ /src
2.4 测试自己的数据
Step1,准备工作:
(1)将下载的LFW数据集解压到data文件下,重命名lfw_160,新建lfw:/home/wp/anaconda2/test_py2/facenet-py2/data/lfw/lfw_160 。
(2)将下载的20180402-114759模型放在如下文件夹下:
/home/wp/anaconda2/test_py2/facenet-py2/models/20180402-114759。
注,20180402-114759文件夹下含有4个文件。
(3)将自己找的几张图片(如10.jpg、11.jpg、20.jpg),放在如下文件夹下:/home/wp/anaconda2/test_py2/facenet-py2/data/images
Step2,继续:
$ cd /home/wp/anaconda2
$ source activate test_py2
$ cd test_py2
$ cd facenet-py2
Step3,测试自己的数据:
$ python src/compare.py models/20180402-114759 data/images/10.jpg data/images/11.jpg data/images/20.jpg
Step4,观察结果后,根据需要退出虚拟环境:
$ source deactivate
三、遇到的问题与解决方式
3.1 安装requirements.txt里要求的依赖项时报错
(1)执行pip install -r requirements.txt ,报错:
Could not find a version that satisfies the requirement PyHamcrest>=1.9.0 (from Twisted>=13.1.0->scrapy) (from versions: )
No matching distribution found for PyHamcrest>=1.9.0 (from Twisted>=13.1.0->scrapy)
大致意思是没有安装PyHamcrest吧,还规定了版本,因为怕直接pip安装版本会不对,就直接下载对应版本的包,本地安装了。
【解决】在这里下载PyHamcrest->1.9.0版本的包到本地,然后进入目录,
$ pip install ./PyHamcrest-1.9.0-py2.py3-none-any.whl
【或者pip3 install ./PyHamcrest-1.9.0-py2.py3-none-any.whl】
然后重新输入:$ pip install -r requirements.txt
(2)执行pip install -r requirements.txt ,报错:
grin 1.2.1 requires argparse>=1.1, which is not installed.
https://blog.csdn.net/picturelife/article/details/81022265
【解决】那就再安装一下:$ pip install argparse
3.2 非法指令 (核心已转储)
这个经过不停的调试,安装了不同版本的tf,发现是ubuntu系统和tf版本的匹配问题,注意这里两者是否匹配。亲测,个人的ubuntu18.04支持tf1.5, 不支持tf1.7和tf1.10,其他版本的还没有试过。
【解决】安装匹配的版本:如ubuntu18.04支持tf1.5。
3.3 找不到路径
运行$ python src/compare.py models/20170512-110547 data/images/01.jpg data/images/02.jpg,提示找不到路径、参数太多等问题。
usage: compare.py [-h] [--image_size IMAGE_SIZE] [--margin MARGIN]
[--gpu_memory_fraction GPU_MEMORY_FRACTION]
model image_files [image_files ...]
问题1:compare.py: error: too few arguments
。。。。
File "/home/wp/anaconda2/test_py2/facenet-py2/src/facenet.py", line 388, in get_model_filenames
raise ValueError('No meta file found in the model directory (%s)' % model_dir)
问题2:ValueError: No meta file found in the model directory (models/20180402-114759)
【解决】经过不断调试发现是,执行命令中使用中英文空格参杂,使用了中文空格导致的。保持英文输入,空格大小一致即可。
3.4 模型版本太旧
报错:cannot convert a tensor of type int32 to an input of type int64.
【解决】20170512-110547模型版本太旧,下载了20180402-114759模型。