AdaBoost算法是一种自适应的Boosting算法,基本思想是选取若干弱分类器,组合成强分类器。根据人脸的灰度分布特征,AdaBoost选用了Haar特征[38]。AdaBoost分类器的构造过程如图2-4所示。

图2-4  Adaboost分类器的构造过程

1)Haar-like矩形特征

Haar-like矩形特征是根据图像的区域灰度对比特性进行设计的,常用的Haar-like特征[39]如图2-5所示,Haar-like特征值定义为白色区域像素值之和与黑色区域像素值之和的差值。

图2-5  常用的Haar-like矩形特征

一幅图像中Haar-like矩形特征的个数非常多,对于一个大小的窗口,就包含大约16万个矩形特征,计算量非常大。为提高运算速度,Viola等[17]将积分图应用于Haar-like特征值的计算。对于一幅图像,点处的积分图像值定义为该点左上方所有点的像素值之和,即:

(2-4)

其中表示积分图像在点处的积分图像值,表示原图像在点处的像素值。通过对原图像的一次遍历即可完成积分图像的初始化。完成积分图像初始化后,对矩形区域内像素值之和的计算变得非常简单:一个矩形内的像素值之和可以由构成该矩形的四个点来确定。对于图2-6所示的图像,若要计算区域的像素值之和,可用式(2-5)得到:

(2-5)

图2-6 积分图像示意图

2)弱分类器

对于一个“是”或“否”问题,随机猜测,正确的概率为50%。而如果有一个分类器的分类精度稍大于50%,则称之为弱分类器。在Adaboost算法中,弱分类器由Haar-like矩形特征生成,构造方法如下:

(2-6)

其中是弱分类器,是矩形特征,是阈值,控制不等号的方向,取值为,将检测样本的特征值与阈值进行比较,为1表示人脸,0表示“非人脸”。

3)强分类器

将若干个弱分类器进行组合构造分类能力更好的强分类器。矩形特征很多,因此会构造大量弱分类器,从中选取分类效果最好的若干个弱分类器,同时将有效特征进行提升,构造强分类器[40][41][42]

假设要选取个弱分类器来构造强分类器,现有个训练样本,其中人脸样本有个,非人脸样本有个,样本表示为,代表样本图像,当属于人脸时,,否则。构造强分类器的具体步骤如下:

(1)对训练样本的权值进行初始化:

(2-7)

其中代表第零次迭代,第个样本的权值。

(2)循环迭代,迭代次数,对于第次迭代,操作如下:

(a)、对权值进行归一化,使服从概率分布: 。

(b)、对所有弱分类器进行一次遍历,计算每个弱分类器对所有训练样本的误差之和,计算公式为:

(2-8)

其中代表第个弱分类器的误差,代表第个训练样本在第次迭代的权值,表示第个弱分类器对第个样本的判别值。

(c)、从所有弱分类器中选出误差最小者作为本次迭代的最优弱分类器,记为,其引起的总误差为。

(d)、对训练样本的权值进行更新,公式为:

(2-9)

其中,的取值规则为:当被正确分类时,,否则。

(e)、若,令,进入下一次迭代。

(3)结束循环,得到强分类器:

(2-10)

其中,。表示人脸,表示非人脸。

4)级联强分类器

通常情况下,大部分待检测的“非人脸”窗口与人脸差别很大,可以用很少的特征进行分类;而少数与人脸差异不大的待检窗口应该用更多的特征来区分,基于这一事实,AdaBoost引入了级联强分类器[40][42],如图2-7所示,将多个强分类器串联起来,强分类器一级比一级严格。前面的分类器由比较重要的特征构成,要求能够快速的排除大部分的“非人脸”窗口,后面的分类器一般比较复杂,用来区分少数与人脸相似的待检窗口。每一级强分类器遵循的原则是:在保证人脸图像通过率的前提下,尽可能多的排除“非人脸”。

由实验结果可知,Adaboost检测算法引起了误检和漏检的情况:人脸姿态发生变化时会造成漏检,可以通过训练人脸在不同姿态下的分类器来解决;当图像中存在与人脸的灰度分布情况类似的区域时,会造成误检,如图2-8中的人脸雕塑,由于雕塑是三维的,在外界光照的影响下,雕塑的二维图像中人脸区域的灰度分布与真实人脸的灰度分布相似,因此造成误检测,此外,当背景中某个区域的灰度分布与人脸灰度分布相似时,也会造成误检测。

本章针对Adaboost的误检问题进行了研究。传统的Adaboost算法只利用了人脸的灰度信息,而目前图像采集设备所采集的图像一般是彩色的,本章同时利用图像的灰度信息和彩色信息,将Adaboost算法与肤色检测算法相结合,用来降低误检率

基于Adaboost的人脸检测算法的更多相关文章

  1. 基于AdaBoost的人脸检测

    原地址:http://blog.csdn.net/celerychen2009/article/details/8839097 人脸检测和人脸识别都是属于典型的机器学习的方法,但是他们使用的方法却相差 ...

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

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

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

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

  4. 机器学习: Viola-Jones 人脸检测算法解析(二)

    上一篇博客里,我们介绍了VJ人脸检测算法的特征,就是基于积分图像的矩形特征,这些矩形特征也被称为Haar like features, 通常来说,一张图像会生成一个远远高于图像维度的特征集,比如一个 ...

  5. 机器学习: Viola-Jones 人脸检测算法解析(一)

    在计算机视觉领域中,人脸检测或者物体检测一直是一个非常受关注的领域,而在人脸检测中,Viola-Jones人脸检测算法可以说是非常经典的一个算法,所有从事人脸检测研究的人,都会熟悉了解这个算法,Vio ...

  6. 重磅!刷新两项世界纪录的腾讯优图人脸检测算法DSFD开源了!

    近日,知名开源社区Github上有个名为DSFD(Dual Shot Face Detector)的算法引起了业内关注,它正是来自于腾讯优图.目前,该算法已经被计算机视觉顶级会议CVPR 2019接收 ...

  7. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

  8. 使用Dlib来运行基于CNN的人脸检测

    检测结果如下 这个示例程序需要使用较大的内存,请保证内存足够.本程序运行速度比较慢,远不及OpenCV中的人脸检测. 注释中提到的几个文件下载地址如下 http://dlib.net/face_det ...

  9. 【AdaBoost算法】基于OpenCV实现人脸检测Demo

    一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...

随机推荐

  1. python 3.4 装matplotlib numpy

    为了装个matplotlib包,搞了好久:   python3.4,官方没有对应版本的包,只能去下面这个地方下对应的版本: http://www.lfd.uci.edu/~gohlke/pythonl ...

  2. BZOJ 3039: 玉蟾宫( 悬线法 )

    最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...

  3. Android--开发过程中使用到的长度单位

    px:表示屏幕实际的像素. in:表示英寸. mm:毫米. pt:表示一个点,是屏幕的物理尺寸. dp:(与密度无关的像素)逻辑长度单位,在160dpi屏幕上,1dp = 1px = 1/160英寸 ...

  4. 关于 Swift

    摘自:http://numbbbbb.gitbooks.io/-the-swift-programming-language-/chapter1/01_swift.html Swift 是一种新的编程 ...

  5. DNS与网站优化

    点就出现了这样的问题,导致了几小时的访问失败,所以选择优秀的DNS服务器势必关系网站发展的生死存亡.本文做以下分析.     选择良好的DNS服务器要从选择域名注册商说起,在注册域名时多数人看中的仅仅 ...

  6. HDU4544 湫湫系列故事――消灭兔子

    HDU 4544 Tags: 数据结构,贪心 Analysis: 将兔子的血量从大到小排序,将箭的杀伤力从大到小排序,对于每一个兔子血量, 将比他大的杀伤力大的剑压入优先队列,优先队列自己重写,让它每 ...

  7. const对象默认是static的,而不是extern的

    const 和 static 变量,可以放在头文件中 const对象默认是static的,而不是extern的,所以即使放在头文件中声明和定义.多个cpp引用同一个头文件,互相也没有感知,所以不会导致 ...

  8. 仿Google首页搜索自动补全

    仿Google自动补全,实现细节: 后台是简单的servlet(其实就是负责后台处理数据交互的,没必要非跌用个struts...什么的) 传输介质:xml 使用jQuery js框架 功能实现: 如果 ...

  9. Javascript 调试利器 Firebug使用详解

    Javascript 调试利器 Firebug使用详解 有时候,为了更清楚方便的查看输出信息,我们可能需要将一些调试信息进行分组输出,那么可以使用console.group来对信息进行分组,在组信息输 ...

  10. Android 调整屏幕分辩率

    Android 可设置为随着窗口大小调整缩放比例及设定fixed的窗口大小. 对于surface的控制在SurfaceHolder类中进行 而Android 屏幕分辩率中已经有一个类DisplayMe ...