返回主目录

返回 人脸识别 目录

下一章:深度篇——人脸识别(一) 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 项目讲解相关推荐

  1. Qt5.7+Opencv2.4.9人脸识别(二)人脸采集

    [注意]本博文的档次适合OpenCV初学者,和要做本科生毕业设计这类档次. 源码的下载地址和原理理论部分请走下面连接 http://blog.csdn.net/qq78442761/article/d ...

  2. 文字识别(二) Tesseract识别与jTessBoxEditor样本训练

    <一>准备样本文件 1.样本文件 可使用系统画图工具绘制样本文件,数量越多越好,作为训练的数据,如图 注:样本图像文件保存格式必须为.tif结尾或.tiff结尾的格式,否则在Merge样本 ...

  3. 产品经理专业知识50篇(十二)-抖音训练营项目实战(知识付费MVP产品模型)

    一.训练营项目定位 在使用抖音短视频时,经常会刷到某某课程0元领取.某3天特训营只需1元钱等相关课程推送视频,常见的如提升学历.找副业.理财股票等科目方向.用户端可以分为以下几个步骤: 进入相关课程详 ...

  4. 深度篇——人脸识别(一)  ArcFace 论文 翻译

    返回主目录 返回 人脸识别 目录 下一章:深度篇--人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解 目录内容: 深度篇--人脸识别(一) ArcFace 论文 翻译 深度篇- ...

  5. python二维码生成识别代码_Python3+qrcode+zxing生成和识别二维码教程

    一.安装依赖库 pip install qrcode pillow image zxing pillow是python3中PIL的代替库,image是生成图版需要用到的库 安装image时报错&quo ...

  6. 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码)

    面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码) 目录 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码) 1.面部表情识别方法 2.面部表情识别数据集 ...

  7. 移动端(ios and android)长按识别二维码(含js与原生互调)

    这篇文章就整理下移动端长按识别二维码的实现吧!实现方式可以分为三种 一.长按原生控件,直接获取控件中的图片数据(src或background) 二.长按原生控件,截图识别 三.长按web中的图片,ap ...

  8. Discuz二次开发基本知识详细讲解

    Discuz是国内最流行的论坛软件管理系统,今天小编跟大家分享一篇关于Discuz二次开发基本知识详细讲解,感兴趣的朋友跟小编一起来了解一下吧! 一) Discuz!的文件系统目录注:想搞DZ开发,就 ...

  9. 基于主要成分分析的人脸二维码识别系统-含Matlab代码

    目录 一.引言 二.人脸图像信息处理 2.1 主成分分析PCA 2.2 PCA人脸压缩与重构算法分析 三.二维码转换以及识别 3.1 QR码 3.2 将人脸图像生成二维码 3.3 二维码的识别与图像还 ...

  10. 深度学习自学(二十二):人脸检测人脸识别-嵌入式平台方案汇总

    整理的人脸系列学习经验:包括人脸检测.人脸关键点检测.人脸优选.人脸对齐.人脸特征提取等过程总结,有需要的可以参考,仅供学习,请勿盗用.https://blog.csdn.net/TheDayIn_C ...

最新文章

  1. unity课设小游戏_Unity制作20个迷你小游戏实例训练视频教程
  2. pycharm配置git版本管理
  3. 综合实践活动信息技术小学版第三册电子课本_峄城区初中信息技术、综合实践活动学科教师素养提升培训圆满落幕...
  4. Oracle的闪回特性之恢复truncate删除表的数据
  5. inotifywait监听php,利用inotifywait监控主机文件和目录
  6. 电影院里为何有散落的青瓜?
  7. 携带cookie进行数据请求
  8. ADC内设与外设的区别
  9. SMM - 系统管理模式,SMRAM
  10. 《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 导读
  11. asp.net使用include包含文件中文乱码_C++: 编写自己的头文件
  12. C++算法工程师需要具备开发能力
  13. sql Sever的存储过程如何转换为mysql
  14. python qq群_用Python玩转QQ群论坛
  15. UE5——材质学习笔记(4):溶解材质
  16. 类人猿学院--懒人精灵脚本系列教程(最新)
  17. 序列号 java_JAVA序列号的serialVersionUID
  18. 深入理解LCD之寄存器配置
  19. 分享暄桐好作业之《灵飞经》,静观春意生长
  20. 基于skynet设计游戏服务端框架

热门文章

  1. Chinapub 100万会员评选出来的2007年IT图书排行榜
  2. ipixsoft swf to html5 converter,iPixSoft SWF to Video Converter(视频转换软件)
  3. 关于《windows游戏编程大师技巧》的源代码
  4. linux 联通ip配置,linux下设置电信网通双线路IP地址
  5. HeadFirstJava
  6. 电力监控系统的研究与应用
  7. HTTP代理socks5哪个快
  8. 转载:真正高人的解读——《三体 读后感》【宇宙尺度的战争】
  9. 《数据挖掘概念与技术》读书笔记(一)
  10. 阿里云CDN、DCDN、SCDN的区别