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预训练的模型,官网给出是在谷歌连接上,可能不方便下载,自己想招。下面备注一下,个人在网络资源上找的下载链接。

  1. 20170512-110547模型下载地址:https://pan.baidu.com/s/1nvBX233  密码:s0sb 
  1. 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模型。

算法---FaceNet在Tf下的实战篇的更多相关文章

  1. 手牵手,使用uni-app从零开发一款视频小程序 (系列下 开发实战篇)

    系列文章 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇) 手牵手,使用uni-app从零开发一款视频小程序 (系列下 开发实战篇) 扫码体验,先睹为快 可以扫描下微信小程序的 ...

  2. KNN 算法-实战篇-如何识别手写数字

    公号:码农充电站pro 主页:https://codeshellme.github.io 上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数 ...

  3. SVM 支持向量机算法-实战篇

    公号:码农充电站pro 主页:https://codeshellme.github.io 上一篇介绍了 SVM 的原理和一些基本概念,本篇来介绍如何用 SVM 处理实际问题. 1,SVM 的实现 SV ...

  4. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)

    LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...

  5. caffe框架下目标检测——faster-rcnn实战篇操作

    原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1) ...

  6. 【微信小程序】转载:微信小程序实战篇-下拉刷新与加载更多

    下拉刷新 实现下拉刷新目前能想到的有两种方式 1. 调用系统的API,系统有提供下拉刷新的API接口 当然,你可以直接在全局变量app.json的window里面配置上面这个属性,这样整个项目都允许下 ...

  7. Redis实战篇

    Redis实战篇 1 Redis 客户端 1.1 客户端通信 原理 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 . 客户端和服务器发送的命令或数据一律以 \r\n ...

  8. SAS数据挖掘实战篇【五】

    SAS数据挖掘实战篇[五] SAS--预测模型 6.1 测模型介绍 预测型(Prediction)是指由历史的和当前的数据产生的并能推测未来数据趋势的知识.这类知识可以被认为是以时 间为关键属性的关联 ...

  9. SAS数据挖掘实战篇【四】

    SAS数据挖掘实战篇[四] 今天主要是介绍一下SAS的聚类案例,希望大家都动手做一遍,很多问题只有在亲自动手的过程中才会有发现有收获有心得. 1 聚类分析介绍 1.1 基本概念 聚类就是一种寻找数据之 ...

随机推荐

  1. Python随笔日记(1)

    Python学习 1.安装python .之后在Windows中配置环境变量(计算机\属性\高级系统设置\环境变量\系统变量\path后加入 :路径) 2.注意变量的命名的规则 字母.数字.下划线 p ...

  2. 最新 华云数据java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.华云数据等10家互联网公司的校招Offer,因为某些自身原因最终选择了华云数据.6.7月主要是做系统复习.项目复盘.Leet ...

  3. 第24课.经典问题解析(1.析构函数的顺序;2.const修饰对象;3.成员函数,成员变量是否属于具体对象)

    1.当程序中存在多个对象的时候,如何确定这些对象的析构顺序? 单个对象 单个对象创建时构造函数的调用顺序 a.调用父类的构造函数 b.调用成员变量的构造函数(调用顺序与声明顺序相同) c.调用类自身的 ...

  4. 前端contentType数据传输格式与ajax技术

    前端数据格式contentType参数 前后端传输数据的编码格式 1.urlencoded(form表单与ajax默认的数据提交编码格式) 数据格式 name=' django后端识别到urlenco ...

  5. Mybatis插件之Mybatis-Plus(SpringBoot)

    这边只在SpringBoot下进行简单查询的测试,接下来会博客会介绍增删改的操作. 数据库表结构如下: 开始测试: 1.新建工程(trymp_springboot)并把项目结构建立好 2.导入pom. ...

  6. poj1696(极角排序,贪心)

    ---恢复内容开始--- 题目链接:https://vjudge.net/problem/POJ-1696 题意:有n个点,规定起点,每次只能向左走,不能与之前的路径交叉,求最多能经过几个点. 思路: ...

  7. Oracle数据库应用系统结构

    在安装.部署oracle数据库软件时,需要根据不同应用结构(即硬件平台.操作系统平台)采用不同的方法(基本安装.高级安装),下面介绍几种常见的应用结构. 1.应用系统的数据接口 客户端应用程序或应用服 ...

  8. Centos7查看关闭防火墙

    查看防火墙状态: firewall-cmd --state 关闭防火墙 service firewalld start 开机启动 service firewalld stop 禁止开机启动 syste ...

  9. COGS 2633. [HZOI 2016] 数列操作e

    [题目描述] 一个长度为n的序列,一开始序列数的权值都是0,有m次操作 支持两种操作, 1 L R x,给区间[L,R]内,第一个数加x,第二个数加2^2⋅x,第三个数加3^2⋅x...第R-L+1个 ...

  10. 用bisect来管理已排序的序列

    bisect 模块包含两个主要函数,bisect 和 insort,两个函数都利用二分查找算法来在有序序列中查找或插入元素. 2.8.1 用bisect来搜索 bisect(haystack, nee ...