人脸检测算法落地详解

article/2025/11/8 12:22:00

人脸检测 Face Detection

目标:人脸检测的目的是找出一张图片中的所有人脸的位置信息

人脸检测是人脸其他应用的基础,只有获取到了是否有人脸和人脸的精确的位置信息,其它的应用才能继续开展,所以说人脸检测是一个基础且重要的一个技术。

本篇文章包含内容

  • 人脸检测工程应用中面临的问题
  • 人脸检测算法的发展过程
  • 工程中常用的人脸检测算法
  • 人脸检测算法案例详细说明

一、人脸检测工程应用中面临的问题

在实际工程应用中,常常会面临非常复杂的工况。一方面算法准确度会受到很多因素影响,例如目标遮挡、光线变化、小尺寸人脸等等。另一方面算法的推理时间也会受到很多因素的影响,例如硬件性能,目标数量,图片尺寸等等。下面是几种工程中常见的问题。

  • 人脸遮挡,或者人脸角度较大,都会直接导致目标不完整,对于检测算法召回率有很大影响
  • 暗光,光线不充足条件下,导致成像质量不高,会影响检测算法召回率
  • 低分辨率,低分辨率导致人脸尺寸过小
  • 人脸数量过多,图片中人脸数量多,对检测算法要求较高。例如多目标靠的太近,对于NMS算法会是一种考验,另外数量过多会影响某些算法(图像金字塔类型)的时间复杂度,例如MTCNN

二、人脸检测算法的发展过程

自从数字图像诞生,人脸检测算法就开始有人研究,历史可谓悠久。

人脸检测算法按照方法可以被分为两大类,基于特征的算法、基于图像的算法。

人脸检测技术分类

基于特征的算法就是通过提取图像中的特征和人脸特征进行匹配,如果匹配上了就说明是人脸,反之则不是。提取的特征是人为设计的特征,例如Haar,FHOG,特征提取完之后,再利用分类器去进行判断。通俗的说就是采用模板匹配,就是用人脸的模板图像与待检测的图像中的各个位置进行匹配,匹配的内容就是提取的特征,然后再利用分类器进行判断是否有人脸。

在早期工业界,具有里程碑意义的人脸检测算法----VJ算法(Viola-Jones),它是使用Haar-like特征和级联的AdaBoost分类器来进行人脸检测,在提升了精度的同时也兼顾了时间性能,VJ算法是一个框架,之后一段时间大家都是基于这个框架在做文章,例如Haar–AdaBoost, LBP–AdaBoost, GF-SVM

adaboost示例

在基于特征的方法中,学术界的人一直在尝试寻找面部的不变特征来进行更加鲁棒的检测。基于特征的方法如果要做到百分之百准确,有这样一个前提,必须存在不变的特性或特征,这样提取出来的特征百分之百存在并且很稳定。例如轮廓,肤色,眉毛,眼睛,鼻子,嘴巴和发际线。基于提取的特征,建立统计模型来描述它们的关系并验证人脸的存在。但是这些图像特征可能由于光照,噪声和遮挡而受到影响。脸部的特征边界可能会变弱,且阴影可能会导致大量强边缘,这些都会使检测算法失效。

基于图像的算法,将图像分为很多小窗口,然后分别判断每个小窗是否有人脸。通常基于图像的方法依赖于统计分析和机器学习,通过统计分析或者学习的过程来找到人脸和非人脸之间的统计关系来进行人脸检测。最具代表性的就是CNN,CNN用来做人脸检测也是目前效果最好,速度最快的。后面着重介绍CNN相关人脸检测算法。

三、工程中常用的人脸检测算法

自从2018年以来,不管是什么硬件平台,基本上都看不到传统算法做人脸检测了,几乎全部都是使用深度学习也就是CNN,来做人脸识别。早起2016年以前,由于很多硬件设备是不具备强大的并行计算能力的,也就是没有GPU,所以很多算法只能运行在CPU上,而传统CNN算法在CPU上运行时间简直是不能忍受,所以那段时间CPU平台运行的算法几乎都是AdaBoost之类的算法。

后来,随着深度学习的发展,有两个重要的原因导致CNN算法直接吞并传统算法。1,硬件计算能力爆发式增长;2,CNN模型压缩和量化部署技术快速发展。正是因为这两个原因,所以现在连树莓派这种纯arm的都可以直接部署CNN,并且效果还不错。

常用算法

这里常用的算法有

  • MTCNN
  • FaceBoxes
  • RetinaFace
  • LFFD
  • CenterFace

FDDB上数据

AlgorithmFDDB Disc ROC curves score
MTCNN94.0@1000
FaceBoxes
RetinaFace-mnet96.0@1000
LFFD97.3@1000
CenterFace98.1@1000

在WIDER FACE 的test数据集上数据

AlgorithmEasy SetMedium SetHard Set
MTCNN0.8510.8200.607
FaceBoxes0.7910.7940.715
RetinaFace-mnet0.8960.8710.681
LFFD0.9100.8810.780
CenterFace0.9320.9210.873

1、MTCNN

MTCNN是kaipeng Zhang在本科阶段研究出来的,它是一个3级联的CNN网络,分为PNet,RNet,ONet,层层递进。PNet的输入是原图经过图像金字塔之后不同尺寸的图片,最后结果由ONet输出。
MTCNN

优点:网络轻量推理时间快,工程部署灵活性大,能够输出5点landmark

缺点:检测时间受人脸数量影响,模型训练复杂

2、FaceBoxes、RetinaFace mnet、LFFD

以上都属于轻量级人脸检测算法,也属于One Stage 算法,FaceBoxes类似于SSD算法框架,采用多尺度特征层融合方式,采用anchor proposal,在不同尺度特征层上进行检测,这样就顾及到多尺度的人脸检测,FaceBoxes的文章旨在CPU上实现实时检测。

3、CenterFace

最新开源的一个人脸检测算法,github上同名项目。目前从数据来看,效果最好。

在实际工程应用中,要根据部署环境来选择人脸检测算法。例如在多人脸抓拍的场景,就不能选择MTCNN这类级联的算法,因为级联网络的推理速度与人脸数成反比,受人脸数量影响较大,MTCNN适用于人脸考勤或者人证对比的场景,只可能出现固定数量人脸的场景。

4、另外

还有一种,开袋即食。那就是dlib,这是一个人脸算法库,并且开源。不管你是用c++还是python,都可以直接使用dlib来做检测。如果想用python做实验,直接 import dlib,直接搞定。

这种自己学习一下可以,但是工程部署中一般不用。

四、人脸检测算法案例详细说明

人脸检测算法的选取跟应用场景息息相关,本人使用过以下几种算法

  • MTCNN
  • 改进过的MTCNN
  • resnet10-SSD 人脸检测
  • pelee 人脸检测

因为本人工作倾向于嵌入式部署,所以选择模型都会考虑硬件推理时间消耗,而每一个新的人脸检测算法发表出来,很大一部分的都是为了刷榜来表现自己的实力,一般不考虑推理实时性。所以算法实际工程落地,一般都会去修改一些东西达到自己的应用目的。

MTCNN由于是级联结构,所以其可玩性非常大,例如将RNet金字塔层数降低或者ONet通道数减半,加速推理时间;例如单独使用ONet做人脸跟踪;例如MTCNN魔改之后输出最大人脸消耗非常短时间,等等

详细案例、网络搭建细节、检测器训练过程将会在下一篇文章中写出。

最后,求一个关注

公众号

参考:

Filali H, Riffi J, Mahraz AM, Tairi H (2018) Multiple face detection based on machine learning. In: Proceeding of international conference on intelligent systems and computer vision, pp 1–8

Kaipeng Zhan, Zhanpeng Zhang, Zhifeng L, Yu Qiao. Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks. 2016, IEEE Signal Processing Letters


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

相关文章

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,瑞安米切尔编写,目前豆瓣、亚马逊、当当、京东等电子书综…

【python】基础网络爬虫教程

1.爬虫目的 用通俗易懂的话来说,是对多种类型数据(如文字,图片,音频,视频等)进行批量式的采集与存储。 本文为个人一些学习心得,举例对网页进行信息爬取操作,使用python中基础的方法进行爬取,便于理解学习。2.爬虫准备 需要对python有一些基础,对字符串,列表,循环结构等有了解。…

python网络爬虫及数据可视化

广东某学校的期末python作业 一、设计内容及要求 设计内容:对中国大学专业排名网站中2021年,计算机科学与技术专业,进行数据爬取和数据可视化。 URL: https://www.shanghairanking.cn/rankings/bcmr/2021/080901 设计要求&am…

python网络爬虫的流程图_Python 网络爬虫程序架构及运行流程

1 前言 Python开发网络爬虫获取网页数据的基本流程为: 发起请求 通过URL向服务器发起request请求,请求可以包含额外的header信息。 获取响应内容 服务器正常响应,将会收到一个response,即为所请求的网页内容,或许包含HTML,Json字符串或者二进制的数据(视频、图片)…

python网络爬虫--网页登录

1、前言 主要用到python的selenium库,通过模仿浏览器行为定位登录所需的标签位置,实现网页登录功能.最后在码云(gitee)上测试自动登录功能. 2、selenium定位网页元素 关于selenium的使用前准备可以看到我之前的一篇…

python网络爬虫可以干什么,python网络爬虫有什么用

python爬虫能做什么 世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后续的大数据分析、挖掘、机器学习等提供重要的数据源。什么是爬虫? (推荐学习:Python视频教程)网络爬虫(又被称为网…

python网络爬虫技术课后答案_尔雅《Python网络爬虫技术(2020年秋季学期)》网课答案...

尔雅《Python网络爬虫技术(2020年秋季学期)》网课答案 法律的一般含义是() 答:法律是由国家创制并保证实施的行为规范 下列属于急症手术的是 答:肝破裂 脾气统摄血液的功能,实际上是()的固摄作用的体现 答:气 中国古代南北争战中&…

(一)python网络爬虫(理论+实战)——爬虫的初步认识

小白都能学会的python网络爬虫专栏: https://blog.csdn.net/c1007857613/category_12127982.html 序言 本人从事爬虫相关工作已8年以上,从一个小白到能够熟练使用爬虫,中间也走了些弯路,希望以自身的学习经历,让大家能…

Python网络爬虫经典书籍推荐

1. Python编程:从入门到实践 - 2016 本书是一本针对所有层次的Python 读者而作的Python 入门书。全书分两部分:第一部分介绍用Python 编程所必须了解的基本概念,包括matplotlib、NumPy 和Pygal 等强大的Python 库和工具介绍,以及…

(二)python网络爬虫(理论+实战)——爬虫分类和基本流程

小白都能学会的python网络爬虫专栏: https://blog.csdn.net/c1007857613/category_12127982.html 序言 本人从事爬虫相关工作已8年以上,从一个小白到能够熟练使用爬虫,中间也走了些弯路,希望以自身的学习经历,让大家能…

python网络爬虫实验报告_Python网络爬虫实例讲解

聊一聊Python与网络爬虫。 1、爬虫的定义 爬虫:自动抓取互联网数据的程序。 2、爬虫的主要框架 爬虫程序的主要框架如上图所示,爬虫调度端通过URL管理器获取待爬取的URL链接,若URL管理器中存在待爬取的URL链接,爬虫调度器调用网…

Python网络爬虫简介与环境配置

第一章 Python网络爬虫简介与环境配置 1.1 网络爬虫简介 随着互联网的快速发展越来越多的信息被发布到互联网上,这些信息被嵌入到各种各样的网页结构及样式中。虽然搜索引擎可以辅助用户搜索这些网页信息,但是通用的搜索引擎的目标是尽可能覆盖全网络&…

五分钟学会Python网络爬虫

但不管怎样,爬虫技术是无罪的,还是值得我们开发人员去学习了解一下的。在学习之前,我们还是要先了解一下相关概念。 什么是爬虫 网络爬虫:又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。 大数据时代,要进行数据分析,首先…

python爬虫简介

python爬虫是收集互联网数据的常用工具,近年来随着互联网的发展而快速发展。使用网络爬虫爬取网络数据首先要了解网络概念和主要分类,各类爬虫的系统结构、运作方式,常用策略,以及主要的应用场景,同时,出于…