深度篇——人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解
返回主目录
返回 人脸识别 目录
下一章:深度篇——人脸识别(一) ArcFace 论文 翻译
论文地址: 《ArcFace: Additive Angular Margin Loss for Deep Face Recognition》
源码地址: InsightFace: 2D and 3D Face Analysis Project
我优化的项目地址: insight_face_pro
本小节,人脸识别代码 insight_face_pro 项目讲解
二. 人脸识别代码 insight_face_pro 项目讲解
insight_face_pro 项目 结构如下:
我这里,仅以 f_mobile_face_net.py 网络模型来说明,如果你想尝试其他网络模型,请参考论文源码,修改一下,就可以用的了。
在对项目操作前,请先看 README.md 和 config.py 文件,这里,一个是说明文件,一个是配置文件。
README.md 文件 (论文,模型,数据,项目都可以从里面找到下载地址)
# [insight_face_pro](https://github.com/wandaoyi/insight_face_pro)
tensorflow, mxnet 版本的 insight_face 人脸识别项目 2020-07-23
-- [论文地址](https://arxiv.org/abs/1801.07698)
- [论文对应源码地址](https://github.com/deepinsight/insightface)
- [我的 CSDN 博客](https://blog.csdn.net/qq_38299170)
- 环境依赖(其实版本要求并不严格,你的版本要是能跑起来,那也是OK的):
```bashrc
pip install easydict
pip install numpy==1.16
conda install tensorflow-gpu==1.12.0
pip install mxnet-cu90
pip install opencv-python
```
-
- [训练和验证数据下载地址](https://github.com/deepinsight/insightface/wiki/Dataset-Zoo)
- [预训练模型下载地址](https://github.com/deepinsight/insightface/wiki/Model-Zoo)
- All face images are aligned by [MTCNN](https://kpzhang93.github.io/MTCNN_face_detection_alignment/index.html) and cropped to 112x112
- Face Detection, Please check RetinaFace(我的代码中没加入有, 但在作者源码中有) for more details
-
-
- 将数据放到指定的文件目录下(config.py 文件):
- 其实,做好依赖,拿到数据,就仔细看看 config.py 文件,里面全是配置。配好路径或一些超参,基本上,后面就是一键运行就 OK 了。
- 对 config.py 进行配置设置。## 数据生成
- 对于模型的训练或验证,我们都需要数据,这些数据,可以去下载开源的,也可以自己制作。
- 这里对于制作人脸数据,我使用的是数据蒸馏的方法。
- data_distillation.py 图原图进行人脸检测,人脸分类,人脸聚类等操作
- prepare.py 对分类或聚类后的人脸数据生成 .bin, .rec, .idx 等数据
- video_2_image.py 是将 视频流 转为 图像流## 训练模型
- face_train.py 人脸识别训练## 模型验证
- verification_model.py 人脸识别模型验证
-
- 对于模型测试,想弄的话,也很简单,利用数据库保存录入人的信息
- 测试的初始化,就将初始化 128 维人脸特征保存到缓存
- 当新的图像进入,先人脸检测,人脸矫正,再提取 128 维人脸特征
- 之后,再将新图像的 128 维特征 与 缓存的 128 维特征进行相似度计算
- 最后,选择大于阈值的人脸结果,再根据缓存获取到该用户的信息## 本项目的优点
- 就是方便,很多东西,我已经做成傻瓜式一键操作的方式。里面的路径,如果不喜欢用相对路径的,可以在 config.py 里面选择 绝对路径
- 本人和唠叨,里面的代码,基本都做了注解,就怕有人不理解,不懂,我只是希望能给予不同的你,一点点帮助。
1. 模型验证(verification_model.py)
根据从 README.md 中下载的 数据 和 预训练模型,将其放置到 verification_model.py 文件中所指定的路径下,或,修改 config.py 中的路径,然后,一键运行 verification_model.py 文件,即可验证模型的精度。
我们可以观察到,预训练模型的 mAp 精度在 99.4% ~ 99.5% 左右。精度是相当高的,但是,对于人脸识别来说,这样的精度是不够的,需要更高的精度,才能满足业务需求(现在商汤人脸识别精度达到 99.8%左右)。这就需要对预训练模型,进行进一步训练,从而提升精度来契合业务需求。
2. 模型训练(face_train.py)
打开 face_train.py 文件,观察 def __init__(self): 方法中的 config.py 配置文件,配置好,还有将 __C.COMMON.STRUCTURE_DICT 中的参数配置好,就可以一键运行 face_train.py 文件,开始训练模型。
f_mobile_face_net.py 使用的是一个全卷积的残差网络,最后再加上一个 128 维的全连接层,然后,引入 margin_softmax 损失函数。训练的过程,请参考论文中的 Figure. 2 图所示:
在训练的过程中,发现有时候精度很难再提高,这时就需要对训练进行调优操作了:如学习率,数据,迭代次数,交叉验证,优化器等等。可以参考我前面的博客: 深度篇——神经网络(一) 神经元与感知机 里面有 讲到调优的方法。
对于训练和验证,可以参考 README.md 文件,里面有更多的 数据集 和 预训练模型。可以让你玩得开心。
3. 数据制作
这里的数据制作,包括两步:一步是数据蒸馏(data_distillation.py),一步是将目标数据制作成 .bin、.rec、.idx 验证和训练数据(prepare.py)。文件,都是一键运行操作的。
这里的数据蒸馏,是相对于图像来进行的,如果我们一下子搞不到大量的图像数据,我们可以通过将视频流转为图像流,从而得到大量的图像(video_2_image.py)。
数据蒸馏,大致可以分为 3 步(data_distillation.py):
(1). 对输入 图像 进行人脸检测 和人脸矫正
工作原理为: MTCNN_face_detection_alignment
(2). 对矫正后的人脸图像,进行分类,根据 identity 来对人脸进行分类。
在人脸分类中,info 文件夹中会生成三个 txt 文件(这 3 个文件只是用来做人工细化,对代码运行并无影响):
create_lib.txt 表示创建 新的 identity 文件夹,即表示当前的人脸与已有的人脸 identity 不同。
in_storage.txt 表示 与当前已有的人脸 identity 相同,然后会根据人脸相似度入库到对应的文件夹中去。
not_recognize.txt 表示没辨认出来的人脸,图像会输出到 output 文件夹中
在人脸分类后,我们可以人工参照 txt 和 identity 人脸文件夹中的人脸来进行辨别,是否有分错的,有些明显分错的人脸,我们要重新对它们入库,或移除。
(3). 对分类后的人脸图像进行聚类,以消除部分噪声人脸
人脸聚类,可以在一定程度上对 identity 身份文件夹中分错的人脸,或同样的人脸,进行一步提炼,会根据 人脸相似度来移除那些分错的人脸,和相同的人脸。从而在一定程度上减少手动观察筛选的操作,提高了工作效率。如果有相同的图像或分错的图像,也会在 info 文件夹中生成 txt 文件。
在人脸数据蒸馏的过程中,常常会于是一种脸盲的尴尬地步。就是,有时候,你会发现,有很多人脸,你感觉,它们都长得一样的,但是,计算机却有判断它们不一样。或,你明明感觉,它们不太像,但是,计算机又判断它们是同一个 identity。从而有些怀疑人生的感觉
生成训练、测试数据:
将上面数据蒸馏得到的好数据,用于生成 训练、测试数据(prepare.py): 通过上面数据蒸馏的繁琐操作,到了这里,就简单了,将数据放到指定的文件夹,一键运行操作即可得到目标数据。生成的训练数据中,property 文件表示如下:
class_num 即为 identity number 的意思,表示有多少个人脸身份。
info 文件夹中会有这 3 个 txt 文件生成:
pair.tx 表示 生成 .bin 文件中,两两配对的图像,是否是同一个身份。如果是 True 则为同一个身份,False 则为不同身份
train_data.txt 表示 训练数据
val_data.txt 表示验证数据,pair.txt 就是由 这里的数据生成的。
这些 info 中的文件,只是用于参考 ,并不影响项目的运行。
返回主目录
返回 人脸识别 目录
下一章:深度篇——人脸识别(一) ArcFace 论文 翻译
深度篇——人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解相关推荐
- Qt5.7+Opencv2.4.9人脸识别(二)人脸采集
[注意]本博文的档次适合OpenCV初学者,和要做本科生毕业设计这类档次. 源码的下载地址和原理理论部分请走下面连接 http://blog.csdn.net/qq78442761/article/d ...
- 文字识别(二) Tesseract识别与jTessBoxEditor样本训练
<一>准备样本文件 1.样本文件 可使用系统画图工具绘制样本文件,数量越多越好,作为训练的数据,如图 注:样本图像文件保存格式必须为.tif结尾或.tiff结尾的格式,否则在Merge样本 ...
- 产品经理专业知识50篇(十二)-抖音训练营项目实战(知识付费MVP产品模型)
一.训练营项目定位 在使用抖音短视频时,经常会刷到某某课程0元领取.某3天特训营只需1元钱等相关课程推送视频,常见的如提升学历.找副业.理财股票等科目方向.用户端可以分为以下几个步骤: 进入相关课程详 ...
- 深度篇——人脸识别(一) ArcFace 论文 翻译
返回主目录 返回 人脸识别 目录 下一章:深度篇--人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解 目录内容: 深度篇--人脸识别(一) ArcFace 论文 翻译 深度篇- ...
- python二维码生成识别代码_Python3+qrcode+zxing生成和识别二维码教程
一.安装依赖库 pip install qrcode pillow image zxing pillow是python3中PIL的代替库,image是生成图版需要用到的库 安装image时报错&quo ...
- 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码)
面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码) 目录 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码) 1.面部表情识别方法 2.面部表情识别数据集 ...
- 移动端(ios and android)长按识别二维码(含js与原生互调)
这篇文章就整理下移动端长按识别二维码的实现吧!实现方式可以分为三种 一.长按原生控件,直接获取控件中的图片数据(src或background) 二.长按原生控件,截图识别 三.长按web中的图片,ap ...
- Discuz二次开发基本知识详细讲解
Discuz是国内最流行的论坛软件管理系统,今天小编跟大家分享一篇关于Discuz二次开发基本知识详细讲解,感兴趣的朋友跟小编一起来了解一下吧! 一) Discuz!的文件系统目录注:想搞DZ开发,就 ...
- 基于主要成分分析的人脸二维码识别系统-含Matlab代码
目录 一.引言 二.人脸图像信息处理 2.1 主成分分析PCA 2.2 PCA人脸压缩与重构算法分析 三.二维码转换以及识别 3.1 QR码 3.2 将人脸图像生成二维码 3.3 二维码的识别与图像还 ...
- 深度学习自学(二十二):人脸检测人脸识别-嵌入式平台方案汇总
整理的人脸系列学习经验:包括人脸检测.人脸关键点检测.人脸优选.人脸对齐.人脸特征提取等过程总结,有需要的可以参考,仅供学习,请勿盗用.https://blog.csdn.net/TheDayIn_C ...
最新文章
- unity课设小游戏_Unity制作20个迷你小游戏实例训练视频教程
- pycharm配置git版本管理
- 综合实践活动信息技术小学版第三册电子课本_峄城区初中信息技术、综合实践活动学科教师素养提升培训圆满落幕...
- Oracle的闪回特性之恢复truncate删除表的数据
- inotifywait监听php,利用inotifywait监控主机文件和目录
- 电影院里为何有散落的青瓜?
- 携带cookie进行数据请求
- ADC内设与外设的区别
- SMM - 系统管理模式,SMRAM
- 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 导读
- asp.net使用include包含文件中文乱码_C++: 编写自己的头文件
- C++算法工程师需要具备开发能力
- sql Sever的存储过程如何转换为mysql
- python qq群_用Python玩转QQ群论坛
- UE5——材质学习笔记(4):溶解材质
- 类人猿学院--懒人精灵脚本系列教程(最新)
- 序列号 java_JAVA序列号的serialVersionUID
- 深入理解LCD之寄存器配置
- 分享暄桐好作业之《灵飞经》,静观春意生长
- 基于skynet设计游戏服务端框架