您的位置:首页 > 其它

学习记录:基于adaboost的人脸检测

2015-11-30 21:00 387 查看
参考:

基于 AdaBoost 算法的人脸检测 北京大学 赵楠
csdn博客:http://blog.csdn.net/watkinsong/article/details/7631241

最近在看基于adaboost的人脸检测,因为数学基础较差,所以比较吃力,花费了好长时间,终于有了 一些眉目。 知道自己各方面都很差,所以开始以博客的形式记录下学习的历程。

boosting方法

boosting本意指增加发动机的压力,而boosting方法是指通过融合多个分类器,大大提高分类的性能。-------摘自《模式识别》

adaboost

由于自己基础很差,看了很多网上的资料及介绍adaboost算法的博客都没能明白。就翻看以前学过的《模式识别》,居然真的找到了adaboost的介绍,虽然介绍相对简单,但还是大致明白了。

以下是书上关于adaboost算法的描述:

(由于公式没法编辑,求和类的在后面括号内写了取值范围)

设给定N个训练样本{x1、x2、、、、xn},用fm(x)∈{-1,1}(m=1、、、M)表示M个弱分类器在样本x上的输出:

1,初始化训练样本(x1、x2、、、、xn)的权重wi=1/N,i = 1….N。

2,利用m=1→M,重复以下过程:

(1) 利用{wi}加权后的训练样本构造分类器fm(x)∈{-1,1}。

(2) 计算样本用{wi} 加权后的分类错误率em,并令cm=log((1-em)/em). cm即为分类器权值。

(3) 令wi=wi exp [ cm 1(yi≠fm(xi))],i=1,2…N,并归一化使 ∑wi=1(i从1到N)。 1(yi≠fm(xi)表示当yi≠fm(xi)时取1,否则取0.

3,对于待分类样本x,分类器输出为: sgn[∑fm(x)](m从1到M)

矩形特征

AdaBoost算法的实现,采用的是输入图像的矩形特征,也叫Haar特征。

常用矩形特征有三种

分别表示边缘特征、线性特征和特定方向特征。

特征模板的特征值定义为:白色矩形像素和减去黑色矩形像素和。

求滑动子窗口中的矩形特征数量

如图所示的一个m*m大小的子窗口,可以计算在这么大的子窗口内存在多少个矩形特征。

以 m×m 像素分辨率的检测器为例,其内部存在的满足特定条件的所有矩形的总数可以这样计算:

对于 m×m 子窗口,我们只需要确定了矩形左上顶点A(x1,y1)和右下顶点B(x2,y2) ,即可以确定一个矩形;如果这个矩形还必须满足下面两个条件(称为(s, t)条件,满足(s, t)条件的矩形称为条件矩形):

X方向能被s整除(能均分成s段)

Y方向能被t整除(能均分成t段)

矩形的最小尺寸为:s*t或者t*s,最大尺寸为[m/s]*sX[m/t]*t或者[m/t]*tX[m/s]*s。
[]为取整运算。

因此,通过以下可以定位矩形位置。

确定A(x1,y1),x1∈{1,2....,m-s,m-s+1},y1∈{1,2....,m-t,m-t+1}
(为什么+1,可画线段证明,需要将开始点计算入内)

确定A点后,B(x2,y2)只能在上图阴影中取值

x2∈X={x1+s-1,x1+2s-1,.....x1+(p-1)s-1,x1+ps-1}
(为什么-1,跟上面类似,x1+s时多算了一个点)

y2∈Y={y1+t-1,y1+2t-1,.....y1+(q-1)t-1,y1+qt-1}

p=[(m-x1+1)/s] q=[(m-y1+1)/t] 又|X|=p |Y|=q.

由上分析可知,在m×m 子窗口中,满足(s, t)条件的所有矩形的数量为

实际上,(s, t)条件描述了矩形特征的特征,下面列出了不同矩形特征对应的(s, t)条件:

下面以 24×24 子窗口为例,具体计算其特征总数量:

下面列出了,在不同子窗口大小内,特征的总数量:

积分图

在获取了矩形特征后,要计算矩形特征的值。Viola等人提出了利用积分图求特征值的方法。

坐标A(x,y)的积分图是其左上角的所有像素之和(图中的阴影部分)

其中ii(x,y)表示积分图,i(x,y)表示原始图像,对于彩色图像,是此点的颜色值;对于灰度图像,是其灰度值,范围为0~255。

利用积分图计算特征值

一个区域的像素值,可以利用该区域的端点的积分图来计算。如图所示,在图中ii(1)表示区域A的像素值,ii(2)表示A+B的区域,ii(3)表示A+C区域的像素值,ii(4)表示A+B+C+D区域的像素值。

D=A+B+C+D+A-(A+B)-(A+C)

即D=ii(4)+ii(1)-ii(2)-ii(3)

计算特征值

一个区域的像素值,可以由该区域的端点的积分图来计算。由前面特征模板的特征值的定义可以推出,矩形特征的特征值可以由特征端点的积分图计算出来。以“两矩形特征”中的第二个特征为例,如下图,使用积分图计算其特征值:

算出A和B区域的像素值,根据定义A-B即可。

弱分类器

一个弱分类器h(x,f
, p,q)由一个特征f,阈值q和指示不等号方向的p组成:
(x表示检测窗口)

训练一个弱分类器就是确定f的最优阈值,使得这个弱分类器的对所有分类样本的分类误差最低。

训练过程:

1,对于每个特征f,计算所有训练样本的特征值。

2,将特征值排序。

3,对排序好的每个元素:

(1)计算全部正例的权重和T+;

(2)计算全部负例的权重和T-;

(3)计算该元素前正例的权重和S+;

(4)计算该元素前负例的权重和S-;

4选定当前元素的特征值Fk和它前面的一个特征值Fk-1之间的数作为阈值,得出该阈值的分类误差:

训练一个弱分类器(特征f)就是在当前权重分布的情况下,确定f
的最优阈值,使得这个弱分类器(特征f)对所有训练样本的分类误差最低。

选取一个最佳弱分类器就是选择那个对所有训练样本的分类误差在所有弱分类器中最低的那个弱分类器(特征)。

于是,通过把排序的元素扫描一遍,就可以为弱分类器选择分类误差最小的阈值,也就是选择了一个最佳弱分类器。

经过T次迭代,得到T个若分类器。

训练强分类器

参考:

基于 AdaBoost 算法的人脸检测 北京大学 赵楠

csdn博客:http://blog.csdn.net/watkinsong/article/details/7631241
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: