【ESP32-Face】ESP32人脸检测MTMN 模型以及face_detect()函数详解

news2024/11/25 2:34:47

ESP32-Face 人脸检测MTMN模型以及 face_detect 函数详解

  • 1. MTMN 模型
  • 2. 模型网络
  • 3. API 函数接口介绍
  • 4. 模式选择
  • 5. 参数配置

1. MTMN 模型

MTMN 是一个人脸检测的轻量级模型,专门应用于嵌入式设备。它是由 MTCCN 和 MobileNets 结合而成。

2. 模型网络

MTMN由三个主要部分组成:

  • 提议网络,Proposal Network(P-Net):提议候选边界框,并将其发送到R-Net;
  • 细化网络,Refine Network(R-Net):从P-Net中筛选边界框;
  • 输出网络,Output Network (O-Net):输出最终结果,即精确的边界框、置信系数和5点标记。(accurate bounding box、confidence coefficient and 5-point-landmark)

下图显示了MTNM的工作流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNfGlblw-1669865618419)(H:\typora_picture\image-20221201103337590.png)]

3. API 函数接口介绍

box_array_t *face_detect(dl_matrix3du_t *image_matrix, mtmn_config_t *config);

face_detect() 函数处理整个人脸检测的任务。

函数参数—输入:

  • image_matrix: 一帧dl_matrix3du_t 类型的图像
  • config: MTMN的配置信息。配置信息如下文介绍。

函数输出:

  • 一个box_array_t 类型的值,包括 face boxes,以及每个框的 score and landmark,其中 len 表示每帧图像中人脸的数量
typedef struct tag_box_list
{
    fptp_t *score;
    box_t *box;
    landmark_t *landmark;
    int len;
} box_array_t;

MTMN 的配置信息: mtmn_config_t 结构体详解,结构体中相关参数可以供用户自己修改

typedef struct
{
    float min_face;                 /// 检测到人脸的最小尺寸
    float pyramid;                  /// 输入图像的梯度缩放比例
    int pyramid_times;              /// 金字塔调整大小的时间
    threshold_config_t p_threshold; ///  P-Net 的阈值
    threshold_config_t r_threshold; ///  N-Net 的阈值
    threshold_config_t o_threshold; ///  O-Net 的阈值 
    mtmn_resize_type type;          /// 图像调整大小类型. 当 'type'==FAST时,'pyramid'将失效
} mtmn_config_t;
typedef struct
{
    float score;          /// 置信系数的阈值。置信系数低于阈值的候选边界框将被过滤掉。
    float nms;            /// NMS的阈值。在非最大抑制期间,重叠比率高于阈值的候选边界框将被过滤掉。
    int candidate_number; /// 允许的候选边界框的最大数量。仅保留所有候选边界框的第一个“candidate_number”。
} threshold_config_t;
  • min_face:
    • 范围:12~n,n为输入图像的的最短边的长度
    • 对于固定大小的原始输入图像, min_face 的值越小,则表示以下三点,反之亦然
      • 生成的不同size图像数量越多
      • 可检测的人脸的size越小
      • 处理时间越长
  • pyramid
    • 指定控制生成的金字塔(pyramid)的比例
    • 范围: (0,1)
    • 对于固定大小的原始输入图像, minpyramid_face 的值越大,则表示以下三点,反之亦然
      • 生成的不同size图像数量越多
      • 检测比越高
      • 处理时间越长
  • pyramid_times
    • 指定控制生成的金字塔(pyramid)的数量
    • Range: [1,+inf)
    • pyramidmin_face一起, 可以在[min_face, min_face/pyramid^pyramid_times] 以及min_face/pyramid^pyramid_times < 输入原始图像的最短边的长度 这两个范围下确定主要可检测人脸的size
  • type
    • options: FAST or NORMAL
      • FAST: 默认 pyramid = 0.707106781. pyramid 值相同情况下吗,fast 类型速度更快
      • NORMAL:自定义pyramid 的值
  • score threshold
    • Range: (0,1)
    • 对于固定大小的原始输入图像, score 的值越大,则表示以下2点,反之亦然
      • 过滤出的候选边界框的数量越大
      • 检测率越低
  • nms threshold
    • Range: (0,1)
    • 对于固定大小的原始输入图像, score 的值越大,则表示以下2点,反之亦然
      • –检测到重叠面的可能性越高;
      • -检测到的同一人脸的候选边界框的数量越大
  • candidate number
    • 指定每个网络的输出候选框的数量。
    • 范围:P-Net: [1, 200] R-Net: [1, 100] O-Net: [1, 10]
    • 对于固定大小的原始输入图像
      • candidate_number 越大,处理时间越长
      • O-Net的 candidate_number 值越大,检测到的人脸数量越多,

用户可自定义以下参数:

mtmn_config.type = FAST;
mtmn_config.min_face = 80;
mtmn_config.pyramid = 0.707;
mtmn_config.pyramid_times = 4;
mtmn_config.p_threshold.score = 0.6;
mtmn_config.p_threshold.nms = 0.7;
mtmn_config.p_threshold.candidate_number = 20;
mtmn_config.r_threshold.score = 0.7;
mtmn_config.r_threshold.nms = 0.7;
mtmn_config.r_threshold.candidate_number = 10;
mtmn_config.o_threshold.score = 0.7;
mtmn_config.o_threshold.nms = 0.7;
mtmn_config.o_threshold.candidate_number = 1;

4. 模式选择

MTMN 目前为止有以下版本:

  • MTMN lite in quantization (default)
  • MTMN lite in float
  • MTMN heavy in quantization

5. 参数配置

我们使用相同的配置和我们自己的测试集评估所有型号。结果如下所示。

mtmn_config.type = FAST;
mtmn_config.pyramid = 0.707;
mtmn_config.min_face = 80;
mtmn_config.pyramid_times = 4;
mtmn_config.p_threshold.score = 0.6;
mtmn_config.p_threshold.nms = 0.7;
mtmn_config.p_threshold.candidate_number = 100;
mtmn_config.r_threshold.score = 0.7;
mtmn_config.r_threshold.nms = 0.7;
mtmn_config.r_threshold.candidate_number = 100;
mtmn_config.o_threshold.score = 0.7;
mtmn_config.o_threshold.nms = 0.7;
mtmn_config.o_threshold.candidate_number = 1;
Average Time Consumption (ms)
MTMN lite in quantization143.19
MTMN lite in float178.45
MTMN heavy in quantization242.84

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搬砖日记:关于sync用不了的问题

自己封装了个输入框的组件&#xff0c;想要实现的输入框的值的修改可以实时修改到父组件的值 印象中看到过人家用.sync修饰符去实现这个功能&#xff0c;大抵是 //父组件 <searchInput :value.sync"value"></searchInput> //子组件 <input v-model&qu…

(4E)-TCO-PEG4-DBCO,1801863-88-6,反式环辛烯-四聚乙二醇-二苯并环辛炔

(4E)-TCO-PEG4-DBCO物理数据&#xff1a; CAS&#xff1a;1801863-88-6 | 中文名&#xff1a;(4E)-反式环辛烯-四聚乙二醇-二苯并环辛炔 | 英文名&#xff1a;(4E)-TCO-PEG4-DBCO 结构式&#xff08;Structural&#xff09;&#xff1a; (4E)-TCO-PEG4-DBCO物理数据补充&…

vue3 组件篇 tag

文章目录组件介绍标准用法自定义背景色和字体颜色点击和关闭的回调组件代码参数说明关于dxui组件库组件介绍 tag组件&#xff0c;是前端开发常用组件之一&#xff0c;无论是移动端&#xff0c;还是pc端&#xff0c;我们都能经常看到。tag组件的交互也比较简单&#xff0c;需要…

用了4年,终于发现了这款国产报表工具的魅力

第一次接触FineReport应该是在2018年&#xff0c;当时刚从美团出来进了现在的国企IT部门。一晃用了快4年了。4年前&#xff0c;我觉得FineReport是一款万能的企业级系统&#xff0c;4年后&#xff0c;我的这个想法依旧没有改变。先别开喷&#xff0c;看完我为什么这么想再说。 …

计算化学:如何在云平台上计算声子谱

内容摘自北鲲云五月份直播内容【声子谱的计算、后处理与分析实例】 另有文章【不同压强下ZnO的声子谱计算及其收敛性测试】可在发布的内容中查阅。 所有计算皆在北鲲云超算平台上完成。 计算声子谱所需软件&#xff1a; 1 VASP(Vienna Ab-initio Simulation Package) 结构计…

护理床控制板开发,帮您解决卧床护理难题

多功能护理床是一款针对术后康复、老年人、下肢瘫痪等行动不便人群设计的一款高科技产品&#xff0c;帮助他们解决日常生活问题&#xff0c;减轻护理压力。相对于国外成熟的护理床产品&#xff0c;中国的护理床市场尚处于初期发展阶段。护理床控制板通过按键控制&#xff0c;完…

BOSS直聘新财报:用户、技术两手抓

与传统招聘模式相比&#xff0c;网络招聘具有信息传播速度快、时效性强、沟通效率高等特点&#xff0c;再加上受疫情这一外界因素影响&#xff0c;线上面试频率增高&#xff0c;广大求职者们对网络招聘的接受度开始日益提升。随着线上招聘市场规模的逐渐扩大&#xff0c;行业内…

一文学会Canal怎么用

文章目录一.概念1.什么是Canal2.Canal的基本原理二.Mysql配置1. 安装2. 开启mysql的binlog3.mysql创建cannl用户并授权三.安装配置ES&#xff0c;kibana四.安装canal-server五.安装canal-admin六.安装canal-adapter七.通过canal和RabbitMQ将mysql数据同步ES一.概念 1.什么是Ca…

java EE初阶 — synchronized 关键字 - 监视器锁 monitor lock

文章目录1.synchronized 的特性1.1 互斥1.2 可重入2.synchronized 使用示例3.Java 标准库中的线程安全类1.synchronized 的特性 1.1 互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到同一个对象 synchronized 就会阻塞等…

大数据培训之Hadoop序列化

序列化概述 1.1什么是序列化 序列化就是把内存中的对象&#xff0c;转换成字节序列(或其他数据传输协议)以便 于存储到磁盘(持久化)和网络传输。 反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化 数据,转换成内存中的对象。 1.2为什么要序列化 一般来说&am…

【leetcode】2259. 移除指定数字得到的最大结果(js实现)

1. 题目 2259. 移除指定数字得到的最大结果 2. 思路 根据题意进行模拟&#xff0c;每次找到与digit相同的元素就将其移除&#xff0c;将剩余的字符串与存储最大值的字符串进行比较&#xff0c;一直保持max中保存的是最大值&#xff0c;最终将max返回。 3. 代码 /*** para…

用强化学习玩《超级马里奥》

Pytorch的一个强化的学习教程&#xff08; Train a Mario-playing RL Agent&#xff09;使用超级玛丽游戏来学习双Q网络(强化学习的一种类型)&#xff0c;官网的文章只有代码&#xff0c; 所以本文将配合官网网站的教程详细介绍它是如何工作的&#xff0c;以及如何将它们应用到…

[附源码]Python计算机毕业设计SSM科技类产品众筹系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计JAVA乡村振兴惠农推介系统

[附源码]计算机毕业设计JAVA乡村振兴惠农推介系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM myb…

项目ERP与传统ERP的区别是什么?

许多不认为传统 ERP 有用的企业正在寻找项目 ERP。对于企业软件来说&#xff0c;这是一种利用项目管理实践和功能的相对新颖的方法。与传统 ERP 相比&#xff0c;项目 ERP 旨在提供对公司流程更全面的概述。这种类型的解决方案对于建筑公司或项目制造商等项目公司来说是一个很好…

聚类基本概念及常见聚类算法和EM算法

1. 基本概念 1.1 定义 聚类&#xff1a;发现数据中分组聚集的结构&#xff0c;根据数据中样本与样本之间的距离或相似度&#xff0c;依据类内样本距离小&#xff08;相似度大&#xff09;、类间样本距离大&#xff08;相似度小&#xff09;将样本划分为若干组/类/簇。 基于划分…

【毕业设计】1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文)

typora-root-url: ./ 【毕业设计】1-基于单片机的城市轨道交通列车超速防护系统_里程表设计&#xff08;原理图PCB源码仿真工程答辩论文&#xff09; 文章目录typora-root-url: ./【毕业设计】1-基于单片机的城市轨道交通列车超速防护系统_里程表设计&#xff08;原理图PCB源码…

postgres源码解析39 表创建执行全流程梳理--3

本文结合实例讲解表创建执行流程 [CREATE TABLE wp_shy(id int primary key, name carchar(20))],相关知识回顾见&#xff1a; postgres源码解析38 表创建执行全流程梳理–1 postgres源码解析38 表创建执行全流程梳理–2 执行流程图 transformCreateStmt函数是表创建真正的入口…

系统封装制作

工具网址&#xff1a; 镜像下载&#xff1a; Windows 10 22H2 - MSDN - 山己几子木 (sjjzm.com)pe工具&#xff1a;【新提醒】优启通 v3.7.2022.0910&#xff08;2022.10.14 发布&#xff09;_IT天空原创软件_IT天空 (itsk.com)万能驱动&#xff1a;万能驱动 v7.22.0912.2&…

国产全志T3+Logos FPGA开发板(4核ARM Cortex-A7)规格书

评估板简介 创龙科技TLT3F-EVM是一款基于全志科技T3四核ARM Cortex-A7 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核国产工业评估板,ARM Cortex-A7处理器单元主频高达1.2GHz。评估板由核心板和评估底板组成,核心板CPU、FPGA、ROM、RAM、电源、晶振、连接器等所有器件均…