人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIB&OpenCV人脸检测方法及对比)

1.Easily Create High Quality Object Detectors with Deep Learninghtml

2016/10/11python

http://blog.dlib.net/2016/10/easily-create-high-quality-object.htmlgit

dlib中的MMOD实现使用HOG特征提取,而后使用单个线性过滤器。这意味着它没法学习检测出具备复杂姿式变化的物体。HOG:方向梯度直方图(Histogram of oriented gradient)是在计算机视觉和图像处理领域用于目标检测的特征描述器。github

 人脸检测基准FDDB有两种模式:10倍交叉验证和不受限制。二者都在同一数据集上进行测试,但在10倍交叉验证模式下,您只能对FDDB数据集中的数据进行训练。在无限制模式下,您能够训练您喜欢的任何数据,只要它不包含来自FDDB的图像。FDDB站点:http://vis-www.cs.umass.edu/fddb/index.html算法

人脸数据集:FDDB、ImageNet、AFLW、Pascal VOC、VGG、WIDER 、Ibug(https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/)、facescrub(http://www.robots.ox.ac.uk/~vgg/data/vgg_face/)等。网络

 

2.dlib-models架构

https://github.com/davisking/dlib-models工具

(1)mmod_human_face_detector性能

是在这个数据集上训练的:http://dlib.net/files/data/dlib_face_detection_dataset-2016-09-30.tar.gz。做者经过在许多公开可用的图像数据集(不包括FDDB数据集)中查找人脸图像来建立数据集。特别是,有来自ImageNet,AFLW,Pascal VOC,VGG数据集,WIDER和facescrub的图像。数据集中的全部注释都是由做者使用dlib的imglab工具建立的。mmod_human_face_detector 包含两种模式。不能人脸识别。学习

(2)shape_predictor_68_face_landmarks.dat.bz2

这是在ibug 300-W数据集上训练的(https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/)。dlib_face_recognition_resnet_model_v1  shape detect联合使用,能够人脸识别。

(3)性能效果

DLIB,HOG+SVM:正脸,CPU百毫秒级

DLIB,CNN:非正脸,秒级,GPU百毫秒级

  

3.Face Detection – OpenCV, Dlib and Deep Learning ( C++ / Python )

2018/10/22

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

 本文对比了OpenCV和dlib的4中人脸检测方法:OpenCV中的Haar Cascade人脸检测器、基于深度学习的OpenCV人脸检测器、Dlib中的HoG Face Detector、基于深度学习的Dlib人脸检测器。

(1)OpenCV中的Haar Cascade人脸检测器

优势:

1)几乎能够在CPU上实时工做。

2)简单的架构。

3)检测不一样比例的脸部。

缺点:

1)这种方法的主要缺点是它提供了大量的假预测。

2)不适用于非正面图像。

3)在遮挡下不起做用。

(2)基于深度学习的OpenCV人脸检测器

它基于Single-Shot-Multibox检测器,并使用ResNet-10架构做为主干。使用来自网络的图像训练该模型,但未公开该来源。 OpenCV为这款人脸探测器提供了2种型号:浮点16版原始caffe实现(5.4 MB)和使用Tensorflow的8位量化版本(2.7 MB)。

优势:

1)四种方法中最准确的

2)在CPU上实时运行。

3)适用于不一样的面部方向 - 上,下,左,右,侧面等。

4)甚至在严重遮挡下工做。

5)检测各类尺度的面部(检测大面和小面)。

缺点:基于DNN的探测器克服了基于Haar级联探测器的全部缺点,同时不会损害Haar提供的任何优点。除了它比下面讨论的基于Dlib HoG的面部检测器慢以外,咱们看不出这种方法的任何主要缺点。

(3)Dlib中的HoG Face Detector

这是一种普遍使用的人脸检测模型,基于HoG特征和SVM。该模型由5个HOG过滤器构成 - 前视,左视,右视,前视但向左旋转,前视但向右旋转。用于训练的数据集包括2825个图像,这些图像从LFW数据集中得到,并由Dlib的做者Davis King手动注释。它能够从这里下载。http://dlib.net/files/data/dlib_face_detector_training_data.tar.gz

优势:

1)CPU上最快的方法。

2)适用于正面和略微非正面的面部。

3)轻量级模型与其余三个相比,在小的遮挡下工做,基本上,这种方法在大多数状况下都有效,除了下面讨论的少数状况。

缺点:

1)主要缺点是它不能检测小脸,由于它训练的最小面部尺寸为80×80。所以,您须要确保面部大小应该大于应用程序中的面部大小。可是,您能够为较小尺寸的面部训练本身的面部检测器。

2)边界框一般有时排除前额的一部分甚至下巴的一部分。

3)在严重遮挡下不能很好地工做。

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

(4)Dlib中的CNN面部检测器。

此方法使用具备基于CNN的功能的最大边距对象检测器(MMOD)。此方法的培训过程很是简单,您不须要大量数据来训练自定义对象检测器。它使用由其做者戴维斯·金手动标记的数据集,包括来自各类数据集的图像,如ImageNet,PASCAL VOC,VGG,WIDER,Face Scrub。它包含7220张图片。数据集:http://dlib.net/files/data/dlib_face_detection_dataset-2016-09-30.tar.gz

优势:

1)适用于不一样的面部方向。

2)偶然场景下健壮。

3)在GPU上工做得很是快。

4)很是简单的培训过程。

缺点:

1)CPU速度很慢

2)不会检测小脸,由于它训练的最小脸部尺寸为80×80。所以,您须要确保面部大小应该大于应用程序中的面部大小。可是,您能够为较小尺寸的面部训练本身的面部检测器。

3)边界框甚至小于HoG探测器。

基于dlib的方法可以检测大小达(70×70)的人脸,以后它们没法检测到。正如咱们以前讨论的那样,我认为这是基于Dlib的方法的主要缺点。由于在大多数状况下不可能事先知道面部的大小。咱们能够经过scaling图像来摆脱这个问题,可是与OpenCV-DNN相比,dlib的速度优点消失了。OpenCV方法仍不支持NVIDIA GPU。各场景下的选择建议:

(1)通常状况

在大多数应用程序中,咱们不会在前面的图像中知道面部的大小。所以,最好使用OpenCV- DNN方法,由于它很是快速且很是准确,即便对于小尺寸的面部也是如此。它还能够检测各类角度的面部。咱们建议大多数人使用OpenCV-DNN。

(2)中到大图像尺寸

Dlib HoG是CPU上最快的方法。但它没有检测到小脸(<70x70)。所以,若是您知道您的应用程序不会处理很是小的面部(例如自拍应用程序),那么基于HoG的面部检测器是更好的选择。此外,若是你可使用GPU,那么MMOD人脸检测器是最好的选择,由于它在GPU上很是快,而且还提供各类角度的检测。

(3)高分辨率图像

因为这些算法不能提供高分辨率图像(计算速度),所以当缩小图像时,HoG / MMOD检测器可能会失败。另外一方面,OpenCV-DNN方法能够用于这些,由于它检测小脸。

(4)非正脸

非正面能够向右,向左,向上,向下看,基于Haar的探测器彻底失效。基于HoG的探测器确实检测左侧或右侧面部的面(由于它是在它们上训练的),但不如基于DNN的OpenCV和Dlib探测器那样精确。

(5)遮挡

DNN方法优于其余两种方法,OpenCV-DNN略好于Dlib-MMOD。

相关文章
相关标签/搜索