標籤:boosting 演算法
本文主要參考了OpenCV的官方文檔
http://docs.opencv.org/modules/ml/doc/boosting.html
boosting演算法是一個監督式機器學習演算法,它解決的是一個二元分類問題。本文包括對演算法思想的理解,不包含演算法的數學推導。
目標檢測就是用這個分類演算法,把只含有目標的圖片作為一類,不含有目標的作為另一類,然後訓練分類器,進行檢測的時候,輸入一張圖片,用一個視窗掃描這個圖片,對每個視窗應用分類器,返回是目標的類別時,就檢測到了目標。
監督式機器學習目標是找到一個函數y=h(x),對於一個輸入x,給出一個輸出y,y如果是取幾個離散的值,稱為分類問題,y如果取連續的值,成為迴歸問題。函數h(x)需要對樣本資料((Xi,Yi),i=1,2,…N,Xi是一個k維向量,是對特徵的一個編碼)訓練得到h(x)的運算式,然後對於一個新的x,使用y=h(x)進行計算就可預測出y。一般會會為h(x)選擇一個模型,只不過是包含參數的,訓練就是指根據採集的樣本資料把這個參數確定下來,使得這個參數確定後的模型能夠很好的刻畫輸入x和輸出y之間的函數關係。
Boosting(提升)這一概念為監督式分類學習問題提供了一種有力的解決方案。它通過結合許多弱分類器的效能來獲得可靠的分類結果。弱分類器是指識別錯誤率僅僅比隨機猜測好一點的分類器;強分類器指的是識別準確率很高並且能在多項式時間內完成的分類器。
Boosting有許多變式,有DiscreteAdaboost, Real AdaBoost, LogitBoost, and Gentle AdaBoost,這篇論文包含這些演算法的詳細介紹http://web.stanford.edu/~hastie/Papers/AdditiveLogisticRegression/alr.pdf
這四個是類似的,下面以DiscreteAdaBoost演算法為例,介紹演算法流程
第一步,需要採集樣本,為每個樣本編碼特徵向量,標記每個樣本的類別
第二步,為每個樣本初始化相同的權值1/N
第三步,在加權的樣本集上訓練弱分類器f_m(x),然後計算加權訓練誤差err_m和比例係數c_m,再然後更新權重,被錯誤分類的樣本的權重被提升,然後歸一化權重,這個過程再重複M-1次
第四步,輸出最後的分類器
從OpenCV官網上看,這一句“Gentle AdaBoost and Gentle AdaBoost are often thepreferable choices. “,說明Gentle AdaBoost和Gentle AdaBoost在這四個演算法中經常是是更可取的。
OpenCV對這四個演算法都做了實現,對於做應用來說,不必去重複造輪子,關心介面就好了
如下?。。。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
目標檢測程式開發(二)——Boosting演算法簡介