Adaboost原理及目标检测中的应用

时间:2023-12-16 21:26:38

Adaboost原理及目标检测中的应用

whowhoha@outlook.com

Adaboost原理

Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器,然后把这些弱分类器集合起来,构成强分类器。adaboost算法训练的过程中,初始化所有训练样例的具有相同的权值重,在此样本分布下训练出一个弱分类器,针对错分样本加大对其对应的权值,分类正确的样本降低其权值,使前一步被错分的样本得到突显,获得新的样本分布,在新的样本分布下,再次对样本进行训练,又得到一个分类器。依次循环,得到T个分类器,将这些分类器按照一定的权值组合,得到最终的强分类器。训练的关键是针对比较难分的训练样本,在联合弱分类器时,使用加权投票,这样分类效果好的弱分类器得到较大的权重,分类效果差的则权值较小。Adaboost方法是经过调整的boosting算法,能够对弱学习得到的弱分类器的错误率进行适应性调整, 相对boosting算法,Adaboost方法使用加权后选取的训练数据代替随机选取的训练样本,训练的焦点集中在比较难分的训练数据样本上;在联合弱分类器联合时,使用加权的投票机制代替平均投票机制。让分类效果好的弱分类器具有较大的权重,而分类效果差的分类器具有较小的权重。

Adaboost算法的具体过程

1.初始化所有训练样例的权重为1 / N,其中N是样例数

2.for m=1,……M:

a).训练弱分类器ym(),使其最小化权重误差函数(weighted error function):

b)接下来计算该弱分类器的话语权α:

c)更新权重:

其中Zm:

是规范化因子,使所有w的和为1。(这里公式稍微有点乱)

3.得到最后的分类器:

Adaboos的过程可以用如下结构表示:

最后的分类器YM是由数个弱分类器(weak classifier)组合而成的,相当于最后m个弱分类器来投票决定分类,而且每个而且每个弱分类器的“话语权”α不一样。

  上述迭代算法中,每一次循环根据当前的权重分布对样本x定一个分布P,然后对这个分布下的样本使用弱学习算法得到弱分类器,而这个错误率的上限并不需要事先知道。每 一次迭代,都要对权重进行更新。更新的规则是:减小弱分类器分类效果较好的数据的概率,增大弱分类器分类效果较差的数据的概率。最终的分类器是个弱分类器的加权平均。

 adaboost在目标检测中的应用

        在实际应用中,adaboost基本上可以训练任何想要检测的目标比如车辆、人脸、字符、商标、建筑物等等,收集正负样本,正样本为所训练的目标,比如下图中车辆、字符、人脸等目标已经切分好的目标。

Adaboost原理及目标检测中的应用

负样本可以为图像中未包含正样本的任意图像。分类器训练方法可以按照http://www.cnblogs.com/whowhoha/p/5623483.html 的方法训练分类器,训练完成后,导入分类器(openCv中为xml文件)参数对图像进行扫描检测,将扫描的多个候选框合并即可得到最终的目标位置。

另外:训练分类器参数设置示例及训练过程中的参数设置方法说明

训练级联Adaboost参数如下:

numPos: 9000

numNeg: 28000

numStages: 18

precalcValBufSize[Mb] : 1000

precalcIdxBufSize[Mb] : 1000

stageType: BOOST

featureType: HARR

sampleWidth: 24

sampleHeight: 24

boostType: DAB

minHitRate: 0.95

maxFalseAlarmRate: 0.65

weightTrimRate: 0.97

maxDepth: 1

maxWeakCount: 100

1 正负样本比例问题:比例大约1:3的样子比较好,1:3或者1:4训练出来的分类器要优于1:1或者1:9,原因是正负样本比例接近时,对负样本的命中程度低(实际中负样本肯定远远多于正样本),正负样本比例较大(比如1:9)时,重视负样本的统计特性而忽略了正样本的统计特性,造成正样本权重总和小,当权重小于一定程度的时候可能很大一部分正样本都不参与训练了(在weightTrimRate=0.95时)。

2 minHitRate:分类器的每一级希望得到的最小检测率。总的检测率大约为minHitRate ^ numStages。影响每个强分类器阈值,当设置为0.95时如果正训练样本个数为12000个,那么其中的600个就很可能被判别为负样本,第二次选择的时候必须多选择后面的600个,按照这种规律我们为后面的每级多增加numPos*minHitRate个正样本,根据训练的级数可以得到如下公式

numPos+(numStages-1)*numPos*(1-minHitRate),即需要准备的训练正样本个数

3 maxFalseAlarm:分类器的每一级希望得到的最大误检率。总的误检率大约为maxFalseAlarm ^ numStages,.影响每个强分类器中弱分类器的个数,设置较大,每级可以滤除负样本的比例就较小,这样在测试过程中虚警率就较高;设置较小,每级强分类器中弱分类器的个数就较多,检测时间就会相对要长,在可以接受的检测时间下尽量降低maxFalseAlarm是我们要追求的目标

关于负样本的选择,因为每级剩下的负样本个数低于numNeg*maxFalseAlarm,在第二轮选择的时候从之前选择的负样本后面继续选择,而不是重头开始将选择过的负样本也包含进来,只有当遍历完一遍负样本列表后才重头在扫描一遍

4 weightTrimRate:影响参与训练的样本(不管是正样本还是负样本),当更新完样本权重之后,将样本权重按照从小到大的顺序排列,从后面开始累加样本权重大于weightTrimRate时,前面的样本就不参与后面的训练了

5 maxWeakCount:决定每级强分类器中弱分类器的最大个数,当FA降不到指定的maxFalseAlarm时可以通过指定最大弱分类器个数停止单个强分类器。

6 boost参数(maxDepth、bt):影响决策树构建的法则以及权重更新策略