zoukankan      html  css  js  c++  java
  • Adaboost原理及目标检测中的应用

    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基本上可以训练任何想要检测的目标比如车辆、人脸、字符、商标、建筑物等等,收集正负样本,正样本为所训练的目标,比如下图中车辆、字符、人脸等目标已经切分好的目标。

    负样本可以为图像中未包含正样本的任意图像。分类器训练方法可以按照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):影响决策树构建的法则以及权重更新策略

  • 相关阅读:
    centos安装openssl
    centos安装tomcat
    centos安装jdk文件
    shell常用命令
    linux命令: Netstat
    unix-软件安装
    页面校验方式
    软件性能的几个术语指标
    亚马逊的技术架构是怎么样的
    数据挖掘-什么是数据挖掘
  • 原文地址:https://www.cnblogs.com/whowhoha/p/5623977.html
Copyright © 2011-2022 走看看