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

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

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

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

元峰曾经写了一篇介绍南科大于仕琪老师的开源人脸检测项目的文章(人脸检测速度近2000FPS,就在刚刚,这位硬核老师将训练代码开源了),有不少读者对该工作很质疑,认为模型太小,导致有误检测,于老师亲自现身回答了大家的质疑。

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

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

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

1

01

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++的推理版本,不依赖第三方深度学习库,非常有利于工程部署。

1

02

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的推理代码,可以给我们部署项目提供大量参考样例。

1

03

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 还提供了人头检测、行人检测、车辆检测的代码和模型。

1

04

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的过程,也能节省很多后处理时间。

1

05

DBFace

Github star: 195

作者:dlunion

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

体积:7.03M

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

1

06

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

另外,笔者将六大框架打包下载好了,您只需要在公众号后台回复“人脸检测”即可下载所有6大框架的代码和模型。


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(pdf更新到25集)本站qq群1003271085,加入微信群请回复“加群”获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/yFQV7am喜欢文章,点个在看

最强六大开源轻量级人脸检测项目分析 | 附打包下载相关推荐

  1. 最强六大开源轻量级人脸检测项目分析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 随着深度学习的兴起,工业界和学术界越来越多的使用基于深度学习的方法 ...

  2. 10种轻量级人脸检测算法大PK | 代码集合开源

    喜欢就关注 AIZOO 吧! 几个月前,AIZOO曾经盘点过 最强六大开源轻量级人脸检测项目分析 | 附打包下载,nihate同学将它丰富到10种算法,并用Python.对他们进行了汇总整理,以及效果 ...

  3. 10种轻量级人脸检测算法大PK

    几个月前,AIZOO曾经盘点过 最强六大开源轻量级人脸检测项目分析 | 附打包下载,nihate同学将它丰富到10种算法,并用Python.对他们进行了汇总整理,以及效果的对比. Github链接:h ...

  4. 史上最强轻量级人脸检测,全面超越retinaface

    本人历时一年,自研一款轻量级人脸检测,模型大小5.43m,在widerface验证集上精度如下: MAP@0.5 Result on validation set of WiderFace Style ...

  5. 【CV】10种轻量级人脸检测算法大PK | 代码集合开源

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 最近在微信公众号 AIZOO 里看到轻量级人脸检测算法大盘点的文章 ...

  6. github优秀项目分享:基于yolov3的轻量级人脸检测、增值税发票OCR识别 等8大项目...

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 文章来源:七月在线实验室 01  yolo-face-with-landmark ...

  7. 大盘点|轻量级人脸检测算法实现,快到没朋友的都在这里了~

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理:公众号@OpenCV中文网 本文仅做学术分享,如有侵权,请联系删除. 人脸检测是计算机视觉中的老 ...

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

    关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 转自:https://blog.csdn.net/nihate/article ...

  9. python3项目源代码下载_人脸检测和识别 源代码 下载-opencv3+python3.6完整实战项目源代码 识别视频《欢乐颂》中人物,-opencv3《欢乐颂》...

    人脸检测和识别 源代码 下载-opencv3+python3.6完整实战项目源代码 识别视频<欢乐颂>中人物,-opencv3<欢乐颂> 效果图 源代码import os im ...

最新文章

  1. Visual Studio Code 1.33 发布
  2. Python开发【第十一篇】:JavaScript
  3. 在python中可以使用for作为变量名对吗_python能用一个变量的值作为另一个变量的变量名吗?...
  4. Confluence 6 匿名用户
  5. 寻虫记:BOM头制造的冤案,无故多出空白行
  6. iOS - Swift NSRect 位置和尺寸
  7. php曲线,PHP生成曲线图的函数
  8. UE4之UMG用户界面
  9. border 0px和border none的区别
  10. 菜鸟Spring Cloud入门教程
  11. 在哪下拼多多上传助手?拼多多软件方法介绍
  12. [乐意黎原创]PHP 老司机指南
  13. css设置字体颜色怎么设,css里面怎么设置字体颜色?
  14. C语言中取值符(*)与取地址符()
  15. 计算机的作业与程序,网络提交的计算机程序作业出现抄袭现象的对策探索
  16. Android实现一键开启自由窗口、分屏、画中画模式——分屏模式
  17. 实验九 使用异步方式实现文件读\写
  18. 中高级iOS大厂面试宝典,进厂率80%,金三银四将是你的新起点
  19. php英文文献翻译,php外文文献翻译_英语论文
  20. c语言 ptr 用法,C++之智能指针std::shared_ptr简单使用和理解

热门文章

  1. sun的没落是悲还是喜?
  2. 神经网络学习之----Hopfield神经网络(代码实现)
  3. 富文本编辑器-Ueditor
  4. IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream...
  5. angular2.0学习日记1
  6. LeetCode - Search a 2D Matrix
  7. java--面向对象(4)--黑马程序员
  8. python实现函数ifodd_09-Python笔记整理(函数)
  9. 小鼠皮肤组织细胞悬液制备流程
  10. C语言 | 基于MPU605(六轴传感器)的I2C实现LCD1602显示(代码类)