基于Haar特征Adaboost人脸检测级联分类

基于Haar特征Adaboost人脸检测级联分类,称haar分类器。

通过这个算法的名字,我们能够看到这个算法事实上包括了几个关键点:Haar特征、Adaboost、级联。理解了这三个词对该算法基本就掌握了。

1        算法要点

Haar分类器 = Haar-like特征 + 积分图方法 + AdaBoost +级联;

Haar分类器算法的要点例如以下:

a)        使用Haar-like特征做检測。

b)       使用积分图(IntegralImage)对Haar-like特征求值进行加速。

c)        使用AdaBoost算法训练区分人脸和非人脸的强分类器。

d)       使用筛选式级联把分类器级联到一起,提高准确率。

2        历史

在2001年。Viola和Jones两位大牛发表了经典的《Rapid Object Detectionusing a Boosted Cascade of Simple Features》和《Robust Real-Time Face Detection》,在AdaBoost算法的基础上,使用Haar-like小波特征和积分图方法进行人脸检測,他俩不是最早使用提出小波特征的,可是他们设计了针对人脸检測更有效的特征,并对AdaBoost训练出的强分类器进行级联。

这能够说是人脸检測史上里程碑式的一笔了。也因此当时提出的这个算法被称为Viola-Jones检測器。又过了一段时间,RainerLienhart和Jochen
Maydt两位大牛将这个检測器进行了扩展。终于形成了OpenCV如今的Haar分类器。

AdaBoost是Freund和Schapire在1995年提出的算法,是对传统Boosting算法的一大提升。Boosting算法的核心思想,是将弱学习方法提升成强学习算法。也就是“三个臭皮匠顶一个诸葛亮”

3        Haar特征

什么是特征,特征就是分类器的输入。

把它放在以下的情景中来描写叙述,如果在人脸检測时我们须要有这么一个子窗体在待检測的图片窗体中不断的移位滑动,子窗体每到一个位置,就会计算出该区域的特征,然后用我们训练好的级联分类器对该特征进行筛选,一旦该特征通过了全部强分类器的筛选。则判定该区域为人脸。

那么这个特征怎样表示呢?好了。这就是大牛们干的好事了。后人称这他们搞出来的这些东西叫Haar-Like特征。

Viola大牛在[1]中提出的haar特征例如以下:

Rainer大牛改进了这些特征,提出了很多其它的haar特征。例如以下图所看到的:

这些所谓的特征不就是一堆堆带条纹的矩形么,究竟是干什么用的?我这样给出解释,将上面的随意一个矩形放到人脸区域上,然后。将白色区域的像素和减去黑色区域的像素和。得到的值我们暂且称之为人脸特征值。假设你把这个矩形放到一个非人脸区域。那么计算出的特征值应该和人脸特征值是不一样的,并且越不一样越好,所以这些方块的目的就是把人脸特征量化,以区分人脸和非人脸。

4        Adaboost算法

本节旨在介绍AdaBoost在Haar分类器中的应用,所以仅仅是描写叙述了它在Haar分类器中的特性,而实际上AdaBoost是一种具有一般性的分类器提升算法,它使用的分类器并不局限某一特定算法。

[1]中给出的Adaboost算法流程例如以下图。

由adaboost在haar特征上构建分类器的流程可知,adaboost算法就是构建多个简单的分类器,每一个简单的分类器都建立在之前分类器的基础上(对之前分类器分错了的例子提高其权重),然后将这些分类器加权,得到一个强大的分类器。

Adaboost的每一步训练出的分类器。例如以下图所看到的。当中。f表示特征的值,theta表示阈值,p则表示不等式的方向。这种一个分类器就是基于一个特征的弱分类器。

更进一步。adaboost的一般算法框架例如以下。能够看到,Discrete Adaboost和GentleAdaboost在分类器的计算上和权重的更新上是有区别的。另一种是RealAdaboost,即分类器输出的是一个概率而不仅仅是+1与-1。[3]中就比較了这三种Adaboost的变种的效果。

5        级联

什么是级联分类器?级联分类器就是例如以下图所看到的的一种退化了的决策树。为什么说是退化了的决策树呢?是由于一般决策树中,推断后的两个分支都会有新的分支出现,而级联分类器中。图像被拒绝后就直接被抛弃,不会再有推断了。

级联强分类器的策略是。将若干个强分类器由简单到复杂排列,希望经过训练使每一个强分类器都有较高检測率。而误识率能够放低。比方差点儿99%的人脸能够通过,但50%的非人脸也能够通过,这样假设有20个强分类器级联。那么他们的总识别率为0.99^20约等于98%,错误接受率也仅为0.5^20约等于0.0001%。这种效果就能够满足现实的须要了。

文献[1]中给出了一种由简单到复杂设计级联分类器的方法,那就是加入特征法。对于第一个分类器。仅仅用少数几个特征,之后的每一个分类器都在上一个的基础上加入特征,直到满足该级的要求。

训练级联分类器的目的就是为了检測的时候,更加准确。这涉及到Haar分类器的还有一个体系,检測体系,检測体系是以现实中的一幅大图片作为输入,然后对图片中进行多区域,多尺度的检測。所谓多区域。是要对图片划分多块。对每一个块进行检測。因为训练的时候用的照片一般都是20*20左右的小图片,所以对于大的人脸,还须要进行多尺度的检測。多尺度检測机制一般有两种策略。一种是不改变搜索窗体的大小,而不断缩放图片,这样的方法显然须要对每一个缩放后的图片进行区域特征值的运算,效率不高,而还有一种方法,是不断初始化搜索窗体size为训练时的图片大小,不断扩大搜索窗体,进行搜索。攻克了第一种方法的弱势。

6        积分图

积分图是用来加速计算haar特征的方法。

Haar特征的计算所须要的基本数据就是区域内像素的和。

而只对于24*24的图片来说。它的不同类型的haar特征数目就有11W个(參考[3])。为了高速的计算出这些特征的值。就有了积分图表示图像的方法。

什么是积分图?对于与图像边界平行的haar特征来说。积分图就是与图像大小一样的一个二维数组。该数组中,(x,y)位置的值是原始图像中从(0,0)到(x,y)处的像素值的和。对于45度偏向的haar特征来说,也类似。例如以下图所看到的:

对于a、c图所看到的的haar特征。计算公式例如以下:

当中,SAT即为积分图中的值,RecSum即为(x,y)处的长宽为(w,h)的区域的和。

有了RecSum后,就能够计算haar特征了。

相似的,b,d图所看到的的haar特征计算公式例如以下:

意义类似,不一一解释了。

积分图的优点在于,仅仅对图片进行一次累计计算,就能够非常方便的计算出haar特征值了。

7        总结

基于Haar特征的Adaboost级联分类器,在人脸的识别效果上并没有比其它算法高,其亮点在于检測速度。

而速度的提升。有例如以下几方面的因素。

第一:使用的特征简单,haar特征仅仅需计算像素的和就能够了。

第二:即便是如此简单的特征。还加入了积分图进行加速。第三,级联分类器的设定,使得大量的没有人脸的子窗体被抛弃。

參考文献

[1]. Viola P, Jones M. Rapid object detection using a boosted cascade of simple features[C]//Computer Vision and Pattern Recognition, 2001. CVPR 2001. Proceedings of the 2001 IEEE Computer Society
Conference on. IEEE, 2001, 1: I-511-I-518 vol. 1.

[2]. Lienhart R, Maydt J. An extended set of haar-like features for rapid object detection[C]//Image Processing. 2002. Proceedings. 2002 International Conference on. IEEE, 2002, 1: I-900-I-903 vol. 1.

[3]. Lienhart R, Kuranov A, Pisarevsky V. Empirical analysis of detection cascades of boosted classifiers for rapid object detection[M]//Pattern Recognition. Springer Berlin Heidelberg, 2003:
297-304.

[4]. http://blog.sina.com.cn/s/blog_74a459380101fcx7.html

[5]. http://www.codeproject.com/Articles/441226/Haar-feature-Object-Detection-in-Csharp

版权声明:本文博客原创文章,博客,未经同意,不得转载。

基于Haar特征Adaboost人脸检测级联分类的更多相关文章

  1. 基于Haar特征的Adaboost级联人脸检测分类器

    基于Haar特征的Adaboost级联人脸检测分类器基于Haar特征的Adaboost级联人脸检测分类器,简称haar分类器.通过这个算法的名字,我们可以看到这个算法其实包含了几个关键点:Haar特征 ...

  2. 照片美妆---基于Haar特征的Adaboost级联人脸检测分类器

    原文:照片美妆---基于Haar特征的Adaboost级联人脸检测分类器 本文转载自张雨石http://blog.csdn.net/stdcoutzyx/article/details/3484223 ...

  3. OpenCV中基于Haar特征和级联分类器的人脸检测

    使用机器学习的方法进行人脸检测的第一步需要训练人脸分类器,这是一个耗时耗力的过程,需要收集大量的正负样本,并且样本质量的好坏对结果影响巨大,如果样本没有处理好,再优秀的机器学习分类算法都是零. 今年3 ...

  4. AdaBoost中利用Haar特征进行人脸识别算法分析与总结1——Haar特征与积分图

    原地址:http://blog.csdn.net/watkinsong/article/details/7631241 目前因为做人脸识别的一个小项目,用到了AdaBoost的人脸识别算法,因为在网上 ...

  5. OpenCV中基于HOG特征的行人检测

    目前基于机器学习方法的行人检测的主流特征描述子之一是HOG(Histogram of Oriented Gradient, 方向梯度直方图).HOG特征是用于目标检测的特征描述子,它通过计算和统计图像 ...

  6. 基于AdaBoost算法——世纪晟结合Haar-like特征训练人脸检测识别

      AdaBoost 算法是一种快速人脸检测算法,它将根据弱学习的反馈,适应性地调整假设的错误率,使在效率不降低的情况下,检测正确率得到了很大的提高.   系统在技术上的三个贡献: 1.用简单的Haa ...

  7. 基于Emgu CV的人脸检测代码

    这个提供的代码例子是Emgu CV提供的源码里面自带的例子,很好用,基本不需要改,代码做的是人脸检测不是人脸识别,这个要分清楚.再就是新版本的Emgu CV可能会遇到系统32位和64位处理方式有区别的 ...

  8. Android—基于OpenCV+Android实现人脸检测

    导读 OpenCV 是一个开源的跨平台计算机视觉库, 采C++语言编写,实现了图像处理和计算机视觉方面的很多通用算法,同时也提供对Python,Java,Android等的支持,这里利用Android ...

  9. 基于python Arcface 实现人脸检测和识别

    虹软的人脸识别技术也是很强的,重要的是他免费提供了离线的sdk,还提供了实例,这个是目前几家研究人脸识别的大公司里面少有的.识别能力正常用还是可以的.我这个代码是调用的离线sdk实现的 ``` fro ...

随机推荐

  1. 802.11(wifi)的MAC层功能

    MAC层是802.11的主要功能部分.上层应用通过调用MAC层提供的接口原语调用MAC层的功能. MAC一共向上提供了2大类接口原语,共30种.数据(1)和管理(29).数据部分就是提供普通数据包的收 ...

  2. Google Maps Android API v2 (3)- 地图添加到Android应用程序

    添加地图的基本步骤是: (一旦)按照以下步骤[入门] [开始],获得API,获取密钥所需的属性,并添加到您的Android清单. 添加一个碎片对象 要处理地图的活动.做到这一点最简单的方法是增加一个  ...

  3. Error 56: The Cisco Systems, Inc. VPN Service has not been started(Cisco VPN在Vista下出现Error 56的解决办法)

    Error 56: The Cisco Systems, Inc. VPN Service has not been started(Cisco VPN在Vista下出现Error 56的解决办法) ...

  4. [原创] 使用rpi + crontab + git 定时向bitbucket 推送 照片

    #前提条件,你得有一个bitbucket的帐户 1.定时启动脚本代码 使用的是crontab Cronfile 内容如下: 此文件的意思是,每隔10分钟,就运行一次 /home/pi/Rpi_uplo ...

  5. 9种CSS3 blend模式制作的鼠标滑过图片标题特效

    这是一款使用CSS3 background-blend-mode制作的鼠标滑过图片标题特效.该图片标题特效在鼠标滑过一张图片的时候,图片的标题会对应的动画,而且图片会使用css blend模式渲染为很 ...

  6. android对app代码混淆

    接到新任务.现有项目的代码混淆.在此之前混淆了一些理解,但还不够具体和全面,我知道有些东西混起来相当棘手. 但幸运的是,现在这个项目是不是太复杂(对于这有些混乱).提前完成--这是总结. 第一部分 介 ...

  7. 解决apache+tomcatserver环境中文乱码的问题

    在使用apache做转发服务器时,碰到了中文乱码的问题. 说说解决思路: 1.通常乱码是由于编码不统一造成的.所以要先推断是不是由于编码问题造成的,假设是的话,那统一编码就能够去解决. 2.tomca ...

  8. poj 2935 Basic Wall Maze

    是一个图论的基础搜索题- 没什么好说的就是搜索就好 主要是别把 代码写的太屎,错了不好找 #include<cstdio> #include<algorithm> #inclu ...

  9. SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别

    SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别: IN:确定给定的值是否与子查询或列表中的值相匹配. IN 关键字使您得以选择与列表中的任意一个值匹配的行. 当要获得居住在 ...

  10. Linux Kernel(Android) 加密算法汇总(三)-应用程序调用内核加密算法接口

    于Linux Kernel(Android) 加密算法总结(cipher.compress.digest)文章中.介绍了怎样在内核中增加三种不同类型的内核加密算法, 并给出了在内核模块中怎样调用他们的 ...