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算法的核心思想,是将弱学习方法提升成强学习算法,也就是“三个臭皮匠顶一个诸葛亮”。
将任意一个矩形放到人脸区域上,然后将白色区域的像素和减去黑色区域的像素和,得到的差值称之为人脸特征值。
弱学习:就是指一个学习算法对一组概念的识别率只比随机识别了一点
强学习:就是指一个学习算法对一组概念的识别率很高。
只要有足够的数据,弱学习算法就能通过集成的方式生成任意高精度的强学习方法。
x:子窗口图像
f:一个特征
p:指示不等号方向,使得不等式都是<号
theta:阈值
训练最优弱分类器的过程:就是在寻找合适的分类器阈值,使该分类器对所有样本的判别误差最低。
具体训练过程如下:
1)对于每个特征f,计算所有训练样本的特征值,并将其排序
扫描一遍排好序的特征值,对排好序的表中的每个元素,计算以下四个值:
- 全部人脸样本的权重的和t1;
- 全部非人脸样本的权重的和t0;
- 在此元素之前的人脸样本的权重的和s1;
- 在此元素之前的非人脸样本的权重的和s0
2)最终求得每个元素的分类误差
在表中寻找r值最小的元素,则此元素为最优阈值,有了此阈值,我们第一个最优弱分类器就诞生了。
强分类器的诞生需要T轮迭代,具体操作如下:
1)给定训练样本集S, 共N个样本,其中X和Y分别为正样本和负样本,T为最大训循环次数;
2)初始化样本权重为1/N,即为训样本的初始概率分布;
3)第一欠迭代训练N个样本,得到第一个最优弱分类器;
4)提高上一轮中被误判样本的权重;
5)将新的样本和上次分错的样本放在一起进行新一轮的训练;
6)循环执行4-5,T轮后得到T个最优弱分类器;
7)组合T个最优弱分类器得到强分类器,组合方式如下:
相当于让所有弱分类投票,再对投票结果按照弱分类器的错误率加权求和,将投票加权求和的结果与平均投票结果比较得出最终的结果。
级联强分类器的策略是:将若干个强分类器由简单到复杂排列,希望通过训练使每个强分类器都有较高的检测率,而误识率可以降低。
Haar分类器有两个体系:训练体系和检测体系
训练体系的最后一部分:就是对筛选式级联分类器的训练。训练出多个强分类器将它们强强联手,最终形成正确率很高的级联分类器,这就是我们最终的目标:Haar分类器。
K:级联分类器的层数
D:级联分类器的检测率
F:级联分类器的误识率
di:第i层强分类器的检测率
fi:第i层强分类器的误识率
如果要训练一个级联分类器达到给定的F值和D值,只需要训练出每层的d值和f值,然后有:D=d^K, F=f^K
级联分类器的要点就是:如何训练每层强分类器的d值和f值达到指定要求。
利用AdaBoost算法在“人脸样本集”和“非人脸样本集”上训练具有n个弱分类器的强分类器。
AdaBoost算法挑选数千个有效的Haar特征来组成人脸检测器。训练时,需要数千张人脸图片和上万张背景图片。
AdaBoost人脸检测训练算法速度取决于:
1)特征选取(选取的特征:矩特征-Haar特征)
2)特征计算(计算方法为:积分图)
Haar特征分类三类:
1)边缘特征
2)线性特征
3)中心特征和对角线特征
以上三类特征组合成特征模板。特征模板内有白色和黑色两种矩形,并定义此模板的特征值为:白色矩形像素和减去黑色矩形像素和。
在确定了特征形式后,Haar-like特征的数量就取决于训练样本图像矩阵的大小,特征模板在子窗口内任意放置,一种形态称为一种特征,找出所有子窗口的特征是进行弱分类训练的基础。
Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。
对于图中的A, B和D这类特征,特征数值计算公式为:v=Sum白-Sum黑,而对于C来说,计算公式如下:v=Sum白-2*Sum黑;之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。
而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