FaceNet pre-trained模型以及FaceNet源码使用方法和讲解
Pre-trained models
| Model name | LFW accuracy | Training dataset | Architecture |
|---|---|---|---|
| 20180408-102900 | 0.9905 | CASIA-WebFace | Inception ResNet v1 |
| 20180402-114759 | 0.9965 | VGGFace2 | Inception ResNet v1 |
| Model name | LFW accuracy | Training dataset | Architecture |
|---|---|---|---|
| 20170511-185253 | 0.987 | CASIA-WebFace | Inception ResNet v1 |
| 20170512-110547 | 0.992 | MS-Celeb-1M | Inception ResNet v1 |
模型下载链接:https://pan.baidu.com/s/1aiSq7wGpdHIe6MUKPnXgrA 密码:4dcn
20170512-110547(MS-Celeb-1M数据集训练的模型文件,微软人脸识别数据库,名人榜选择前100万名人,搜索引擎采集每个名人100张人脸图片。预训练模型准确率0.993+-0.004)
Ram内存要求
| Neural Network Model | Task | Ram |
|---|---|---|
| MTCNN | Facenet#align() | 100MB |
| Facenet | Facenet#embedding() | 2GB |
Inception ResNet v1
人脸识别数据库
| 数据库 | 描述 | 用途 | 获取方法 |
|---|---|---|---|
| CASIA-WebFace | 10k+人,约500K张图片 | 非限制场景 | 链接 |
| FaceScrub | 530人,约100k张图片 | 非限制场景 | 链接 |
| YouTube Face | 1,595个人 3,425段视频 | 非限制场景、视频 | 链接 |
| LFW | 5k+人脸,超过10K张图片 | 标准的人脸识别数据集 | 链接 |
| MultiPIE | 337个人的不同姿态、表情、光照的人脸图像,共750k+人脸图像 | 限制场景人脸识别 | 链接 需购买 |
| MegaFace | 690k不同的人的1000k人脸图像 | 新的人脸识别评测集合 | 链接 |
| IJB-A | 人脸识别,人脸检测 | 链接 | |
| CAS-PEAL | 1040个人的30k+张人脸图像,主要包含姿态、表情、光照变化 | 限制场景下人脸识别 | 链接 |
| Pubfig | 200个人的58k+人脸图像 | 非限制场景下的人脸识别 |
VGG2:
-- Total number of images : 3.31 Million.
-- Number of identities : 9131 (train: 8631, test: 500)
-- Number of male identities : 5452
-- Number of images per identity : 87/362.6/843 (min/avg/max)
-- Number of pose templates : list of pose template for 368 subjects (2 front templates, 2 three-quarter templates and 2 profile templates, each template containing 5 images)
-- Number of age templates : list of age template for 100 subjects (2 young templates and 2 mature templates, each template containing 5 images)
人脸检测
| 数据库 | 描述 | 用途 | 获取方法 |
|---|---|---|---|
| FDDB | 2845张图片中的5171张脸 | 标准人脸检测评测集 | 链接 |
| IJB-A | 人脸识别,人脸检测 | 链接 | |
| Caltech10k Web Faces | 10k+人脸,提供双眼和嘴巴的坐标位置 | 人脸点检测 | 链接 |
人脸表情
| 数据库 | 描述 | 用途 | 获取方法 |
|---|---|---|---|
| CK+ | 137个人的不同人脸表情视频帧 | 正面人脸表情识别 | 链接 |
人脸年龄
| 数据库 | 描述 | 用途 | 获取方法 |
|---|---|---|---|
| IMDB-WIKI | 包含:IMDb中20k+个名人的460k+张图片 和维基百科62k+张图片, 总共: 523k+张图片 | 名人年龄、性别 | 链接 |
| Adience | 包含2k+个人的26k+张人脸图像 | 人脸性别,人脸年龄段(8组) | 链接 |
| CACD2000 | 2k名人160k张人脸图片 | 人脸年龄 | 链接 |
人脸性别
| 数据库 | 描述 | 用途 | 获取方法 |
|---|---|---|---|
| IMDB-WIKI | 包含:IMDb中20k+个名人的460k+张图片 和维基百科62k+张图片, 总共: 523k+张图片 | 名人年龄、性别 | 链接 |
| Adience | 包含2k+个人的26k+张人脸图像 | 人脸性别,人脸年龄段(8组) | 链接 |
人脸关键点检测
| 数据库 | 描述 | 用途 | 获取方法 |
|---|---|---|---|
| 数据库 | 描述 | 用途 | 获取方法 |
人脸其它
| 数据库 | 描述 | 用途 | 获取方法 |
|---|---|---|---|
| CeleBrayA | 200k张人脸图像40多种人脸属性 | 人脸属性识别 | 获取方法 |
前提条件:已安装并配置好Tensorflow的运行环境。
第一步:准备facenet程序:
一、下载FaceNet源码。
下载地址:facenet源码
二、精简代码。作者在代码里实现了很多功能,但是对于初学者来说,很多代码是没有必要的,反倒找不到学习这个程序的入口。建议先精简一下代码,便于读懂代码:新建一个文件夹,取名:facenet,把源码中的src文件夹直接拷贝过来。
注:便于大家能够看懂代码,以上两步我已经完成,同时,自己运行程序之后,还对里边的代码做了详细的注释,如果想先了解facenet的源码,强烈建议下载这个,下载地址:facenet精简版
当然,大家别忘了顺手点个星哦~~~
第二步:下载预训练模型。
模型下载链接:https://pan.baidu.com/s/1aiSq7wGpdHIe6MUKPnXgrA 密码:4dcn
下载完成后,把预训练模型的文件夹拷贝在刚才的文件夹里。用pycharm打开这个工程文件如图:
第三步:运行人脸比对程序(compare.py)。
facenet可以直接比对两个人脸经过它的网络映射之后的欧氏距离。
-1、在compare.py所在目录下放入要比对的文件1.png和2.png。
-2、运行compare.py文件,但是会报错如下:
这是因为这个程序需要输入参数,在上方的工具栏里选择Run>EditConfigurations ,在Parameters中配置参数:20170512-110547 1.png 2.png。再次运行程序
可以看到,程序会算出这两个图片的差值矩阵
第四步:图片预处理——运行人脸对齐程序(align\align_dataset_mtcnn.py)。
我们可以下载LFW数据集用来测试这个程序,也为后边的训练函数做好数据准备。
下载链接:http://vis-www.cs.umass.edu/lfw/。下载后解压在data文件夹中。
因为程序中神经网络使用的是谷歌的“inception resnet v1”网络模型,这个模型的输入时160*160的图像,而我们下载的LFW数据集是250*250限像素的图像,所以需要进行图片的预处理。
在运行时需要输入的参数:
input_dir:输入图像的文件夹(E:\facenet\data\lfw E:\facenet\data\lfw)
output_dir:输出图像的文件夹(E:\facenet\data\lfw E:\facenet\data\lfw_160)
指定裁剪后图片的大小:--image_size 160 --margin 32 --random_order(如果不指定,默认的裁剪结果是182*182像素的)
比如我的是:E:\facenet\data\lfw E:\facenet\data\lfw_160 --image_size 160 --margin 32 --random_order
如果在pycharm中运行,按照同样的方法配置以上参数如下:
第五步:运行训练程序:(train_tripletloss.py)。
前边已经下载并处理好了LFW的数据集,现在,可以进行训练了。
运行之前,要在train_tripletloss.py中把加载数据的路径改成自己的数据集所在路径,如下图:
注:train_tripletloss.py和train_softmax.py的区别:这是作者对论文做出的一个延伸,除了使用facenet里提到的train_tripletloss三元组损失函数来训练,还实现了用softmax的训练方法来训练。当然,在样本量很小的情况下,用softmax训练会更容易收敛。但是,当训练集中包含大量的不同个体(超过10万)时,最后一层的softmax输出数量就会变得非常大,但是使用train_tripletloss的训练仍然可以正常工作。
最后,附上原来的文件中各py文件的作用(持续更新):
一、主要函数
align/ :用于人脸检测与人脸对齐的神经网络
facenet :用于人脸映射的神经网络
util/plot_learning_curves.m:这是用来在训练softmax模型的时候用matlab显示训练过程的程序
二、facenet/contributed/相关函数:
1、基于mtcnn与facenet的人脸聚类
代码:facenet/contributed/cluster.py(facenet/contributed/clustering.py实现了相似的功能,只是没有mtcnn进行检测这一步)
主要功能:
① 使用mtcnn进行人脸检测并对齐与裁剪
② 对裁剪的人脸使用facenet进行embedding
③ 对embedding的特征向量使用欧式距离进行聚类
2、基于mtcnn与facenet的人脸识别(输入单张图片判断这人是谁)
代码:facenet/contributed/predict.py
主要功能:
① 使用mtcnn进行人脸检测并对齐与裁剪
② 对裁剪的人脸使用facenet进行embedding
③ 执行predict.py进行人脸识别(需要训练好的svm模型)
3、以numpy数组的形式输出人脸聚类和图像标签
代码:facenet/contributed/export_embeddings.py
主要功能:
① 需要对数据进行对齐与裁剪做为输入数据
② 输出embeddings.npy;labels.npy;label_strings.npy
FaceNet pre-trained模型以及FaceNet源码使用方法和讲解的更多相关文章
- Linux内核源码分析方法
一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...
- 织梦dedecms源码安装方法
织梦dedecms源码安装方法 第一步: 上传所有文件到空间 注意:(由于有很多人反应安装后首页样式都乱的,所以强烈要求安装到根目录,如:127.0.0.1 / www.xxx.com,或者二级域名也 ...
- Android源码下载方法详解
转自:http://www.cnblogs.com/anakin/archive/2011/12/20/2295276.html Android源码下载方法详解 相信很多下载过内核的人都对这个很熟悉 ...
- 框架源码系列五:学习源码的方法(学习源码的目的、 学习源码的方法、Eclipse里面查看源码的常用快捷键和方法)
一. 学习源码的目的 1. 为了扩展和调优:掌握框架的工作流程和原理 2. 为了提升自己的编程技能:学习他人的设计思想.编程技巧 二. 学习源码的方法 方法一: 1)掌握研究的对象和研究对象的核心概念 ...
- git获取内核源码的方法
[转]http://www.360doc.com/content/17/0410/16/23107068_644444795.shtml 1. 前言 本文主要讲述ubuntu下通过git下载linux ...
- 【转】Linux内核源码分析方法
一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...
- Django源码安装方法及创建启动项目
一.源码安装方法 下载源码包:https://www.djangoproject.com/download/ 输入以下命令并安装: tar xzvf Django-X.Y.tar.gz # 解压下载包 ...
- Linux内核源码分析方法_转
Linux内核源码分析方法 转自:http://www.cnblogs.com/fanzhidongyzby/archive/2013/03/20/2970624.html 一.内核源码之我见 Lin ...
- 分享学习 PHP 源码的方法
每天抽一点时间来看看 PHP 源码方面的书,说实话,无法在调试器下观察 PHP 运行状态的上下文实在是一件痛苦的事情.不过还好不是一无所获,虽然内容比较多,但是掌握方法挨着看下去还是 ...
随机推荐
- Collection Lists
ArrayList LinkedList Vector 顺序添加 抽象数据类型(ADT)是一个实现包括储存数据元素的存储结构以及实现基本操作的算法. ArrayList (1)ArrayList是 ...
- 获取hdfs集群信息(fs.defaultFS)
[root@hive-dp-7bd6fd4d55-wctjn hive-1.1.0-cdh5.14.0]# hdfs getconf -confKey fs.default.name19/12/04 ...
- Windows7下命令行使用MySQL
我在Win7下安装的MySQL版本是mysql-5.0.22-win32 1.在Win7环境下安装MySQL,关于安装方法可以参考文章: Win7系统安装MySQL5.5.21图解教程.win7安装M ...
- gitlab开机启动|启动 停止 重启
修改配置后的初始化 gitlab-ctl reconfigure 启动 sudo gitlab-ctl start 停止sudo gitlab-ctl stop 重启sudo gitlab-ctl r ...
- 阿里云 Server (Ubuntu 12.04) 配置 FTP
来自 http://blog.csdn.net/zgrjkflmkyc/article/details/45510345 这个是阿里云的官方用户手册 http://bbs.aliyun.com/re ...
- 使用sublime+platUML快速画流程图
程序员难免要经常画流程图,状态图,时序图等.以前经常用 visio 画,经常为矩形画多大,摆放在哪等问题费脑筋.有时候修改文字后,为了较好的显示效果不得不再去修改图形.今天介绍的工具是如何使用 Sub ...
- Linux程序设计学习笔记(独乐乐版)
在Android的开发过程中经常会遇到Linux相关的问题,为了更彻底的了解Linux准备整点没用的,找到一本 <Linux程序设计>开始系统的学习. 期间记录下自认为重要的内容,本以为是 ...
- python png与jpg的相互转换
python将PNG格式的图片转化成为jpg """ 先来说一下jpg图片和png图片的区别 jpg格式:是有损图片压缩类型,可用最少的磁盘空间得到较好的图像质量 png ...
- Java判断链表是否为回文链表
请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 思路:1.通过快慢指针,来遍历链表 ...
- php给每个数组元素加上前缀
比如原数组是 array('1','2','3','4'); 我需要得到的结果 array('aaa1','aaa2','aaa3','aaa4'); 用内置函数如何实现? array_walk() ...