本文主要參考了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對這四個算法都做了實作,對于做應用來說,不必去重複造輪子,關心接口就好了
如下?。。。