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

时间:2024-05-21 18:58:00

最近在微信公众号里看到轻量级人脸检测算法大盘点的文章,里面还提供了github源码地址,我就把它们逐个下载到本地win10-cpu机器上,调试通过运行。去年在github下载过一个包含6种人脸检测的程序(地址是 https://github.com/cs-giung/face-detection-pytorch),分别是pyramidbox,dsfd,s3fd,tinyface,facebox,mtcnn,但是这些算法大多是重量级的网络模型,它在一幅图片上的人脸检测结果和运行耗时统计直方图如下

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

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

可以看到pyramidbox,dsfd,s3fd,tinyface这4个模型是非常耗时的,这在实际应用场景种是不满足实时性的要求的。因此我就整理了最近一年之内的轻量级人脸检测算法的程序,独立编写一个包含多种轻量级人脸检测算法的程序。pytorch是我最喜欢的深度学习框架,在部署模型的前向推理时,我更喜欢用opencv的dnn模块。因而,我收集到的轻量级人脸检测算法的程序如果是基于pytorch框架的,我就不会对代码做较大的改动,如果程序是基于caffe,tensorflow或者darknet的,我会把程序改写成用opencv的dnn模块做人脸检测。最后我整理了9种人脸检测算法,它们分别是:

(1) Ultra-Light-Fast-Generic-Face-Detector,程序里简写为ultraface

(2) LFFD:A Light and Fast Face Detector for Edge Devices,程序里简写为lffd

(3) CenterFace, 程序里简写为centerface

(4) DBFace, 程序里简写位dbface

(5) RetinaFace, 程序里简写为retinaface

(6) MTCNN, 程序里简写为mtcnn

(7) SSD, 程序里简写为ssdface

(8) facebox,程序里简写为facebox

(9) yoloface,程序里简写为yoloface

其中ssdface参考的是https://github.com/spmallick/learnopencv/blob/master/FaceDetectionComparison/face_detection_opencv_dnn.py里的

yoloface参考的是https://github.com/ouyanghuiyu/yolo-face-with-landmark,它包含人脸关键点检测

此外,我编写的程序里还包含 PFLD: A Practical Facial Landmark Detector,它是一个简单、快速、超高精度人脸特征点检测算法。到此一共有9种人脸检测和1个人脸关键点检测的程序,我用面向对象的思想把每一种人脸检测算法写成一个类的形式,里面包含构造函数__init__和成员函数detect。最后,编写一个主函数,来做这9种人脸检测算法在同一幅图上的人脸检测结果和运行耗时的比较。我编写的这套程序在github上的地址是 https://github.com/hpc203/9kinds-light-face-detector-align-recognition

我分别测试了两幅图片,第一幅图片的检测结果和运行耗时统计直方图如下

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

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

第2幅图片的检测结果和运行耗时统计直方图如下

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

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

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

在我的程序里还有提取人脸特征向量和计算人脸特征向量距离的模块,这两个模块再加上前面的人脸检测和关键点检测(做人脸对齐)的模块,这样就组成了人脸检测+人脸对齐+人脸识别,这时候你就可以构造一个实时的人脸识别系统。具体实现方式可以参见github代码里的README.md