Adaboosting 的理解


這里說說我對這個算法的理解:

主要應用在人臉檢測。haar特征 + adaboosting,人臉檢測系統是一個級聯的分類器系統,這里主要是討論其中一個節點。

大體流程如果:

 

                

首先准備正負樣本,在一個訓練強分類器H時,使用booststraping策略來進行樣本的提取:從整體樣本集合中,抽樣n1 < n個樣本 針對抽樣的集合訓練分類器H1,,抽樣的方法有很多,例不放回抽樣等.當訓練第二強分類器時,從樣本整體集合D中,抽取 nn 個樣本,其中合並進一半被 C1 分類錯誤的樣本。得到樣本集合 D2,訓練弱分類器H2,抽取D樣本集合中,H1 和 H2 分類不一致樣本,組成D3,訓練弱分類器H3

特征的選擇:20 * 20 的圖像

這里的尺度需要縮放,使得目標的大小具有更大適應性,根據給定的參數,特征的數量大概是67067(主要是為了能加速訓練的過程,所以增加了一些限制)。在訓練前對圖像進行直方圖均衡化(光照補償)。

具體的haar特征提取參考:http://www.cnblogs.com/ello/archive/2012/04/28/2475419.html

系統使用haar特征的原因在於它的簡單,計算復雜度低,可以達到實時性的目的。

Adaboost(Adaptive Boosting)算法 是一個將幾個弱分類器結合起來,說白了就是幾個臭皮匠頂個諸葛亮,不過不同於boostraping,它不是緊緊將幾個弱分器的相加,而是需要樣本權值來使得每次弱分類器的連續,涉及到權值的選擇和更新,在抵抗噪聲干擾使用的是權值修正 (Weight trimming)。如果分類正確了,權重降低,如果分類錯了,則權重提高,初始的時候,權重都是一樣的。通過多次迭代,可以想象得到,程序越往后執行,訓練出的模型就越會在意那些容易分錯(權重高)的點。當全部的程序執行完后,會得到M個模型在整個訓練過程中其實就是一個貪婪算法,在每一次訓練弱分類器的時候,都需要對所有的特征進行一個迭代,選擇一個能是使得目標誤差函數最小的特征作為弱分類器的特征(相當每個特征對應一個弱分類器),所以adaboosting算法也被認為是一個特征選擇算法。算法之所以稱為自適應,因為在每次迭代過程中會根據分類的結果來調整權值,這里也就是adaboost與boosting算法的最大差異。

adaboost/boosting 的差異:http://www.cnblogs.com/fartherfuture/p/3678668.html

adaboosting算法的流程如下:

整個過程完成之后,就得到一個強分類器。 之后通過樣本選擇策略來更新樣本,再訓練得到一個強分類器。。。。。

通過多個分類器結合起來得到一個級聯分類器(強強聯合)。

在Opencv2.4.8里有具體的函數或者應用程序來選擇樣本和訓練級聯分類器。

 

CreateSample 使用的是Opencv_createSample.exe 應用程序,具體參見文檔:Opencv 之 HaarTraining算法剖析 作者周明才,講的很好

下面是我根據文檔的結果

Opencv_haartrainging d的參數中最值得注意的就是 -npos 和 -nneg ,參數-nstages 表示級聯分類器的級數nstages, -minhitrate 表示最小命中率,默認是0.95

-npos 代表的是正樣本的數目,是指在訓練一個強分類器從.vec文件中抽樣出來的數據樣本,-nneg表示訓練一個強分類器的負樣本數目。

假設.vec文件的數目是CountVec,那么有這樣一個不等式成立

CountVec >= (npos + (nstages - 1)*(1 -minhitrate) * npos ) + nneg 

為什么需要滿足這個不等式呢?

主要原因在於每一個強分類器時樣本的選擇上,在 stage=0時,隨機的從.vec文件中選擇npos個正樣本,由於存在虛警,在每一次訓練一個強分類器之后,會把那些分類錯誤的從整個樣本庫中剔除掉,總的樣本就剩下 CountVec = CountVec - (1 - minhitrate)* npos,在第二個強分類器的訓練過程中就是從剩下的Countvec抽樣,一直這樣進行nstage次,所以就有CountVec >= (npos + (nstages - 1)*(1 -minhitrate) * npos ) + nneg 。

當在使用opencv_haartraining 訓練的時候,出現如下的報錯

Opencv Error:Assert failed (elements_read == 1) in icvGetHaarTraininDataFrom

那么基本可以認定Countvec的個數不足於一次強分類器的訓練也就是這個時候 Countvec < npos.

 


免責聲明!

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



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