AdaBoost人脸检测训练算法 (上)

前在实际中应用人脸检测方法多为基于Adaboost学习算法的方法,这种检测方法最初由剑桥大学的两位大牛Paul ViolaMichael Jones[ViolaJones01]提出,并由另一位大牛英特尔公司的Rainer Lienhart[Lienhart02]对这一方法进行了改善。

这里,我先介绍ViolaJones的人脸检测方法,然后再介绍Lienhart的人脸检测算法。

我们可以发现,两种检测方法的大体框架是相同的,只是在Harr-like特征的选取、计算以及AdaBoost训练算法上有区别。

 

ViolaJones人脸检测方法

 

ViolaJones人脸检测方法是一种基于积分图级联检测器和AdaBoost算法的方法,方法框架可以分为以下三大部分:
    
1)使用Harr-like特征表示人脸,使用“积分图”实现特征数值的快速计算;
    
2)使用Adaboost算法挑选出一些最能代表人脸的矩形特征(分类),按照加权投票的方式将弱分类器构造为一个强分类器;
    
3)将训练得到的若干强分类器串联组成一个级联结构的层叠分类器,级联结构能有效地提高分类器的检测速度

 

一、Haar-like矩形特征的特征值的快速计算方法

 

影响AdaBoost人脸检测训练算法速度很重要的两方面是特征选取和特征计算。选取的特征为矩特征为Haar特征,计算的方法为积分图。

 

1Haar-like特征

 

Haar-like特征最早是由Papageorgiou等应用于人脸表示,ViolaJones在此基础上,使用3种类型4种形式的特征。

3种类型分别为:2-矩形特征、3-矩形特征、4-矩形特征。

Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。

特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。

 对于图中的A,  BD这类特征,特征数值计算公式为:v=Sum-Sum

 而对于C来说,计算公式如下:v=Sum-2*Sum

之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。

 

通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。

上图的特征模板称为“特征原型”;特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”;矩形特征的称为特征值”。

假设训练或检测窗口大小为W x H个像素,w , h分别为特征原型的长、宽,所示四种特征原型对应的w /h分别为:2/11/23/12/2

 

一个haar-like特征在24*24像素图的子检测窗口中的矩形特征数量总计为134736个。

 

2、积分图(Integral Image

 

积分图主要的思想是将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和,从而加快了计算。(最近听过屈婉玲老师课的话,应该知道,这有个相应的称呼,叫做动态规划算法)

点(x,y)处的积分图,定义为点(x,y)左上角所有像素和。用公式表示为:

其中,I(x',y')为图像在点(x',y')处的像素值。

为了节约时间,减少重复计算,则积分图可按如下递推公式计算:

其中,ii(x,y)为点(x,y)的积分图,i(x,y)为点(x,y)处的像素值,s(x,y)为点(x,y)的累计行总和。

 

这样就可以进行2种运算:

1)任意矩形区域内像素积分

由图像的积分图可方便快速地计算图像中任意矩形内所有像素灰度积分。

如下图所示,点1的积分图像ii1的值为(其中Sum为求和)

ii1=SumA

同理,点2、点3、点4的积分图像分别为:

ii2=Sum(A)+Sum(B)

ii3=Sum(A)+Sum(C)

ii4=Sum(A)+Sum(B)+Sum(C)+Sum(D)

矩形区域D内的所有像素灰度积分可由矩形端点的积分图像值得到:

        Sum(D)=ii1+ii4-(ii2+ii3)            (1)

 

(2)特征值计算

矩形特征的特征值是两个不同的矩形区域像素和之差。

(1)式可以计算任意矩形特征的特征值。

上图中,该特征原型的特征值定义为:Sum(A)-Sum(B)

根据(1)式则有:Sum(A)=ii4+ii1-(ii2+ii3)Sum(B)=ii6+ii3-(ii4+ii5)

所以此类特征原型的特征值为:(ii4-ii3)-(ii2-ii1)+(ii4-ii3)-(ii6-ii5)

 

矩形特征的特征值计算,只与此特征矩形的端点的积分图有关,所以不管此特征矩形的尺度变换如何,特征值的计算所消耗的时间都是常量。这样只要遍历图像一次,就可以求得所有子窗口的特征值。

 

二、使用Adaboost算法选取优化的弱分类器和级联结构的层叠分类器

 

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

训练过程分为3个步骤:首先需要提取Haar特征;然后将Haar特征转化成对应的弱分类器;最后从大量的弱分类器中迭代选择出最优弱分类器。

 

1)提取Haar特征

 

常用的Haar特征有4种。

 

当然也可以在这4种特征的基础上设计出更多、更复杂的特征。以大小为24x24像素的训练样本为例,上述4种特征的总个数超过了160000个。

这样庞大的数字给后续的迭代训练工作带来了庞大的计算量,直接导致AdaBoost算法训练过程极为费时,这恰恰是算法需要改进的关键问题之一。

 

2)生成弱分类器

 

AdaBoost的学习算法能从一个很大的特征集中选择很小的一部分关键的特征,从而产生一个极其有效的分类器。

最初的AdaBoost学习算法可用于提高一个简单的分类器(有时又称为弱分类器)的性能,它最终形成的强分类器的训练错误率接近于零,而且具有很好的推广性。

每一个Haar特征都对应着一个弱分类器,每一个弱分类器都是根据它所对应的Haar特征的参数来定义的。利用上述Haar特征的位置信息,对训练样本进行统计就可以得到对应的特征参数。

Viola共定义了180,000种矩形特征,这个数远大于图像中像素的数目。每个特征都能很快计算出来,再通过试验选出一小部分作为特征以形成一个有效的分类器。要得到最终的强分类器,最重要的是如何找到这些特征。

为此起见,每个弱分类器的设计都是从能对正例和反例进行正确分类的所有弱分类器的集合中选择错误率最小的一个。对每个特征而言,弱学习器决定弱分类器的最佳的阈值,使其具有最小的误分样本数。

因此一个弱分类器hj(x)是由一个特征(fj)、一个阈值(θj)和一个指示不等式方向的校验器(pj)构成:

其中x表示图像中一个24 x24像素大小的子窗口。

  • 1
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值