Haar分类器学习总结

1. 基本概念

    Haar分类器 = Haar-like特征 + 积分图(Integral Image)方法 + AdaBoost + 级联
    Haar分类器算法的要点如下:
     1)使用Haar-like特征做检测
     2)使用积分图(Integral Image)对Haar-like特征求值进行加速
     3)使用AdaBoost算法训练区分人脸和非人脸的强分类器
     4)使用筛选式级联把强分类器级联到一起,提高准确率

     Haar分类器实际上是Boosting算法的一个应用,Haar分类器用到了Boosting算法中的AdaBoost算法,只是把AdaBoost算法训练出的强分类器进行了级联,并且在底层的特征提取中采用了高效率的矩形特征和积分图方法。

     Boosting算法的核心思想,是将弱学习方法提升成强学习算法,也就是“三个臭皮匠顶一个诸葛亮”。

1.1 人脸特征值

     将任意一个矩形放到人脸区域上,然后将白色区域的像素和减去黑色区域的像素和,得到的差值称之为人脸特征值。

1.2 弱学习与强学习

     弱学习:就是指一个学习算法对一组概念的识别率只比随机识别了一点

     强学习:就是指一个学习算法对一组概念的识别率很高。

      只要有足够的数据,弱学习算法就能通过集成的方式生成任意高精度的强学习方法。

2. 分类器及其训练

2.1 弱分类器

     

     x:子窗口图像

     f:一个特征

     p:指示不等号方向,使得不等式都是<号

     theta:阈值

     训练最优弱分类器的过程:就是在寻找合适的分类器阈值,使该分类器对所有样本的判别误差最低。

2.2 训练弱分类器

     具体训练过程如下:

     1)对于每个特征f,计算所有训练样本的特征值,并将其排序

          扫描一遍排好序的特征值,对排好序的表中的每个元素,计算以下四个值:

            - 全部人脸样本的权重的和t1;

            - 全部非人脸样本的权重的和t0;

            - 在此元素之前的人脸样本的权重的和s1;

            - 在此元素之前的非人脸样本的权重的和s0

     2)最终求得每个元素的分类误差

           在表中寻找r值最小的元素,则此元素为最优阈值,有了此阈值,我们第一个最优弱分类器就诞生了。

2.3 训练强分类器

      强分类器的诞生需要T轮迭代,具体操作如下:

      1)给定训练样本集S, 共N个样本,其中X和Y分别为正样本和负样本,T为最大训循环次数;

      2)初始化样本权重为1/N,即为训样本的初始概率分布;

      3)第一欠迭代训练N个样本,得到第一个最优弱分类器;

      4)提高上一轮中被误判样本的权重;

      5)将新的样本和上次分错的样本放在一起进行新一轮的训练;

      6)循环执行4-5,T轮后得到T个最优弱分类器;

      7)组合T个最优弱分类器得到强分类器,组合方式如下:

           相当于让所有弱分类投票,再对投票结果按照弱分类器的错误率加权求和,将投票加权求和的结果与平均投票结果比较得出最终的结果。

2.4 级联强分类器

      级联强分类器的策略是:将若干个强分类器由简单到复杂排列,希望通过训练使每个强分类器都有较高的检测率,而误识率可以降低。

      Haar分类器有两个体系:训练体系和检测体系

      训练体系的最后一部分:就是对筛选式级联分类器的训练。训练出多个强分类器将它们强强联手,最终形成正确率很高的级联分类器,这就是我们最终的目标:Haar分类器。

2.5 训练级联分类器

      K:级联分类器的层数

      D:级联分类器的检测率

      F:级联分类器的误识率

      di:第i层强分类器的检测率

      fi:第i层强分类器的误识率

     如果要训练一个级联分类器达到给定的F值和D值,只需要训练出每层的d值和f值,然后有:D=d^K, F=f^K

     级联分类器的要点就是:如何训练每层强分类器的d值和f值达到指定要求。

3. AdaBoost学习算法

    利用AdaBoost算法在“人脸样本集”和“非人脸样本集”上训练具有n个弱分类器的强分类器。

    AdaBoost算法挑选数千个有效的Haar特征来组成人脸检测器。训练时,需要数千张人脸图片和上万张背景图片。

    AdaBoost人脸检测训练算法速度取决于:

     1)特征选取(选取的特征:矩特征-Haar特征)

     2)特征计算(计算方法为:积分图)

3.1 Haar特征

    Haar特征分类三类:

    1)边缘特征

    2)线性特征

    3)中心特征和对角线特征

    以上三类特征组合成特征模板。特征模板内有白色和黑色两种矩形,并定义此模板的特征值为:白色矩形像素和减去黑色矩形像素和。

    在确定了特征形式后,Haar-like特征的数量就取决于训练样本图像矩阵的大小,特征模板在子窗口内任意放置,一种形态称为一种特征,找出所有子窗口的特征是进行弱分类训练的基础。

    Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。


    对于图中的A, B和D这类特征,特征数值计算公式为:v=Sum白-Sum黑,而对于C来说,计算公式如下:v=Sum白-2*Sum黑;之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。

3.2 Haar-like特征的计算—积分图

     积分图就是只遍历一次图像就可以求出图像中所有区域像素和的快速算法,大大的提高了图像特征值计算的效率。
     积分图主要的思想是将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和,从而加快了计算(这有个相应的称呼,叫做动态规划算法)。积分图能够在多种尺度下,使用相同的时间(常数时间)来计算不同的特征,因此大大提高了检测速度。

     而Haar-like特征值无非就是两个矩阵像素和的差,同样可以在常数时间内完成。所以矩形特征的特征值计算,只与此特征矩形的端点的积分图有关,所以不管此特征矩形的尺度变换如何,特征值的计算所消耗的时间都是常量。这样只要遍历图像一次,就可以求得所有子窗口的特征值。


http://blog.csdn.net/naruto0001/article/details/8064007  学习代码解读


http://blog.csdn.net/njzhujinhua/article/details/38377191     

http://blog.csdn.net/xidianzhimeng/article/details/10470839

http://blog.csdn.net/zouxy09/article/details/7922923

http://wenku.baidu.com/view/a862881f783e0912a2162ac3.html   

http://blog.csdn.net/liulina603/article/details/8617281

http://blog.csdn.net/haidao2009/article/details/7514787  

http://wenku.baidu.com/link?url=E5Fme024ZtEW3pKP4R_zLXqK0l_dWarnaDBa1Qn3rl6V4DJf_00sVXi6wzM8w_UI9T1gGJN5w105fALU4FEE3uwcRYD2MaWrELBczJeLxL_   

http://blog.csdn.net/dark_scope/article/details/14103983     

      






你可能感兴趣的:(Haar分类器学习总结)