专栏首页我爱计算机视觉OpenCV vs Dlib 人脸检测比较分析

OpenCV vs Dlib 人脸检测比较分析

人脸检测是计算机视觉最典型的应用之一,早期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,你还有什么推荐吗?欢迎留言~

本文分享自微信公众号 - 我爱计算机视觉(aicvml),作者:52CV君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 力荐!计算机视觉开源工具中的瑞士军刀—Dlib最新高级特性教程

    OpenCV是计算机视觉开源工具中妇孺皆知的,但Dlib绝对是这几年快速上升的一颗新星,它并不追求大而全,但它实现的每一个模块和特性,都几乎是高质量开源算法的典...

    CV君
  • ICCV 2019 Oral | 三维"ZAO"脸,单张图片估计人脸几何,效果堪比真实皮肤

    CV君:本文为52CV群友上海科技大学陈安沛同学投稿,介绍了他们ICCV 2019最新人脸3D重建的工作。效果非常赞,代码也已开源,欢迎大家参考~

    CV君
  • 人脸识别的前世今生:从人工特征的百花齐放到深度学习的一统江湖

    几天前一篇arXiv新上论文《Face Recognition: From Traditional to Deep Learning Methods》,对人脸识...

    CV君
  • 级联人脸检测--A Convolutional Neural Network Cascade for Face Detection

    A Convolutional Neural Network Cascade for Face Detection CVPR2015 https://git...

    用户1148525
  • 人脸识别案例:接口返回“图片中没有人脸”

    腾讯云人脸识别产品基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、五官定位、人脸搜索、人脸比对、人脸验证、人员查重、静态活体检测等多种功能,主要以公有云...

    周朋伟
  • Milvus 实战|生物多因子认证系列 (二):人脸识别

    视觉 AI 作为一个已经发展成熟的技术领域,具有丰富的应用场景和商业化价值,全球 40% 的 AI 企业都集中在视觉 AI 领域。近年来,视觉 AI 除了在智能...

    ZILLIZ
  • 人脸检测对齐--Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks

    Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networ...

    用户1148525
  • 人脸识别中的活体检测算法综述

    判断捕捉到的人脸是真实人脸,还是伪造的人脸攻击(如:彩色纸张打印人脸图,电子设备屏幕中的人脸数字图像 以及 面具 等)

    小白学视觉
  • 深度学习之视频人脸识别系列(一):简介

    磐创AI
  • 谦尊升室内定位SDK助力智慧医院APP,实现室内定位导航

    目前上海谦尊升推出的方案就是基于惯性导航的室内定位方案,利用智能手机上的惯性元件进行定位,这是一种自主定位导航的方式,不依赖外界信号也不受其他信号干扰。所以在部...

    BestSDK

扫码关注云+社区

领取腾讯云代金券