模型理解

MTCNN是目前比较流行的人脸检测方法,通过人脸检测可以进行更精准的人脸识别。模型主要通过PNet,RNet,ONet三个网络级联,一步一步精调来对人脸进行更准确的检测。论文中的模型图如下:

接下来我会从我在训练中的理解来解释MTCNN模型都干了什么。

三个模型要按顺序训练,首先是PNet,然后RNet,最后ONet。

PNet:

PNet是全卷积网络,主要为了应对不同输入尺度,层数很浅,主要作用是尽可能多的把人脸框都选进来,宁愿错误拿来好多个,也不丢掉一个。训练数据由四部分组成:pos,part,neg,landmark,比例为1:1:3:1。数据是怎么来的呢?

pos,part,neg是随机和人脸的数据裁剪得到的,裁剪图片与人脸框最大的iou值大于0.65的为pos图像,大于0.4的为part图像,小于0.3的为neg图像,landmark截取的是带有关键点的图像。其中pos,part的label含有它们的类别1,-1还有人脸框相对于图像左上角的偏移量,偏移量除以图像大小做了归一化;neg的label只含有类别0;landmark的label含有类别-2和5个关键点的坐标偏移也是进行了归一化的。

这四种图像都resize成12x12作为PNet的输入,通过PNet得到了是否有人脸的概率[batch,2],人脸框的偏移量[batch,4],关键点的偏移量[batch,10]。四种不同的数据该怎么训练呢?

对于是否存在人脸的类别损失只通过neg和pos数据来对参数进行更新,具体办法是通过label中的类别值做了一个遮罩来划分数据,只计算neg和pos的损失,不计算其他数据的损失;人脸框的损失只计算pos和part数据的;关键点的损失只计算landmark的。论文中有个小技巧就是只通过前70%的数据进行更新参数,说是模型准确率会有提升,在代码中也都有体现,具体实现可以参考代码。

RNet,ONet:

RNet和ONet都差不多都是精修人脸框,放在一起解释。RNet的landmark数据和PNet一样,是对带有关键点的图像截取得到,但要resize成24x24的作为输入。

pos,part,neg的数据是通过PNet得到的。这里就可以理解为什么PNet的输入要是四种数据大小是12了,为了速度,也为了RNet的输入。一张图片输入到PNet中会得到[1,h,w,2],[1,h,w,4],[1,h,w,10]的label预测值,这有点像yolo的思想,如果不理解yolo的可以参考我的yolo介绍。

把一张图片像网格一样划分,每一个网格都预测它的人脸框,划分的图片包含的人脸有多有少,所以划分了neg,pos,part三种数据,landmark只是起辅助作用。图片还要以一定值来缩小尺度做成图像金字塔目的是获取更多可能的人脸框,人脸框中有人的概率大于一定阈值才保留,还要进行一定阈值的非极大值抑制,将太过重合的人脸框除掉,将PNet预测的人脸框于原图上截取,与真实人脸框的最大iou值来划分neg,pos,part数据,并resize成24作为RNet的输入。

RNet,ONet的损失函数和PNet相同,不同的是三种损失所占的比例不同。<br>ONet的输入是图片通过PNet金字塔得到的裁剪框再经过RNet的裁剪框裁剪的图片划分neg,pos,part三种数据resize成48作为输入,landmark与RNet相同只不过resize成48大小的了。

模型具体实现请参考我的github.

代码环境说明

ubuntu16.04
python3.6.5
tensorflow1.8.0
opencv3.4.3
pip install tqdm为了显示进度条

结果展示

测试图片来源百度图片,测试结果如下:

MTCNN理解到亲手训练相关推荐

  1. 视频理解TSM的训练与使用

    视频理解TSM的训练与使用 tsm的github地址 总体评价:tsm是一个理解不难但效果优秀的视频理解模型,在我的视频分类任务中,其效果基本达到了使用要求.相比我在github上跑通的其他模型,ts ...

  2. 深入理解混合精度训练:从 Tensor Core 到 CUDA 编程

    背景 近年来,自动混合精度(Auto Mixed-Precision,AMP)技术在各大深度学习训练框架中作为一种使用简单.代价低廉.效果显著的训练加速手段,被越来越广泛地应用到算法研究中. 然而大部 ...

  3. StructBERT:将语言结构纳入深度语言理解的预训练中——中文翻译

    STRUCTBERT:将语言结构纳入深度语言理解的预训练中 Wei Wang, Bin Bi, Ming Yan, Chen Wu, Zuyi Bao, Jiangnan Xia, Liwei Pen ...

  4. 理解word2vec的训练过程

    from:http://blog.csdn.net/dn_mug/article/details/69852740 生成词向量是自然语言处理中的基本过程,此前对此只知道使用但是一直不知道其原理. 最近 ...

  5. BERT 词向量理解及训练更新

    1.BERT 词向量理解 在预训练阶段中,词向量是在不断更新的,而在fine-tuning阶段中,词向量是固定不变的.在fine-tuning阶段中,我们使用预训练好的模型参数来对新的数据进行训练. ...

  6. SIGIR 2022 | 集理解、策略、生成一体的半监督预训练对话模型

    ©作者 | 社媒派SMP 来源 | 社媒派SMP 中国科学院深圳先进技术研究院自然语言处理团队(SIAT-NLP)联合阿里巴巴达摩院云小蜜智能对话团队提出了一篇针对于任务型对话预训练的工作SPACE, ...

  7. MTCNN+CRNN解决车牌识别问题

    MTCNN部分 1. MTCNN理解     MTCNN是用在人脸识别中的人脸定位领域,使用MTCNN取得了比较好的效果,目前在人脸识别中的人脸定位阶段,很多都是使用MTCNN来完成的: MTCNN一 ...

  8. OpenAI NLP最新进展:通过无监督学习提升语言理解

    编译 | reason_W 编辑 | 明 明 出品 | AI科技大本营 [AI 科技大本营导读]近日,OpenAI 在其官方博客发文介绍了他们最新的自然语言处理(NLP)系统.这个系统是可扩展的.与任 ...

  9. 模型也可以上网课?!一文看懂服务型蒸馏训练方案

    允中 发自 凹非寺 量子位 编辑 | 公众号 QbitAI 自今年年初,由于疫情的原因,为了减少人员聚集,降低病毒扩散的可能性,各大中小学校都陆续开始了网上教学.上网课已经成了家喻户晓的一种学习方式了 ...

最新文章

  1. html页面展示Json样式
  2. python十种日期格式_Python 日期格式相关
  3. 阿里云MVP陈磊:数字化转型驱动业务创新
  4. oracle authentication_services,SQLNET.AUTHENTICATION_SERVICES= (NTS) 解释
  5. nuxt.js实战之window和document对象的使用
  6. DHCP server 冒充及DOS攻击处理方案
  7. 网络的小区号和网络tac_网络问政|城基路老旧小区排污管长期堵塞没人管?
  8. 上课流程法-如何上好第一节课(1) 目录 1. 目录 1 1.1. 销售自己 1 1.2. 销售课程 1 1.3. 学习方法 1 1.4. 制定规章 2 2. 销售自己-自我介绍 2 2.1.
  9. Scratch(四十三):赛龙舟
  10. 企业高薪招人,近5成岗位月薪过万
  11. 从头开始搞懂 MySQL(07)为什么同一条 SQL 时快时慢
  12. 使用RPA有什么好处
  13. python读取stl文件三维坐标_python vtk 读取三维raw数据存为stl
  14. 格签名相似概念区分: SVP、SIS、LWE的区分
  15. Visio 去交点处跨线
  16. 杨辉三角python输出
  17. 轻松上手 | 使用国内资源安装 K3s 全攻略
  18. HTML基础-05-语义化标签
  19. Oracle数据文件损坏无法正常修复问题
  20. 兆、字节、位之间的转换

热门文章

  1. 微信小程序图片下边阴影
  2. C# File.CopyTo 方法
  3. 计算机专业班服设计,班服logo素材 不同班级或专业班服图案素材
  4. 【不是拷贝】rabbitmq安装延迟队列插件rabbitmq_delayed_message_exchange
  5. 多个门店如何统一经营?什么是多门店系统?
  6. 京东2020双十一脚本(基于Autojs)
  7. Android通信相关-联系人-导入导出联系人
  8. 老鼠走迷宫(C语言实现)
  9. SpringBoot教程(十六) | SpringBoot集成swagger(全网最全)
  10. jiffies 时间转换