点击我爱计算机视觉标星,更快获取CVML新技术


人脸检测是计算机视觉最典型的应用之一,早期OpenCV的logo就是Haar人脸检测的示意图。

很多人的第一个OpenCV学习目标就是跑通Haar级联人脸检测,Dlib库在业内开始流行很大程度上是因为其HOG-SVM人脸检测比OpenCV Haar的好,而近年来OpenCV和Dlib均已包含基于深度学习的人脸检测算法实现。

Haar-Cascade,HOG-SVM,深度学习正是代表着人脸检测乃至目标检测的三个时代。

昨天Learn OpenCV网站博主Vikas Gupta博士发表文章,对OpenCV与Dlib中四种人脸检测算法实现进行了比较分析,包含C++/Python的代码示例,且对精度和速度都进行了量化。

先来看看作者发布的视频:

1. OpenCV Haar Cascade人脸检测

算法无需赘言。

代码示例:

优点

1)几乎可以在CPU上实时工作;

2)简单的架构;

3)可以检测不同比例的人脸。

缺点

1)会出现大量的把非人脸预测为人脸的情况;

2)不适用于非正面人脸图像;

3)不抗遮挡。

2. OpenCV DNN 人脸检测

从OpenCV3.3版本后开始引入,算法出自论文《SSD: Single Shot MultiBox Detector》(https://arxiv.org/abs/1512.02325)。使用ResNet-10作为骨干网。

OpenCV提供了两个模型:

1)原始Caffe实现的16位浮点型版本(5.4MB);

2)TensorFlow实现的8位量化版本(2.7MB)。

Vikas Gupta的代码包含了这两种模型。

模型加载代码示例:

检测测试代码示例:

优点

1)在这四种方法中是最准确的;

2)在CPU上能够实时运行;

3)适用于不同的人脸方向:上,下,左,右,侧面等。

4)甚至在严重遮挡下仍能工作;

5)可以检测各种尺度的人脸。

缺点

作者认为没有什么大的缺点^_^

(52CV君不敢妄提缺点,但认为不能使用NVIDIA GPU绝对是个遗憾)

3. Dlib HoG人脸检测

代码示例:

优点

1)CPU上最快的方法;

2)适用于正面和略微非正面的人脸;

3)与其他三个相比模型很小;

4)在小的遮挡下仍可工作。

缺点

1)不能检测小脸,因为它训练数据的最小人脸尺寸为80×80,但是用户可以用较小尺寸的人脸数据自己训练检测器;

2)边界框通常排除前额的一部分甚至下巴的一部分;

3)在严重遮挡下不能很好地工作;

4)不适用于侧面和极端非正面,如俯视或仰视。

4. Dlib CNN人脸检测

算法来自论文《Max-Margin Object Detection》(https://arxiv.org/abs/1502.00046)。

代码示例:

优点

1)适用于不同的人脸方向;

2)对遮挡鲁棒;

3)在GPU上工作得非常快;

4)非常简单的训练过程。

缺点

1)CPU速度很慢;

2)不能检测小脸,因为它训练数据的最小人脸尺寸为80×80,但是用户可以用较小尺寸的人脸数据自己训练检测器;

3)人脸包围框甚至小于DLib HoG人脸检测器。

5. 四种方法精度比较

作者在FDDB数据库中测评了四种人脸检测算法实现的精度,结果如下:

可以看到Dlib的两种方法效果都不怎么好,作者发现原来Dlib训练使用的数据集的人脸包围框较小,导致按照FDDB的评价标准不公平。

另外,Dlib无法检测小脸也拉低了分数。

6. 速度比较

软硬件环境:

Processor : Intel Core i7 6850K – 6 Core

RAM : 32 GB

GPU : NVIDIA GTX 1080 Ti with 11 GB RAM

OS : Linux 16.04 LTS

Programming Language : Python

图像大小300*300,测试结果如下:

可以看到除了MMOD 其他方法都达到实时,而MMOD方法的GPU计算是最快的。

7. 分情况检测结果示例

7.1跨尺度检测

7.2 非正面人脸

7.3 遮挡

8 总结推荐

如何在应用中选择人脸检测算法呢?作者认为应该首先尝试OpenCV DNN方法与Dlib HOG方法,然后再做决定。

一般情况

在大多数应用程序中,我们无法知道图像中人脸尺寸的大小。因此,最好使用OpenCV-DNN方法,因为它非常快速且非常准确,即使对于小尺寸的人脸也是如此。它还可以检测各种角度的人脸。所以OpenCV-DNN是首选。

中到大尺寸的图像

Dlib HOG是CPU上最快的方法。但它不能检测到小脸(<70x70)。因此,如果知道程序不会处理非常小的人脸(例如自拍照),那么基于HOG的人脸检测器是更好的选择。

此外,如果你可以使用GPU(NVIDIA家的),那么MMOD人脸检测器是最好的选择,因为它在GPU上非常快,并且还提供各种角度的检测。

高分辨率图像

由于在高分辨率图像中,这些算法的速度都会很慢,而如果缩小图像尺寸,HOG/MMOD可能会失败,同时OpenCV-DNN却可以检测小脸,所以对于高分辨率图像推荐缩小图像再使用OpenCV-DNN的方法。

原文链接:

https://www.learnopencv.com/face-detection-opencv-dlib-and-deep-learning-c-python/

代码数据下载:

在“我爱计算机视觉”微信公众号对话界面回复“人脸检测比较”,即可收到该文代码、模型与使用数据百度云下载地址。

人脸检测开源技术众多,除了OpenCV和Dlib,你还有什么推荐吗?欢迎留言~


长按关注我爱计算机视觉

【点赞与转发】就是一种鼓励

OpenCV vs Dlib 人脸检测比较分析相关推荐

  1. opencv联合dlib人脸检测例子二(加快检测)

    本篇博客是在opencv联合dlib人脸检测例子的基础上改进了下,加快检测流程 观察了下,opencv利用haar级联分类器检测人脸区域的速度要稍快于dlib的frontal_face_detecto ...

  2. python dlib人脸检测_Python 3 利用 Dlib 实现人脸检测和剪切

    0. 引言 利用 Python 开发,借助 Dlib 库进行人脸检测 / face detection 和剪切: 将检测到的人脸剪切下来,依次排序平铺显示在新的图像上: 实现的效果如 图1 所示,将 ...

  3. 算法移植优化(三)android dlib 人脸检测使用

    android dlib 人脸检测使用 一.编译阶段 1.在cmakelist.txt中加入: include(src/main/cpp/dlib/cmake) 然后再链接dlib库就可以了: tar ...

  4. 人脸识别系统——Dlib人脸检测

    EduCoder平台:人脸识别系统--Dlib人脸检测 第1关:HOG特征描述方法 编程要求: 请在右侧编辑器中的BEGIN-END之间编写代码,完成如下要求: 声明OpenCV中的HOG特征描述方法 ...

  5. opencv 美白磨皮人脸检测转

    1. 简介 这学期的计算机视觉课,我们组的课程项目为"照片自动美化",其中我负责的模块为人脸检测与自动磨皮. 功能为:用户上传一张照片,自动检测并定位出照片中的人脸,将照片中所有的 ...

  6. 人脸识别系列二 | FisherFace,LBPH算法及Dlib人脸检测

    前言 前面介绍了使用特征脸法进行人脸识别,这里介绍一下OpenCV人脸识别的另外两种算法,一种是FisherFace算法,一种是LBPH算法. FisherFace算法 FisherFace是基于线性 ...

  7. 【使用OpenCV进行视频人脸检测】------机器学习(附完整代码和数据集)

    上篇文章介绍了OpenCV进行照片人脸检测,今天学习的是OpenCV进行视频人脸检测,所有的参考博文.文献.视频.代码都会在文末附上链接或文件压缩包. 本文的目录如下: 内容目录 一.Opencv 进 ...

  8. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  9. OpenCV OMZ MTCNN人脸检测的实例(附完整代码)

    OpenCV OMZ MTCNN人脸检测的实例 OpenCV OMZ MTCNN人脸检测的实例 OpenCV OMZ MTCNN人脸检测的实例 #include <algorithm> # ...

最新文章

  1. Syslog-ng+Rsyslog收集日志:logrotate日志切割、轮询(七)
  2. 从十个方面提升SharePoint网站性能
  3. seq_file机制
  4. usb连接不上 艾德克斯电源_艾德克斯双范围可编程直流电源IT6800A/B系列
  5. php 判断update返回为0_PHP empty函数判断0返回真还是假
  6. python3 集合运算_Python 集合与集合运算
  7. 动画交互原型设计:Principle for Mac
  8. Android新版NDK环境搭建
  9. 拓端tecdat|R语言复杂网络分析:聚类(社区检测)和可视化
  10. 华为数通hcia认证考试题库有多少题?
  11. 看程序员如何使用Python快速给视频添加字幕
  12. html加拼音注释,古诗加拼音注释版.doc
  13. 荣耀magicbook15C语言,荣耀MagicBook 15 2021版评测:轻薄机身+强悍性能 专为高效率办公而生...
  14. 机智云发布机智云5.0 实现物联网应用协同开发
  15. 竞价推广(SEM)是什么
  16. 计算机工程与应用 卷号,计算机专业毕业设计软件设计类论文各章节标题与格式规范...
  17. 炒菜机器人的弊端_家用炒菜机器人好用吗?都说买了全自动炒菜机后悔了。。...
  18. 天龙八部元宝兑换代码
  19. 一个完整计算机的主要配置,一个完整的计算机的配置包括CPU
  20. c8051f c语言编程,C8051F SPI接口读写c程序

热门文章

  1. CodeForces - 1485B(找规律+求和) acm寒假集训日记21/12/31or22/1/1
  2. php查真实地址,php教程:检查URL地址是否真实存在
  3. python变量后面加星号_计算与变量(一)跟杜老师一起,趣学Python编程
  4. 创建一个守护进程来监听服务进程的异常状态_用 C# 来守护 Python 进程
  5. 鸿蒙安装elasticsearch7,安装操作系统_岁寒,然后知松柏之后凋也的技术博客_51CTO博客...
  6. pg 定时删除_postgresql AutoVacuum系统自动清理进程
  7. python语言控制结构是指_python程序的三种控制结构
  8. python wms_webGIS实践:4_2_python django整合geoserver wms服务
  9. 北航 计算机学院 2011级学生会,北航学生会主席在2011级新生开学典礼发言稿.doc...
  10. oracle数据库扩容方案_数据库一体机替代IOE架构,在财税行业的崛起