人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIB&OpenCV人脸检测方法及对比)
1.Easily Create High Quality Object Detectors with Deep Learning
2016/10/11
http://blog.dlib.net/2016/10/easily-create-high-quality-object.html
dlib中的MMOD实现使用HOG特征提取,然后使用单个线性过滤器。这意味着它无法学习检测出具有复杂姿势变化的物体。HOG:方向梯度直方图(Histogram of oriented gradient)是在计算机视觉和图像处理领域用于目标检测的特征描述器。
人脸检测基准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。
人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIB&OpenCV人脸检测方法及对比)的更多相关文章
- ZooKeeper学习笔记(二)——内部原理
		
zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...
 - mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)
		
下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...
 - TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]
		
I optimizer.minimize(loss, var_list) 我们都知道,TensorFlow为我们提供了丰富的优化函数,例如GradientDescentOptimizer.这个方法会自 ...
 - Netty 学习笔记(1)通信原理
		
前言 本文主要从 select 和 epoll 系统调用入手,来打开 Netty 的大门,从认识 Netty 的基础原理 —— I/O 多路复用模型开始. Netty 的通信原理 Netty 底层 ...
 - 转 Android学习笔记: 学习过程中碰到的一些问题及解决方法
		
在学习Android开发的过程中遇到了不少的问题,所幸的是最终经过上网查询都得到了解决.现在将我在学习Android开发过程中遇到的一些问题及解决的方法整理如下. 1.R.java不能实时更新 问题描 ...
 - Scikit-Learn模块学习笔记——数据集模块datasets
		
scikit-learn 的 datasets 模块包含测试数据相关函数,主要包括三类: datasets.load_*():获取小规模数据集.数据包含在 datasets 里 datasets.fe ...
 - 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)
		
1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...
 - OpenCV2学习笔记(十四):基于OpenCV卡通图片处理
		
得知OpenCV有一段时间.除了研究的各种算法的内容.除了从备用,据导游书籍和资料,尝试结合链接的图像处理算法和日常生活,第一桌面上(随着摄像头)完成了一系列的视频流处理功能.开发平台Qt5.3.2+ ...
 - AngularJS学习笔记3——AngularJS的工作原理
		
个人觉得,要很好的理解AngularJS的运行机制,才能尽可能避免掉到坑里面去.在这篇文章中,我将根据网上的资料和自己的理解对AngularJS的在启动后,每一步都做了些什么,做一个比较清楚详细的解析 ...
 
随机推荐
- springmvc时间类型值传输映射
			
背景:springmvc4.3.2+spring4.3.2+mybatis3.4.1 当前台传递的参数有时间类型时,封装的vo对象也有对应的时间类型与之对象, 但是如果此时用对象去接收后台会报错,类型 ...
 - spring mvc 对象型参数的传递(遇到坑了)
			
直接来个列子: 这里设置了,contenType="application/json" 这里post 接收的参数对象. 但是问题来了: <html> <head& ...
 - 如何用Spring框架的<form:form>标签实现REST风格的增删改查操作
			
1.首先创建两个bean类,Employee(职工)和Department(部门),一个部门可以有多个职工 Employee类(属性:职工ID:id:姓名:lastName:邮箱:email:性别:g ...
 - 考勤助手ER图2.0版本所存在的问题
			
如图所示,考勤助手ER图2.0版本中,缺少个人信箱这一问题虽然不具有逻辑层面的问题,但是它是不满足需求的,也就是说这样的设计无法满足小组对考勤助手最初的设计.其次,就设计层面来分析,弱联系是数据库查询 ...
 - Sqoop将MySQL表结构同步到hive(text、orc)
			
Sqoop将MySQL表结构同步到hive sqoop create-hive-table --connect jdbc:mysql://localhost:3306/sqooptest --user ...
 - 关于nginx性能优化及基本概念
			
参考文章: Nginx面试中最常见的18道题:http://blog.csdn.net/liyanlei5858/article/details/77924420 Nginx性能优化指南:http:/ ...
 - Linux嵌入式 -- 内核 (arm) & 文件系统
			
1. make distclean 2. 配置内核 ----> 生成 .config文件 make menuconfig ARCH=arm Makefile文件分析: 3. 编译内核 mak ...
 - SQL之merge into(转)
			
简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根 ...
 - XSS 跨站脚本攻击实例1
			
14.44-16.22 编码,跨站脚本攻击1 16.22-16.53 整理cnblog 这篇文章适合知道有XSS脚本攻击,但是一头雾水,从未操作过,也不知道脚本攻击会给客户端用户带来什么不便之处 ...
 - 【51Nod】-1326  遥远的旅途
			
Description 一个国家有 N 个城市, 这些城市被标为 0,1,2,...N-1. 这些城市间连有 M 条道路, 每条 道路连接两个不同的城市, 且道路都是双向的. 一个小鹿喜欢在城市间沿着 ...