MTCNN代码解读

2023-11-18

首先了解MTCNN算法

理论基础:
在这里插入图片描述

正如上图所示,该MTCNN由3个网络结构组成(P-Net,R-Net,O-Net)。

Proposal Network (P-Net):该网络结构主要获得了人脸区域的候选窗口和边界框的回归向量。并用该边界框做回归,对候选窗口进行校准,然后通过非极大值抑制(NMS)来合并高度重叠的候选框。

Refine Network (R-Net):该网络结构还是通过边界框回归和NMS来去掉那些false-positive区域。

只是由于该网络结构和P-Net网络结构有差异,多了一个全连接层,所以会取得更好的抑制false-positive的作用。

Output Network (O-Net):该层比R-Net层又多了一层卷基层,所以处理的结果会更加精细。作用和R-Net层作用一样。但是该层对人脸区域进行了更多的监督,同时还会输出5个地标(landmark)。
详细的网络结构如下图所示:
在这里插入图片描述
prototxt的更加详细的网络结构如下:分别为det1,det2,det3。

det1.prototxt结构:
在这里插入图片描述
det2.prototxt结构:
在这里插入图片描述
det3.prototxt结构:
在这里插入图片描述

其次说明几个函数

1、function B = imResample( A, scale, method, norm )

  • A:输入图片(二维或者三维图像数据)
  • scale:缩放比例
  • method:缩放的方法[‘bilinear’]
  • norm:optionally multiply every output pixel by norm
  • B:输出被缩放后的图像数据
    简单理解在mtcnn中这个函数是将输入的图片按照一定的比例将图片进行缩放。

2、function [boundingbox reg] = generateBoundingBox(map,reg,scale,t)

  • map:感受野的内容被认为是人脸的概率矩阵
  • reg:不是坐标,而是坐标的回归量。
  • scale:缩放比例
  • t:threshold的第一个值,大于这个值的认为这个感受野是人脸区域。
  • boundingbox:输出的矩形框。(举例如下)
    在这里插入图片描述
    这个函数的目的是判断哪些感受野区域是人脸。其步骤为
    (1)先驱逐map中大于阈值的值,并且取出相对应的置信度,坐标回归量和在特征值中的位置(x,y)
    (2)(x,y)的值是在特征值中的相对位置(对应原图的左上角的坐标),根据PNet的网络结构,12*12是它的感受野,对应回到原图所在的位置,并返回图片的真实坐标。
    (3)计算图片的右下角坐标,返回所有符合阈值条件的矩形区域

3、function pick = nms(boxes,threshold,type):非极大值抑制算法

  • boxes:generateBoundingBox函数返回的候选矩形框。
  • threshold:IoU 的阈值,这里设置为0.5。
  • type:这里设置为“Union”模式。模式的计算算方法是: o = s2/(s3+s2-s1),o为IoU得分。
    在这里插入图片描述
    具体算法流程如下:
    比如人脸识别的一个例子:
    已经识别出了 5 个候选框,但是我们只需要最后保留两个人脸。
    在这里插入图片描述
    首先选出分数最大的框(0.98),然后遍历剩余框,计算 IoU,会发现露丝脸上的两个绿框都和 0.98 的框重叠率很大,都要去除。
    在这里插入图片描述
    然后只剩下杰克脸上两个框,选出最大框(0.81),然后遍历剩余框(只剩下0.67这一个了),发现0.67这个框与 0.81 的 IoU 也很大,去除。

4、function [bboxA] = rerec(bboxA):将矩形框变换为正方形框

  • bboxA:输入输出矩形框
    这个函数的目的是将矩形框变换成正方形框,正方形的边长取矩形的长边

5、function [dy edy dx edx y ey x ex tmpw tmph] = pad(total_boxes,w,h)

  • total_boxes:所有的候选框
  • w:原图的宽度
  • h:原图的长度
  • x:候选框的左上角x坐标
  • y:候选框的左上角y坐标
  • ex:候选框的右下角x坐标
  • ey:候选框的与下角y坐标
  • dx:经过对齐之后的候选框左上角x坐标
  • dy:经过对齐之后的候选框左上角y坐标
  • edx:修改之后的候选框宽度w
  • edy:修改之后的候选框长度h
  • tmpw:候选框的宽度
  • tmph:候选框的长度
    这个函数的目的是将那些坐标的值大于或者小于原图尺寸的候选框的坐标值修改为对应原图位置的边界坐标,如图所示:
    在这里插入图片描述
    6、function [boundingbox] = bbreg(boundingbox,reg):校准边界框
  • 这一步跟MTCNN的训练设置有关,理解起来有些费劲,但是单单看函数的操作很好实现,其主要的步骤就是这样一个语句:boundingbox(:,1:4)=[boundingbox(:,1)+reg(:,1).*w boundingbox(:,2)+reg(:,2).*h boundingbox(:,3)+reg(:,3).*w boundingbox(:,4)+reg(:,4).*h];其中h为候选框的长度,w为候选框的宽度。

接下来是最重要的人脸检测的主要函数:detect_face()

1、首先代码的第一步是建立图像金字塔:
他的做法非常简单就是将原图尺寸反复乘以缩放因子,直到达到最小的尺寸为止,这样做的目的是不断缩放图片,以便得到更多的boundingbox。
2、将得到的不同尺寸的图片放入到PNet网络中做前向运算
这一步的做法是将上一步骤得到的N个缩放后的图片一次放到PNet网络中做前向运算,并且得到最可能是人脸的部分的boundingbox区域的集合total_boxes。
3、RNet对第二步得到的boundingbox(候选框)做进一步的判断
(1)首先按照每个候选框坐标信息在原图中获取数据,并且将所有的数据imResample到(24,24)的尺寸,方便送入到RNet网络中做前向运算。
(2)将(1)中得到的所有N个拥有(24,24)的感受野的图像数据送入到RNet网络做前向运算,得到感受野是人脸的概率,坐标的回归量两个变量。
(3)根据感受野是人脸的概率,坐标的回归量两个变量这两个量做进一步处理,筛选掉一部分候选框。
4、ONet对RNet的输出作进一步处理,得到唯一的候选框
(1)首先按照每个候选框坐标信息在原图中获取数据,并且将所有的数据imResample到(48,48)的尺寸,方便送入到ONet网络中做前向运算。
(2)将(1)中得到的所有N个拥有(48,48)的感受野的图像数据送入到RNet网络做前向运算,得到感受野是人脸的概率,坐标的回归量两个变量。
(3)根据感受野是人脸的概率,坐标的回归量两个变量这两个量做进一步处理,筛选掉一部分候选框,得到唯一的人脸框。
(4)根据ONet的五个特征点坐标值的输出,按照代码对应关系,得到原图对应的五个关键点的坐标值。

最后输出显示

在这里插入图片描述

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

MTCNN代码解读 的相关文章

  • IMX6ULL_Pro开发板基本操作(韦东山学习笔记)

    NAT网卡 桥接网卡 配置桥接网卡 驱动 为什么编译驱动程序之前要先编译内核 1 配置编译 内核 设备树 其他驱动程序 2 放到板子上 3 编译 测试第1个驱动 IMX6ULL Pro烧写系统
  • 公司重用我独立负责一个核心系统,我该怎么设计系统的高可用架构?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 业务场景引入 业务系统消息同步丢失 计费业务系统的计费问题 计费业务数据补偿系统设计 背景 今天给大家分享一个话题 就是对于线上跟钱有关的计费类的系统 在线上可
  • 秒杀抢购思路以及高并发下数据安全

    转载地址 https my oschina net wangjie404 blog 815455 我们通常衡量一个Web系统的吞吐率的指标是QPS Query Per Second 每秒处理请求数 解决每秒数万次的高并发场景 这个指标非常关
  • 6招玩转 Appium 自动化测试

    Appium是个什么鬼 Appium是一个移动端的自动化框架 可用于测试原生应用 移动网页应用和混合型应用 且是跨平台的 可用于IOS和Android以及firefox的操作系统 原生的应用是指用android或ios的sdk编写的应用 移
  • C++继承、构造函数和析构函数

    构造函数 与 析构函数 构造函数代表一个对象的生成 主要作用是初始化类的成员变量 可以被重载 如果没有显式构造函数 则实例化对象时 系统会自动生成一个无参的构造函数 构造函数的名称与类名相同 析构函数代表的是一个对象的销毁 不可以被重载 析
  • BFD库

    BFD库 2011 01 16 11 16 22 分类 LINUX 什么是 BFD Binary format descriptor 即二进制文件格式描述符 它是连接工具 ld 和二进制文件操作工具 bin util 实现对于目标文件操作的
  • 手机设置无密码时显示“已被管理员、加密政策或凭据存储停用”的解决办法

    前段时间手机上为了抓包安装了SSL证书 并且设置了锁屏密码 后来觉得锁屏密码很麻烦就想着关掉锁屏密码 发现无密码选项是灰色的 并且提示 已被管理员 加密政策或凭据存储停用 如下图 网上百度大多数办法就是 设置 gt 安全 gt 删除凭证 然
  • 华为手机一键刷新在哪里_华为一小步,国产系统一大步,鸿蒙OS2.0手机系统低调发布...

    12月16日上午 华为如约低调发布了鸿蒙OS 2 0的手机开发者Beta版 从发布会上展示的鸿蒙OS 2 0界面来看 似乎就是EMUI 11的翻版 华为鸿蒙OS避免了以前失败的手机系统没有生态的问题 采用了兼容安卓生态的策略 全面兼容安卓应
  • element ui 实现动态表单

    实现具体功能 对表单进行新增 删除以及验证每一个表单的字段 实现效果如图 1 实现表单的添加和删除 新增 addForm index this refs form validate valid gt if valid alert submi
  • 数据结构的复杂度

    数据结构的复杂度 在介绍复杂度之前我们现分享一个名词叫算法效率 算法效率 算法效率是指算法执行的时间 算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量 算法效率也分为两种 一种是时间效率 一种是空间效率 也被称为时间
  • html爱心表白代码(最全)

    目录 写在前面 十四个表白效果及使用说明 最后几个是最新的效果 购买本文前12个代码 怎么在页面添加文字和背景音乐 如何得到自己喜欢的音乐链接地址 怎么修改背景颜色或字体颜色 其他表白代码 跨年表白代码 最新表白代码 绝对好看 常见问题说明
  • MATLAB小技巧(33)arima时间序列

    MATLAB小技巧 33 arima时间序列 前言 一 MATLAB仿真 二 仿真结果 三 小结 前言 MATLAB进行图像处理相关的学习是非常友好的 可以从零开始 对基础的图像处理都已经有了封装好的许多可直接调用的函数 这个系列文章的话主
  • Ajax回调函数中再次使用Ajax访问controller,通过controller return来重定向跳转页面失败

    Ajax访问controller 通过controller return来重定向跳转页面失败 Ajax回调函数中再次使用Ajax访问controller 通过controller return来重定向跳转页面失败 ajax type pos
  • python自定义输出颜色_Python logging自定义字段输出及设置日志打印颜色

    importloggingimportosfrom logging importhandlersclassJsonFilter logging Filter 此处定义字段的默认值 如果打印信息时不设置对应字段 则为默认值 服务服务名或者服务
  • 武侠乂怎么修改服务器,武侠乂操作技巧 武侠乂手游怎么操作

    武侠乂怎么操作 武侠乂是一个主要以生存竞技玩法为主游戏 在有限的时间和安全空间内 玩家需要边生存边搜索边战斗 最终击败所有其他玩家来获得胜利 今天小辰给大家介绍一下武侠乂的操作技巧 一起来看看吧 武侠乂怎么操作 如上图 手游不像端游 整体简
  • nvidia驱动安装·

    nvidia驱动安装 禁用nouveau驱动 sudo apt get remove purge nvidia sudo gedit etc modprobe d blacklist conf 在文本最后添加 禁用nouveau第三方驱动
  • 超详细的Nginx负载均衡+高可用配置(亲测附图)

    负载均衡 目的 提升吞吐率 提升请求性能 提 高容灾 Nginx 实现负载均衡用到 proxy pass 代 模块核心配置 将客户端请求代 转发至一组 upstream 虚拟服务池 负载均衡和反向代理的区别是 反向代理由代理服务器指定特定的
  • 电商零售行业1--用户消费行为分析

    用户消费行为分析 项目背景 数据处理 导入数据 数据探索可视化 数据预处理 用户整体消费分析 用户个体消费分析 用户消费金额 消费次数 描述性统计 用户消费分布图 用户累计消费金额占比分析 贡献度 用户消费行为 首购时间 最后一次购买时间
  • 解决php7.2后报错Warning: Use of undefined constant PRE - assumed问题

    解决此种问题其实也不是很难 只是报了 Warning警告 我们只需要关闭 PHP错误提示 就行了 具体步骤如下 1 打开 php ini 2 设置 error reporting E ALL E DEPRECATED E STRICT 3
  • 使用fiddle抓包使用教程

    Fiddler是什么 Fiddler是一个http调试代理 它能 够记录所有的你电脑和互联网之间的http通讯 Fiddler 可以也可以让你检查所有的http通讯 设置断点 以及Fiddle 所有的 进出 的数据 指cookie html

随机推荐

  • 如何在css文件中使用本地ttf/woff/woff2字体?

    如何在css文件中使用本地ttf woff woff2字体 1 首先下载ttf woff woff2字体文件 免费的字体文件可以上阿里矢量图库进行下载 不过数量很少 2 在css文件中配置相应代码 font face font family
  • 关于IBM MQ6.0与MQ8.0的通信问题

    国庆之后 负责的一个项目突然出现了问题 描述问题 在网络 业务 业务量都没有增长的情况下 MQ8的批量发送通道突然就挂掉了 变成retrying状态了 消息全都堵在传输队列里了 死信队列无消息 实时通道正常 排除网络原因导致的通道问题 采取
  • Cannot declare class app\home\controller\Cases because the name is already in use

    Cannot declare class app home controller Cases because the name is already in use 命名空间冲突了 use 模型类的时候使用as别名 同一个页面上 命名空间不同
  • MyBatis-Plus主键生成策略

    主键生成策略 MyBatis Plus默认实现5种主键生成策略 分别是 AUTO 配合数据库设置自增主键 可以实现主键的自动增长 类型为nmber INPUT 由用户输入 NONE 不设置 等同于INPUT ASSIGN ID 只有当用户未
  • 常见git报错问题

    1 windows使用git时出现 warning LF will be replaced by CRLF windows中的换行符为 CRLF 而在linux下的换行符为LF 所以在执行add 时出现提示 解决办法 rm rf git 删
  • FreeRTOS实时操作系统(三)任务挂起与恢复

    系列文章 FreeRTOS实时操作系统 一 RTOS的基本概念 FreeRTOS实时操作系统 二 任务创建与任务删除 HAL库 FreeRTOS实时操作系统 三 任务挂起与恢复 FreeRTOS实时操作系统 四 中断任务管理 FreeRTO
  • 将springboot的项目打包成jar部署

    一 在项目的配置文件pom xml下导入
  • 数学建模十大算法01-蒙特卡洛算法(Monte Carlo)

    文章目录 一 生成随机数 1 1 rand 1 2 unifrnd 1 3 联系与区别 二 引入 2 1 引例 2 2 基本思想 2 3 优缺点 三 实例 3 1 蒙特卡洛求解积分 3 2 简单的实例 3 3 书店买书 0 1规划问题 3
  • Java IO流 缓冲流-BufferedInputStream、BufferedOutputStream

    首先抛出一个问题 有了InputStream为什么还要有BufferedInputStream BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterO
  • 将Python脚本编译为so文件的方法,并实现调用

    本文以Linux系统 Ubuntu 为例 讲解如何将自己的Python程序 py文件 加密为 so文件 1 安装必要的工具 首先 我们需要在Ubuntu系统中安装一些准备工具 包括python3 dev gcc Cython 其中Cytho
  • lua环境搭建数据类型

    lua作为一门计算机语言 从语法角度个人感觉还是挺简洁的接下来我们从0开始学习lua语言 1 首先我们需要下载lua开发工具包 在这里我们使用的工具是luadist 下载链接为 https luadist org repository 下载
  • 2023年每天都投递很多份简历,但都石沉大海,我还投吗?测试人该何去何从?

    各大互联网公司的接连裁员 政策限制的行业接连消失 让今年的求职雪上加霜 想躺平却没有资本 还有人说软件测试岗位饱和了 对此很多求职者深信不疑 因为投出去的简历回复的越来越少了 另一面企业招人真的变得容易了吗 有企业HR吐槽 简历确实比以前多
  • 销售、售前、项目实施不同的培训要求

    产品部门对于不同的岗位 培训要有不同的针对性 不能搞一刀切 针对销售部门 培训的要求和考核的要求 知其然 即知道产品的功能 性能 优势 针对售前部门 培训的要求和考核的要求 知其然 知起所以然 即要知道产品的 然 更要知道 然 从何来 优势
  • Linux操作系统的题目联系及解析

    一 创建文件命令练习 1 在 目录下创建一个临时目录test 这个比较基础 就是考创建 利用mkdir就能完成 如 2 在临时目录test下创建五个文件 文件名分别为passwd group bashrc profile sshd conf
  • 如何判断网页是否使用了Ajax

    方法一 一次AJAX请求头如下 一次普通get请求如下 方法2 使用JS插件查看是不是异步加载 方法3
  • 操作系统中的作业、程序、进程

    作业 作业是用户向计算机提交任务的任务实体 是要求计算机系统所做工作的集合 在用户向计算机提交作业后 系统将它放入外存中的作业等待队列中等待执行 它包括程序 数据及其作业说明书 程序 程序是为解决一个信息处理任务而预先编制的工作执行方案 是
  • 最热门的大数据技术

    大数据已经融入到各行各业 哪些大数据技术是最受欢迎 哪些大数据技术潜力巨大 对10个最热门的大数据技术的介绍 一 预测分析 预测分析是一种统计或数据挖掘解决方案 包含可在结构化和非结构化数据中使用以确定未来结果的算法和技术 可为预测 优化
  • LeetCode 2391. 收集垃圾的最少总时间

    给你一个下标从 0 开始的字符串数组 garbage 其中 garbage i 表示第 i 个房子的垃圾集合 garbage i 只包含字符 M P 和 G 但可能包含多个相同字符 每个字符分别表示一单位的金属 纸和玻璃 垃圾车收拾 一 单
  • Qt离线安装MSVC方法

    安装好Qt后 有时候需要用到MSVC编译环境 如果电脑连接了互联网 直接下载安装器在线安装即可 那么需要为没有联网的电脑安装MSVC时 就需要采用下载离线安装包 离线安装的方法 MSVC安装器下载地址 MSVC2019 https visu
  • MTCNN代码解读

    首先了解MTCNN算法 理论基础 正如上图所示 该MTCNN由3个网络结构组成 P Net R Net O Net Proposal Network P Net 该网络结构主要获得了人脸区域的候选窗口和边界框的回归向量 并用该边界框做回归