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

喜欢就关注 AIZOO 吧!

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

Github链接:https://github.com/hpc203/10kinds-light-face-detector-align-recognition 可以阅读原文跳转。

原文:https://blog.csdn.net/nihate/article/details/108798831 

最近在微信公众号 AIZOO 里看到轻量级人脸检测算法大盘点的文章,里面还提供了Github源码地址,我就把它们逐个下载到本地Win10-CPU机器上,调试通过运行。

去年在Github下载过一个包含6种人脸检测的程序,分别是Pyramidbox,DSFD,S3FD,TinyFace,FaceBox,MTCNN,但是这些算法大多是重量级的网络模型,它在一幅图片上的人脸检测结果和运行耗时统计直方图如下。

运行效果如下图所示:

10种轻量级人脸检测算法大PK | 代码集合开源_第1张图片

耗时效果统计对比:

10种轻量级人脸检测算法大PK | 代码集合开源_第2张图片

可以看到PyramidBox,DSFD,S3FD,TinyFace这4个模型是非常耗时的,对于比赛刷榜,我们可以用这种很大的模型,但是在工业界非常不实用,假如要部署到 ARM 的嵌入式设备上,大概率直接卡死。

因此我就整理了最近一年之内的轻量级人脸检测算法的程序,独立编写一个包含多种轻量级人脸检测算法集合的程序。PyTorch是我最喜欢的深度学习框架,在部署模型的前向推理时,我更喜欢用Opencv的dnn模块。因而,我收集到的轻量级人脸检测算法的程序如果是基于PyTorch框架的,我就不会对代码做较大的改动,如果程序是基于Caffe, Tensorflow或者Darknet的,我会把程序改写成用Opencv的dnn模块做人脸检测。最后我整理了10种人脸检测算法,它们分别是:

  •  Ultra-Light-Fast-Generic-Face-Detector,程序里简写为ultraface

  •  LFFD:A Light and Fast Face Detector for Edge Devices,程序里简写为lffdface

  •  CenterFace, 程序里简写为centerface

  •  DBFace, 程序里简写位dbface

  •  RetinaFace, 程序里简写为retinaface

  •  MTCNN, 程序里简写为mtcnn

  •  SSD, 程序里简写为ssdface

  •  facebox,程序里简写为facebox

  •  yoloface,程序里简写为yoloface

  •  于仕琪老师提出的libfacedetection, 程序里简称为libface

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

https://github.com/hpc203/10kinds-light-face-detector-align-recognition

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

10种轻量级人脸检测算法大PK | 代码集合开源_第3张图片

耗时对比如下图:

10种轻量级人脸检测算法大PK | 代码集合开源_第4张图片

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

10种轻量级人脸检测算法大PK | 代码集合开源_第5张图片

10种轻量级人脸检测算法大PK | 代码集合开源_第6张图片

10种轻量级人脸检测算法大PK | 代码集合开源_第7张图片

10种轻量级人脸检测算法大PK | 代码集合开源_第8张图片

耗时对比如下图:

10种轻量级人脸检测算法大PK | 代码集合开源_第9张图片

这两幅测试图片有鲜明代表性,一幅是只有2个人脸,另一幅是有好多个人脸的。ssdface和libface的运行速度最快,但是在有密集人脸的场景里,它们漏检了很多人脸。综合两幅图片的检测结果,考虑检测准确率和运行耗时的折中权衡,retinaface和lffdface是最优选择。retinaface运行耗时虽然比lffdface的要略长一点,但是retinaface的输出里有5个关键点。

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

欢迎扫描下方的二维码添加小助手微信,邀请您加入我们的微信交流群。

群里有多位清北复交、BAT、AI独角兽大牛和众多深度学习er在一起愉快的交流技术,有任何问题,都可以咨询大家,欢迎你的加入哦。

 添加小助手微信,邀您进AIZOO技术交流群

听说点个在看的人运气都很好~

你可能感兴趣的:(人脸识别,计算机视觉,人工智能,编程语言,opencv)