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):影響決策樹構建的法則以及權重更新策略

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM