人脸检测的算法汇总

类别1: OpenCV/Dlib

Dlib由C++编写,提供了和机器学习、数值计算、图模型算法、图像处理等领域相关的一系列功能

Dlib拥有以下两个人脸检测器:

Dlib-HOG

  • 轻量级:✅
  • 模型:dlib.get_frontal_face_detector()
  • HOG检测器的检出率低,经常出现漏检的情况
  • 速度较快,只能在CPU上运行

Dlib-CNN

  • 轻量级:❌
  • 模型:dlib.cnn_face_detection_model_v1()
  • 检测效果一般
  • 在CPU上运行非常慢,但是可以在显卡上运行

Dlib的两个人脸检测器倾向于输出正方形的人脸检测框,所以往往框不住全脸,经常没个额头、没个下巴什么的。

Dlib 官网 (opens new window)

Dlib 人脸检测参考网站 (opens new window)

类别2: 深度学习多阶段检测

MTCNN

它是2016年中国科学院深圳研究院提出的用于人脸检测任务的多任务神经网络模型,该模型主要采用了三个级联的网络,采用候选框加分类器的思想,进行快速高效的人脸检测。

检测效果较为优秀,但是分成了3个独立的网络,无法做到端到端检测。

  • P-Net:是一个人脸区域的区域建议网络,该网络的将特征输入结果三个卷积层之后,通过一个人脸分类器判断该区域是否是人脸,同时使用边框回归和一个面部关键点的定位器来进行人脸区域的初步提议,该部分最终将输出很多张可能存在人脸的人脸区域。
  • R-Net:在这个网络中,将对输入进行细化选择,并且舍去大部分的错误输入,并再次使用边框回归和面部关键点定位器进行人脸区域的边框回归和关键点定位,最后将输出较为可信的人脸区域,供O-Net使用。
  • O-Net:是一个更复杂的卷积网络,该网络的输入特征更多,在网络结构的最后同样是一个更大的256的全连接层,保留了更多的图像特征,同时再进行人脸判别、人脸区域边框回归和人脸特征定位,最终输出人脸区域的左上角坐标和右下角坐标与人脸区域的五个特征点

MTCNN 参考网站 (opens new window)

类别3: 深度学习单阶段检测

libfacedetection

  • 轻量级:✅
  • 网络:SSD,参数 232万,体积 3.34M
  • 开源地址:https://github.com/ShiqiYu/libfacedetection (opens new window)
  • 官方实现:C++编译、提供caffe模型
  • 依赖:官方宣称不依赖其它任何库,只需C++编译器即可编译;实测编译也并不需要安装OpenCV,但是看代码中include了OpenCV,不知道是如何编译成功的。
  • 平台支持:Windows, Linux, ARM 等任何有C++编译器的平台
  • 速度很快,比肩Dlib-HOG,在CPU上320x240大小的图片20ms左右。
  • 框架支持:官方给出了caffe模型,给出了训练的详细文档,可以直接将模型通过caffe运行在GPU上,但是C++源码编译出来的可执行文件似乎只能运行在CPU上。

下表是官方在Windows上的测试结果:

Method Time FPS Time FPS
X64 X64 X64 X64
Single-thread Single-thread Multi-thread Multi-thread
cnn (CPU, 640x480) 58.03ms 17.23 13.85ms 72.20
cnn (CPU, 320x240) 14.18ms 70.51 3.38ms 296.21
cnn (CPU, 160x120) 3.25ms 308.15 0.82ms 1226.56
cnn (CPU, 128x96) 2.11ms 474.38 0.52ms 1929.60

Ultra-Light-Fast-Generic-Face-Detector-1MB

  • 轻量级:✅
  • 网络:SSD,该模型是针对边缘计算设备基于libfacedetection替换压缩网络设计的人脸检测模型。
  • 开源地址:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB (opens new window)
  • 框架支持:Pytorch、Caffe,官方提供了NCNN、MNN、ONNX、OpenCV的推理代码
  • 速度一般,320x240大小的图片100ms左右,
  • 在个人的测试中,该网络检测小人脸的能力极强,但也会有一些误检,不严重。在测试中检测较小人脸的时候,检测框还是很准的,但是如果人脸高度占到图片高度的一大半时,检出的人脸框往往会在右脸有一部分的缺失

RetinaFace

  • 轻量级:✅
  • Backbone:Resnet50 或 mobilenet0.25
  • 开源地址:https://github.com/deepinsight/insightface/tree/master/RetinaFace (opens new window)
  • Pytorch版本:https://github.com/biubug6/Pytorch_Retinaface (opens new window)
  • 框架支持:官方实现的版本基于MXNet,第三方也有caffe实现,这里用于测试版本:Pytorch,
  • RetinaFace有使用Resnet50 或 mobilenet0.25作为Backbone的两个版本的网络,在本文的测试中使用的是基于mobilenet0.25的版本,Resnet50的版本在CPU上非常非常慢_(:з」∠)_。
  • RetinaFace在《World's Largest Selfie》这张图片上的效果对比其它网络简直可怕,对于小人脸的检测非常有效,但是在本文的测试用例中,其效果不如“Ultra-Light-Fast-Generic-Face-Detector-1MB”
  • 在测试中RetinaFace的速度很快,仅次于libfacedetection,大概在30ms左右,误检率也不高。

CenterFace

  • 轻量级:✅
  • 开源地址:https://github.com/Star-Clouds/CenterFace (opens new window)
  • 体积:7.3MB
  • 框架支持:官方提供了Opencv+ONNX(C++/Python)、tensorrt、提供了NCNN、MNN、ONNX、Opencv的推理代码。也就是说,官方的代码无法支持caffe。
  • CenterFace的速度与libfacedetection相当,从测试用例的结果看,误检率低,效果要优于RetinaFace,但是与RetinaFace和libfacedetection想比,它的检测框看起来抖动地更加厉害一点。

下表是官方给出的在validation set of WiderFace上的测试结果:

Model Version Easy Set Medium Set Hard Set
FaceBoxes 0.840 0.766 0.395
FaceBoxes3.2× 0.798 0.802 0.715
RetinaFace-mnet 0.896 0.871 0.681
LFFD-v1 0.910 0.881 0.780
LFFD-v2 0.837 0.835 0.729
CenterFace 0.935 0.924 0.875
CenterFace-small 0.931 0.924 0.870

DBFace

在测试中,Small 版本对比常规的版本往往容易产生误检。只能说 DBFace 在速度和精度的综合考量下不占优势

DBFace官方给出的性能对比:

Method Version Size Easy Medium Hard
RetinaFace-MobileNetV2 Small 1.68MB 0.896 0.871 0.681
DBFace-Small-H-NoExt(Ours) Small 1.30MB 0.895 0.870 0.713
DBFace-Small-H(Ours) Small 1.73MB 0.899 0.876 0.728
DBFace-MobileNetV3 (Ours) Large 7.03MB 0.905 0.896 0.794
CenterFace-MobileNetV2 Large 7.3MB ? ? ?

FaceBoxes

  • 轻量级:✅
  • FaceBoxe是一种新的人脸检测方法,称之为 FaceBoxe,它在速度和准确度上都具有优异的性能。此外,FaceBoxes 的检测速度和人脸的个数无关。该算法在单核 CPU 上的运行速度是 20FPS,在 VGA 分辨率的 GPU 上面的速度是 125FPS。
  • 开源地址:https://github.com/sfzhang15/FaceBoxes (opens new window)
  • 看介绍感觉和已测试的网络速度差不了多少

SSH: Single stage Headless Face Detector

  • 轻量级:❌

S3FD: Single Shot Scale-invariant Face Detector

  • 轻量级:❌

S3FD主要解决人脸检测中检测小脸难的问题

测试效果对比

在MacBook Pro上的测试

Test on MacBook Pro 2019 i9 2.3Hz.

  • 单张人脸
  • 图片大小:320x240

20200615_4

  • 多张人脸、多人种、多光照
  • 图片大小:320x240

20200616

MAP@0.5 Result on validation set of WiderFace

merge

来自《最强六大开源轻量级人脸检测项目分析》

名称 模型大小(MB) 速度(FPS) WiderFace Easy WiderFace Medium WiderFace Hard
libfacedetection 3.34 296(i7CPU,320x240) 0.773 0.718 0.485
UltraLightFace 1.04 109(320x240) 0.853 0.819 0.539
LightFast 5.81 131(Titan xp,640x480) 0.910 0.881 0.780
CenterFace 7.3 227(2080TI,640x480) 0.931 0.924 0.870
DBFace 7.03 0.905 0.896 0.794
RetinaFace MobileNet0.25 1.68 0.887 0.87 0.791

速度对比

自己的测试

Test on MacBook Pro 2019 i9 2.3Hz.

  • 图片大小:320x240
  • 检测效果:上图GIF
mtcnn ULFGFD-1MB dlib-hog dlib-cnn libfacedetection Retinaface-mobilenet DBFace CenterFace
100ms 99ms 20ms 600ms 22ms 38ms 160ms/85ms 21ms
  • 图片大小:480x320
ULFGFD-1MB dlib-hog dlib-cnn
92ms 43ms 1230ms

来自 Github/Team-Neighborhood (opens new window)

Test on Intel i7-6700K & GTX1080.

ocv-dnn ocv-haar dlib-hog dlib-cnn fr-hog fr-cnn mtcnn S3FD insightface
17.79ms 42.31ms 108.61ms 42.17ms 108.50ms 39.91ms 334.38ms 31.87ms 21.49ms

Test on Intel Xeon E5-1660 & NVIDIA GV100.

ocv-dnn ocv-haar dlib-hog dlib-cnn fr-hog fr-cnn mtcnn S3FD insightface
16.76ms 32.95ms 124.35ms 24.58ms 121.73ms 24.88ms 292.45ms 31.07ms TBA

Test on MacBook Pro 2018 i5.

ocv-dnn ocv-haar dlib-hog dlib-cnn fr-hog fr-cnn mtcnn S3FD insightface
46.53ms 88.47ms 174.81ms 3276.62ms 174.63ms 3645.53ms 928.75ms 271.18ms TBA

其它链接

最强六大开源轻量级人脸检测项目分析 (opens new window)

适合ARM 的轻量级人脸检测算法汇总 (opens new window)