文章目录


【精华】最强六大开源轻量级人脸检测项目分析

随着深度学习的兴起,工业界和学术界越来越多的使用基于深度学习的方法,而不是传统的基于模板匹配,纹理提取或者像素积分图等方法。因为人脸检测本身并不属于特别复杂的任务,因此轻量级的深度学习模型即可满足该任务。本文汇总了六大开源的人脸检测项目。

虽说深度学习是个黑箱,但基于深度学习的通用目标检测算法(例 如 Faster-RCNN,SSD,YoloV3、 RetinaNet 等)的检测效果和鲁棒性,远远的超过基于纹理、边缘、Harr 特征、Sift 特征的传统计算机视觉方法,而且近几年随着模型压缩、量化技术的进步,模型运行速度也越来越快。

对于通用的目标检测算法,以大家常用的 SSD 和 YoloV3 算法为例,因为算法在设计之初,是为 Pascal VOC 或者 COCO 这种 20 类 和 80 类的多类别任务设计的,因此其 backbone 网络,也就是特征提取网络一般使用 VGG16、Darknet53、ResNet18 这种网络,这些网络的一个通用特点是,其卷积层的卷积核数目通常比较多(例如 256,512),导致模型参数量动辄几千万,运算量巨大。

如果我们拿这些通用目标检测算法来检测一类,比如只检测人脸、行人或者车辆时,使用那么多的卷积核数量、那么深的网络其实是不必要的。如果要检测 80 个类别,可能需要更多参数量来拟合,但是对于一两个类别,其实是有点杀鸡用宰牛刀了,如果你的任务不复杂,却用了 ResNet18/34 这种网络,你会发现很多卷积核的激活,其实是 0,导致白白多增加了很多计算量。所以,针对特定的人脸检测任务,其实一些非常轻量级的网络即可满足任务要求。

对于比赛刷榜,我们可以用很大的模型,例如某 AI 公司在 WiderFace 上夺冠的模型,结构用 RetinaNet,backbone 用 ResNet152,另外,FPN 结构也安排上,多模型融合安排上,更多的 anchor 组数安排上,这样的模型对于刷榜非常实用,但是在工业界非常不实用,假如要部署到 ARM 的嵌入式设备上,大概率直接卡死。

随着 AI 落地为王时代的到来,大家越来越注重精度和速度的权衡(trade off),本文精选了六大轻量级的开源人脸检测项目,并对其进行简单赏析和介绍。

言归正传,下面我们按照 Github 上 star 数目从高到低依次介绍。

1 libfacedetection

Github star: 9.3k

作者:于仕琪

链接:https://github.com/ShiqiYu/libfacedetection

模型参数量:232 万,体积 3.34M

前几天元峰已经对该项目进行过一次介绍了,该项目使用一个 SSD 架构的人脸检测模型,在酷睿 i7 的 CPU 上,320x240 分辨率下可以达到 296.21 FPS,下图是该项目在不同分辨率和单线程下的速度概览。

图片

模型结构也比较简单,就是一个轻量级的 SSD 架构,共四个定位层,而且借鉴了 RetinFace 的关键点方法,可以同时回归 5 个关键点。模型体积只有 232 万,体积仅有 3.34M

图片

该项目的最大亮点,其实是于老师搞了一个纯 C++ 的推理版本,不依赖第三方深度学习库,非常有利于工程部署。

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

Github star: 4.7k

作者:Linzaer

链接:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB

体积:1.04M, int8 量化后 300KB

该模型是针对边缘计算设备设计的人脸检测模型。并提供了精简网络和 RFB 网络两种,在 320x240 的输入分辨率下 90~109 FPS 左右。

该模型的结构与上述于老师的模型结构非常相似,也是 SSD 架构,共有 4 个定位层,模型结构如下图所示。

图片

另外,该项目提供了 NCNN、MNN、Caffe、Onnx、Opencv 的推理代码,可以给我们部署项目提供大量参考样例。

3 A-Light-and-Fast-Face-Detector-for-Edge-Devices

Github star: 897

作者:YonghaoHe

链接:https://github.com/YonghaoHe/A-Light-and-Fast-Face-Detector-for-Edge-Devices

体积:6.1 M

从名字可以看出来,这也是一个面向边缘设备的检测模型,该模型同样是 SSD 架构的,不过相比前述两个模型,该模型有八个定位层,分别对应 tiny、small、medium 和 large 四个尺度,backbone 网络共有 25 个卷积层。

图片

该模型在 Nvidia TX2 下,320x240 分辨率下可以达到 50.92 FPS。

另外,该 repo 还提供了人头检测、行人检测、车辆检测的代码和模型。

4 CenterFace

Github star: 607

作者:Star-Clouds

链接:https://github.com/Star-Clouds/CenterFace

体积:7.3 M、同精度小模型 2.3M

CenterFace 是 anchor free 的模型结构,应该算是 CenterNet 针对人脸检测任务的特例,这一点上跟 RetinaFace 作为 RetinaNet 的在人脸任务的特例有异曲同工之妙,而且该模型同时回归了五个关键点。

该网络的 backbone 是 MobileNetV2,额外添加了 FPN 结构。

图片

下图是 CenterFace 的速度,在 2080TI 上可以仅 4.4ms。Anchor Free 的模型,没有 NMS 的过程,也能节省很多后处理时间。

图片

5 DBFace

Github star: 195

作者:dlunion

链接:https://github.com/dlunion/DBFace

体积:7.03M

DBFace 是一个 Anchor Free 的网络结构,模型原理可以说与 CenterFace 非常相似。这里不再展开详细的介绍了。

6 RetinaFace MobileNet0.25

Github star: 不好定义(6.4k)

作者:yangfly

链接:https://github.com/deepinsight/insightface/issues/669

体积:1.68M

这个项目来自于知名的 InsightFace 项目,该项目在 Github 有 6.4k star,InsightFace 提出了知名的 RetinaFace、ArcFace 算法,而且开源了详细的训练代码和预训练模型,可以说是非常良心的开源项目。

但是 RetinaFace(应该是受 RetianNet 的结构启发而成)本身的 backbone 是 ResNet50,yangfly 大佬将其替换为了 MobileNet0.25,模型大小仅 1.68MB。RetinaFace 的模型结构如下,这里的 backbone 网络是 MobileNet 0.25。

图片

​ 根据作者的开源结果,我们对以上 6 大开源轻量级人脸检测做一个速度和准确度的对比汇总。

名称 模型大小(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
× 请我吃糖~
打赏二维码