人脸检测算法理解之mtcnn

article/2025/11/8 10:04:49

最近在一次交流活动中,再次听别人讲人脸检测算法mtcnn,虽然以前也断断续续听过两次,对于一些技术细节仍不清楚,为了解决自己的困惑,笔者又重拾起这一算法,在认真研读论文和思考后有了新的理解,于是记录下来。下文主要解释mtcnn中min_face_size这个参数是怎么起作用的、如何使用图像金字塔等,希望能对大家有所帮助。

1 相关知识点

1.1 “network in network”

作为新加坡国立大学在2013年发表在CVPR上的一篇文章,它首次提出了“Global Average Pooling”,也即将feature map转换为score map。

1.2 OverFeat

该文章的全名为“OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks”。该方法是ILSVRC2013检测任务的冠军算法,这里重点介绍“how a multiscale and sliding window approach can be efficiently implemented within a ConvNet”。对于非全卷积网络,如果设置滑动窗口尺寸为 m × n m\times n m×n,那么对于更大的输入图像,必须对每一个滑动窗口,分别使用前向推理,这样比较耗时。全卷积网络中用 “Global Average Pooling”代替 “Fully Connected Layer”,所以网络的输入图像的尺寸可以任意。
在这里插入图片描述

由图可见,输出feature map的每一个空间位置,对应了输入图像的一个窗(感受野),并且,前向推理是对整个的feature map做卷积,所以所有滑动窗共享了计算量。

2 mtcnn

mtcnn,全称为“Multi-task Cascaded Convolutional Networks”,作为一种人脸检测和关键点(5个点)算法,它以速度快、精度高而广为人知。尽管后面有更好的人脸检测算法,比如FaceBoxes算法,但是mtcnn的精度已经能够满足通常的人脸检测要求,所以用的最广泛。

2.1 最小人脸尺寸

在解释最小人脸尺寸之前,先贴原文中的一幅网络结构图,在这里插入图片描述
显然,P-Net是全卷积网络,且最小输入尺寸为 12 × 12 12\times 12 12×12。假设在推理阶段的输入图像尺寸为 100 × 100 100\times 100 100×100,构造图像金字塔,使得图像最小尺寸为 20 × 20 20\times 20 20×20,将不同尺寸的图像按照等比例缩放,原文中设置缩放因子为0.6,缩放后的图作为网络的输入,那么,最小尺寸的图像缩放后尺寸为 12 × 12 12\times 12 12×12,输出的特征图尺寸为 1 × 1 1\times 1 1×1,最大尺寸的图像缩放后尺寸为 60 × 60 60\times 60 60×60,输出的特征图尺寸为 25 × 25 25\times 25 25×25。根据上面1.2中的内容,输出特征图中的每一个点对应输入缩放图像的局部感受野尺寸为 12 × 12 12\times 12 12×12,映射到原图上的尺寸为 20 × 20 20\times 20 20×20。换句话说,P-Net等价于分别对金字塔中每一个尺度的图像,做基于滑动窗口的分类和目标检测任务,且窗口的尺寸为 20 × 20 20\times 20 20×20。当 100 × 100 100\times 100 100×100的输入图像中人脸区域很大时,取个极限,比如 100 × 100 100\times 100 100×100,那么可以基于金子塔中最小尺寸的图像 20 × 20 20\times 20 20×20做滑窗检测出人脸,当 100 × 100 100\times 100 100×100的输入图像中人脸区域很小时,只能基于金子塔中最大尺寸的图像 100 × 100 100\times 100 100×100做滑窗检测出人脸,此时检测出来的人脸尺寸为 20 × 20 20\times 20 20×20,综上可知,mtcnn算法根据预先设定的min_face_size参数,可以控制任意输入图像中能检测出的最小人脸尺寸。

2.2 Q&A

2.2.1 P-Net的bounding box regression任务分支,为什么是计算的相对偏移?

答:(1)帅同事提出了他的观点,相对坐标可以为任意值,本身不需要满足任何约束条件,回归起来更容易,比如回归值为 ( d x 1 , d y 1 , d x 2 , d y 2 ) (d_{x_{1}}, d_{y_{1}}, d_{x_{2}}, d_{y_{2}}) (dx1,dy1,dx2,dy2),其中, ( x 1 , y 1 ) 、 ( x 2 , y 2 ) (x_{1}, y_{1})、(x_{2}, y_{2}) (x1,y1)(x2,y2) 分别表示bounding box的左上角和右下角的坐标。笔者认为这种想法欠妥,因为回归值如果不满足一定的约束条件的话,也可能导致回归出不存在的bounding box。
(2)比较科学的解释,参考https://blog.csdn.net/zijin0802034/article/details/77685438。

2.2.2 P-Net的bounding box regression任务分支,得到的是相对偏移,是相对什么的偏移?

答:根据上面2.1中的解释,输出特征图中每一个像素对应输入图像的某一个滑窗,这里的偏移量即是相对于该滑窗的偏移。

2.2.3 mtcnn算法的训练和推理阶段,都要使用图像金字塔吗?

答:训练阶段不需要,推理阶段需要使用图像金字塔。训练的时候,需要对训练集中的每个样本缩放到 12 × 12 12\times 12 12×12的大小,用来训练全卷积网络。在推理的时候,因为测试图像中人脸区域的尺度未知,所以需要使用图像金字塔技术,增加人脸区域的召回率。

2.2.4 具体解释一下,为什么训练阶段不使用图像金字塔?

答:对多个尺度的输入图像做训练,训练是非常耗时的。因此通常只在推理阶段使用图像金字塔,提高算法的精度。

2.2.5 图像金字塔是用来解决什么问题的?

答:图像中目标的尺寸可能差异很大,以人脸图像为例,如果是人脸特写的图像,那么图像中的人脸尺寸就会较大,如果非特写,那么图像中的人脸尺寸就会较小。针对目标的多尺度问题,有多种解决方案,图像金字塔技术则为其中之一,其余的还有滑动窗口、特征金字塔、FPN结构等,参见下图。在这里插入图片描述


参考资料:
https://arxiv.org/abs/1604.02878
https://medium.com/@jonathan_hui/understanding-feature-pyramid-networks-for-object-detection-fpn-45b227b9106c


http://chatgpt.dhexx.cn/article/gLsRHUUi.shtml

相关文章

人脸检测算法总结:PyramidBox

人脸检测算法总结:PyramidBox IntroductionPyramidBoxTraining PyramidBox是百度提出的人脸检测算法,提出后在widerface上排第一(现在已经不是了,但仍居前三),PyramidBox可以看做是S3FD的升级版&#xff0c…

人脸检测算法总结:S3FD

人脸检测算法总结:S3FD——Single Shot Scale-invariant Face Detector IntroductionS3FDTraining结论 S3FD是中科院自动化所的一篇文章,当时一出现就刷新了wider face榜单,比上一篇提到的SSH略高一点。这个算法主要是解决小人脸的检测问题&a…

SSH人脸检测算法(SSH: Single Stage Headless Face Detector)

论文:《SSH: Single Stage Headless Face Detector》 链接:https://arxiv.org/pdf/1708.03979.pdf 代码链接:https://github.com/mahyarnajibi/SSH 摘要 我们介绍了单点无头(SSH)人脸检测器。与两阶段提议分类检测器…

人脸检测算法MTCNN

本文将对人脸检测效果不错的MTCNN算法做一个梳理。 论文地址 MTCNN主要分为三步: 最初先对图像进行多尺度变换,获取图像金字塔,获取图像多尺度信息。 P-net(Proposal Network): 主要使用一个全卷机网络,获取候选框…

YbFace:完全开源的人脸检测算法

YbFase(yolo base face detector),是一个借鉴了yolov3的网络结构,在多特征尺度下预测人脸框的人脸检测算法.并结合了yolov4使用的mish激活函数.该模型大小仅为7,8M,无论模型大小,还是准确率,还是执行速率都很有竞争力. 源码地址(github): face_detect 如果对你有…

适合ARM 的轻量级人脸检测算法汇总

目录 1、场景需求2、libfacedetection2.1 相关链接2.2 算法简介2.3 算法效果展示2.4 算法性能展示 3、Ultra-Light-Fast-Generic-Face-Detector-1MB3.1 相关链接3.2 算法简介3.3 算法效果展示3.4 算法性能展示 4、BlazeFace4.1 相关链接4.2 算法简介4.3 算法效果展示4.4 算法性…

opencv算法+人脸检测

文章目录 ORB算法视频读写图像人脸识别摄像头实时人脸检测 ORB算法 orb算法结合了Fast和Brief算法,提出了构造金字塔,为Fast特征点添加了方向,从而使得关键点具有了尺度不变性和旋转不变性。 # orb算法结合了Fast和Brief算法,提…

人脸检测算法对比分析

 https://blog.csdn.net/twinkle_star1314/article/details/53318689 人脸识别包括以下5个步骤:人脸检测、图像预处理、特征提取、匹配、结果输出。 人脸检测是人脸识别中的第一个环节,是一项关键技术。人脸检测是指假设在输入…

人脸检测算法:mtcnn简介

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

10种轻量级人脸检测算法的比拼

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 转自:https://blog.csdn.net/nihate/article/details/108798831 计算机视觉研究院专栏 作者:Edison_G 最近在微信公众号里看到…

mtcnn人脸检测算法介绍

0. 概述 MTCNN(Multi-task Cascaded Convolutional Networks,多任务卷积神经网络),是2016年由Kaipeng Zhang、Zhanpeng Zhang等提出的一种多任务人脸检测模型,该模型使用3个CNN级联算法结构,将人脸检测和人脸特征点提取同时完成。…

Matlab人脸检测算法详解

这是一个Matlab人脸检测算法详解 前言人脸检测结果算法详解源代码解析所调用函数解析bwlabel(BW,n)regionpropsrectangle 总结 前言 目前主流的人脸检测与人脸识别算法主要基于人工神经网络进行训练与检测,本文基于数字图像处理解析一个非人工神经网络的有趣人脸检…

人脸检测算法落地详解

人脸检测 Face Detection 目标:人脸检测的目的是找出一张图片中的所有人脸的位置信息 人脸检测是人脸其他应用的基础,只有获取到了是否有人脸和人脸的精确的位置信息,其它的应用才能继续开展,所以说人脸检测是一个基础且重要的一…

MATLAB人脸检测算法

MATLAB人脸检测算法 人脸检测是将人脸从复杂的背景图像中检测出来,它是实现人脸识别的基础和前提。 肤色重建 使用人脸肤色模板对灰度图像进行肤色重建,使其变成彩色图像,效果如下: 在函数function Rgray2rgb1(img1,img2)中&a…

人脸检测算法

https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html 人脸识别各论文参考 知乎一个栏目: https://zhuanlan.zhihu.com/p/25025596 首先介绍一下常用人脸检测的常用数据库: FDDB和WIDER FACE FDDB总共2845张图像&#xff0…

一文带你了解人脸检测算法的类型及其工作原理

在过去的几年里,人脸识别受到了广泛的关注,被认为是图像分析领域最有前途的应用之一。人脸检测可以考虑人脸识别操作的很大一部分。根据其强度将计算资源集中在持有人脸的图像部分。图片中的人脸检测方法很复杂,因为人脸存在可变性&#xff0…

人脸识别之人脸检测算法

人脸识别的一般步骤:人脸检测->人脸对齐->人脸特征提取->(计算人脸的差值)三元组损失/中心损失->差值小于某一阈值则为同一个人,差值大于某一阈值则不是同一人。 本文将对每一个步骤的技术现状,进行分析&a…

Python网络爬虫与信息提取(17)—— 题库爬取与整理+下载答案

前言 上一节实现了题目的整理,没整理答案是不完整的,所以这一节加上答案的爬取。 上一节地址:Python网络爬虫与信息提取(16)—— 题库爬取与整理 效果 思路 爬答案有点难搞,像这种题库的答案都是要么要会员,要么要登陆账号才能看答案,这种就比较费劲了,解决方案有…

Python 网络爬虫及数据可视化

网络爬虫及数据可视化 1 项目背景1.1Python的优势1.2网络爬虫1.3数据可视化1.4Python环境介绍1.4.1简介1.4.2特点 1.5扩展库介绍1.5.1安装模块1.5.2主要模块介绍 2 需求分析2.1 网络爬虫需求2.2 数据可视化需求 3 总体设计3.1 网页分析3.2 数据可视化设计 4 方案实施4.1 网络爬…

python网络爬虫权威指南 百度云-Python网络爬虫权威指南 PDF 第2版

给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python、网络爬虫方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小5.54 MB,瑞安米切尔编写,目前豆瓣、亚马逊、当当、京东等电子书综…