人脸检测算法:mtcnn简介

2023-11-03

人脸检测算法:MTCNN简介


MTCNN是一个针对于人脸检测的模型, 由PNet, RNet, 和ONet三个网络组成,三个网络都比较轻量, 易于训练.基于pytorch的实现可以看我这篇:
链接: l利用celebA数据集训练MTCNN网络.

算法流程

1. 对传入P网络的图片resize:由于一张图片内人脸的大小和人脸的数量不一定,用固定大小的选择框和移动步长不能准确地框出一张图片所有人脸(有可能框太大框了不止一个人脸,也有可能框太小框不住一个人脸)。所以图片传入P网络时,保持建议框大小(PNet要求的数据集大小,12×12)不变,每次按照一定比例不断对图片进行resize再传入P网络,直到图片最短边小于12,通常称这种方法为图片金字塔。


2. 将结果传入下一个网络:每次resize的图片传入P网络后,P网络都会生成相应的候选框,图片金字塔环节结束后,将选择置信度大于某一个值(这个值一般PNet > RNet > ONet)的候选框进行非极大值抑制,再将抑制后的结果对应的图片区域resize成24×24后传入RNet(resize是因为RNet输入图片大小是固定的)。为了使结果更好,可以将候选框对应的区域按最小边裁剪为正方形后再进行resize。同理,RNet得到的候选框进行置信度筛选和非极大值抑制后,按最小边裁剪为正方形,resize为48×48传入ONet,ONet得到的结果即为检测结果。
流程框架


下面介绍非极大值抑制(NMS),首先介绍iou
iou:iou是交并比,用来表示两个框(矩形)的重合程度,计算方法为:
iou = 两个矩形交集的面积/两个矩形并集的面积
在某些情况下,还有一种iou计算为:
iou = 两个矩形交集的面积/最小矩形面积
iou的值越大,表示矩形相交部分越多。
在这里插入图片描述


非极大值抑制:先把所有的候选框按置信度大小排列,将置信度最大的候选框与其余候选框依次计算iou,当iou大于某一阈值时,将这个候选框删除。然后继续在剩余未删除的框中重复上述操作。


网络介绍

第一层网络——PNet:PNet是一个全卷积神经网络,因此图片传入时不需要固定大小。
第二和第三层网络——RNet、ONet:RNet和ONet后接全连接,需要固定大小,其中R网络固定12×12大小,O网络固定24×24大小。
网络结构如下:
网络结构


训练方法

损失函数: 对于置信度, 是一个0-1之间的二分类问题, 使用的是二分类交叉熵损失函数(BCELoss)
对于预测框和特征点, 采用的是均方损失函数(MSELoss)
注意: 对应置信度为0的负样本不进行框偏移量和特征点损失计算,若有部分样本(置信度可以设置为2),不进行置信度的损失计算。在选择时可以使用nonezore函数选择符合条件的框。


另外, MTCNN的每个网络侧重点不同,P网络侧重于找到可能是人脸的区域(宁滥勿缺),O网络侧重于精确筛选出人脸,因此在损失计算时,P网络置信度的权重要小于框和特征点的权重,R网络置信度权重相对更高一些,O网络置信度权重最高。
(本人第一次写博客, 不太熟练, 欢迎指正)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人脸检测算法:mtcnn简介 的相关文章

随机推荐

  • SQL 2000递归查询

    网上的做法都是不能以NUL为关键字进行递归查询 现修改如下 可以任意进行递归 记录备忘 查询指定节点及其所有子节点的函数 alter FUNCTION GetLevel ID nvarchar 36 RETURNS t Level TABL
  • 13 Binder通信之ServiceManager

    Binder通信之ServiceManager 一 前言 Android系统中存在很多service 当某个应用调用系统某个service的功能时 往往向系统发出请求 调用该服务的外部接口 这种外部接口我们通常叫做代理接口 也就是说要拿到目
  • WinRAR在DOS下压缩/解压缩的使用方法

    用实例来说明问题 我的WinRAR路径 C Program Files WinRAR WinRAR exe 用法 rar lt 命令 gt lt 开关 1 gt lt 开关 N gt lt 压缩文件 gt lt 文件 gt lt 列表文件
  • Fortran 77

    FORTRAN结构化程序设计 第一章 FORTRAN语言程序设计初步 1 1 Fortran语言发展概况 1 2 简单的FORTRAN程序分析 1 3 FORTRAN源程序书写格式 1 4 Fortran程序的编辑与运行 1 5 常量 1
  • Java 集合框架

    1 集合框架概述 集合和数组的区别 数组的弊端 数组初始化后 长度不可变 不利于扩展 数组中提供的属性和方法少 不便于进行添加 删除 插入等操作 而且效率不搞 同时无法直接获取存储元素的个数 数组存储的数据是有序的 可以重复的 gt 存储数
  • 图文详解YUV420数据格式

    原文地址 http www cnblogs com azraelly archive 2013 01 01 2841269 html 1 YUV简介 YUV定义 分为三个分量 Y 表示明亮度 Luminance或Luma 也就是灰度值 而
  • SPI中的CPOL和CPHA概念

    经常会提及SPI分为四种模式 Mode 0 Clock Polarity CPOL 0 and Clock Phase CPHA 0 Mode 1 CPOL 0 and CPHA 1 Mode 2 CPOL 1 and CPHA 0 Mod
  • 前滚和回滚详细过程举例

    1 前滚和回滚介绍 前滚和回滚 是Oracle数据库实例发生意外崩溃 重新启动的时候 由SMON进行的自动恢复过程 因为oracle是先把操作命令写到 SGA的log buffer中 然后修改 数据 因此发生故障时 日志中的对数据库修改的记
  • OpenCV代码提取:rotate函数的实现

    OpenCV中并没有直接提供实现rotate的函数 这里通过getRotationMatrix2D和warpAffine函数实现rotate 并增加了一个crop参数 用来判断是否进行crop 目前支持uchar和float两种类型 经测试
  • CSS相关问题

    目录 第三方组件样式修改不生效问题 方法一 非scoped 方法二 deep 深度修改 方法三 lt lt lt 深作用选择器 第三方组件样式修改不生效问题 问题背景 由于el select组件下拉选项被弹窗遮挡 需要修改el select
  • iOS cell.accessoryType在黑暗模式下的显示问题

    iOS UITableViewCell 提供了 accessoryType 属性用来设置 cell 右侧图标 在黑暗模式下使用 发现按钮的颜色比较暗 cell accessoryType UITableViewCellAccessoryDi
  • 卷积神经网络(三)

    六 三维卷积 在经历了二维灰度图的卷积操作之后 如何进行三维卷积 RGB图像 呢 我们一起来看下 首先我们还是给出一个6 6的图像 不过因为有RGB三个通道 所以图像变成了6 6 3 同样的 在二维灰度图中3 3的卷积核也要相应的更改为3
  • 智能家居项目总结以及学习总结

    学习总结 是一段艰辛的路程 是一段值得回忆的经历 一切都是为了秋招 为了将来有更好的生活 为了能够成为一名嵌入式工程师 从熟悉的C语言 半吊子的数据结构和简单算法 linux下的IO操作 进线程编写 socket套接字的应用 QT和C 的学
  • Java+Selenium实现网页截图

    概述 使用Java语言 实现网页截图 本文仅考虑Selenium方案 如果对其他方案感兴趣 可参考Java实现HTML页面截图功能 实现 大名鼎鼎的自动化测试工具 引入最新稳定版依赖
  • mysql计算时间差-本例为计算分钟差然后/60计算小时保留一位小数,由于直接得小时只会取整...

    ORDER TIME datetime NOT NULL 字段类型 SELECTso ID so ORDER TIME NOW CONCAT ROUND TIMESTAMPDIFF MINUTE so ORDER TIME NOW 60 1
  • C++全特化与偏特化

    全特化 全特化一般用于处理有特殊要求的类或者函数 此时的泛型模板无法处理这种情况 include
  • modbus之crc16计算代码

    这边提供两种方式 第1种是查表法方式 速度会快一点 但是需要多占用一些空间 第二种是纯计算方式 速度相对第一种会慢一点 但是比较省空间 代码如下 static const uint16 t crc table 0X0000 0XC0C1 0
  • MFC VS2012对话框背景填图

    这是使用VS 2012编写MFC对话框程序的教程 主要是关于图片处理方面的操作 这些在MFC游戏 图片处理 软件编写中是经常要用到的知识 一 创建项目 文件 新建项目 MFC应用程序 该页面使用 基于对话框 完成即可 注意 取消 使用Uni
  • JMS 规范简介

    本文转载至 深入浅出JMS 一 JMS基本概念 上篇文章ActiveMQ简单介绍以及安装 我们介绍了开源的JMS具体实现 ActiveMQ 这篇博文我们主要介绍MS的基本概念和它的模式 消息的消费以及JMS编程步骤 基本概念 JMS是jav
  • 人脸检测算法:mtcnn简介

    人脸检测算法 MTCNN简介 算法流程 网络介绍 训练方法 MTCNN是一个针对于人脸检测的模型 由PNet RNet 和ONet三个网络组成 三个网络都比较轻量 易于训练 基于pytorch的实现可以看我这篇 链接 l利用celebA数据