人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIBOpenCV人脸检测方法及对比)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
⼈脸检测学习笔记(数据集-DLIB⼈脸检测原理-DLIBOpenCV⼈
脸检测⽅法及对⽐)
1.Easily Create High Quality Object Detectors with Deep Learning
2016/10/11
dlib中的MMOD实现使⽤HOG特征提取,然后使⽤单个线性过滤器。
这意味着它⽆法学习检测出具有复杂姿势变化的物体。
HOG:⽅向梯度直⽅图(Histogram of oriented gradient)是在计算机视觉和图像处理领域⽤于⽬标检测的特征描述器。
⼈脸检测基准FDDB有两种模式:10倍交叉验证和不受限制。
两者都在同⼀数据集上进⾏测试,但在10倍交叉验证模式下,您只能对FDDB 数据集中的数据进⾏训练。
在⽆限制模式下,您可以训练您喜欢的任何数据,只要它不包含来⾃FDDB的图像。
FDDB站点:
⼈脸数据集:FDDB、ImageNet、AFLW、Pascal VOC、VGG、WIDER 、Ibug(https:///resources/facial-point-annotations/)、facescrub()等。
2.dlib-models
(1)mmod_human_face_detector
是在这个数据集上训练的:http:///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数据集上训练的()。
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
本⽂对⽐了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⼿动注释。
它可以从这⾥下载。
优点:
1)CPU上最快的⽅法。
2)适⽤于正⾯和略微⾮正⾯的⾯部。
3)轻量级模型与其他三个相⽐,在⼩的遮挡下⼯作,基本上,这种⽅法在⼤多数情况下都有效,除了下⾯讨论的少数情况。
缺点:
1)主要缺点是它不能检测⼩脸,因为它训练的最⼩⾯部尺⼨为80×80。
因此,您需要确保⾯部⼤⼩应该⼤于应⽤程序中的⾯部⼤⼩。
但是,您可以为较⼩尺⼨的⾯部训练⾃⼰的⾯部检测器。
2)边界框通常有时排除前额的⼀部分甚⾄下巴的⼀部分。
3)在严重遮挡下不能很好地⼯作。
4)不适⽤于侧⾯和极端⾮正⾯,如俯视或俯视。
(4)Dlib中的CNN⾯部检测器。
此⽅法使⽤具有基于CNN的功能的最⼤边距对象检测器(MMOD)。
此⽅法的培训过程⾮常简单,您不需要⼤量数据来训练⾃定义对象检测器。
它使⽤由其作者戴维斯·⾦⼿动标记的数据集,包括来⾃各种数据集的图像,如ImageNet,PASCAL VOC,VGG,WIDER,Face Scrub。
它包含7220张图⽚。
数据集:
优点:
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。