經過多時的摸索,終於實現分類器的訓練。不敢保證每次都成功,但有一次實現,就可以把該注意的記錄下來
分類器的訓練分三步進行:
第一步:收集材料
正負樣本材料的收集,本人是在灰度圖下進行實驗的。正樣本的大小最好一致,負樣本的大小沒有要求,只要內沒有目標就行。
1.正樣本描述檔案
正樣本放在單獨的資料夾下,並建立描述檔案,描述檔案格式為txt,每行的描述形式為
-----建立vec格式的描述檔案,直接上doc命令下的指令:
createsamples.exe為opencv自帶的檔案,放在同一目錄下;32為正樣本寬高;10為樣本的個數(實際上式正樣本越多越好,且要求盡量多樣化)。執行後就生成後面訓練分類器用到的.vec檔案。
2.負樣本描述檔案
負樣本的描述檔案比較簡單,和描述正樣本的txt檔案差不多,也是建立乙個txt檔案,就是少了目標個數個矩形框寬高的描述:
第二步:訓練弱分類器
弱分類器的訓練用到上面的負樣本描述檔案及資料夾,以及vec格式的正樣本描述檔案,還有就是opencv自帶的haartraining.exe。
doc命令視窗下的命令:
注意:data為新建的放置弱分類器的資料夾,-npos 、-nneg的數量要與前面描述檔案的數量相同,-w -h的大小要與正樣本的大小相一致;-nstages為弱分類器的等級。
執行之後就會在data資料夾下生成多個弱分類器,用在第三步的強分類器的訓練。
第三部:強分類器的訓練
用到的材料:第二步生成的data資料夾,以及opencv自帶的haarconv.exe,還有幾個dll檔案
和上面兩部一樣,在doc下的命令:
執行後最後是生成face.xml強分類器。
以上三步是在鄙人電腦上執行成功的,換到其他的電腦上不知效果如果,僅此作為備忘!
分類器之adaboost
分類中通常使用將多個弱分類器組合成強分類器進行分類的方法,統稱為整合分類方法 ensemble method 比較簡單的如在boosting之前出現bagging的方法,首先從從總體樣本集合中抽樣採取不同的訓練集訓練弱分類器,然後使用多個弱分類器進行voting,終於的結果是分類器投票的優勝結果。這...
AdaBoost演算法 弱分類器訓練過程
def loadsimpdata 樣本特徵 datmat matrix 1.2.1,0.3 2.1.1,0.4 1.3,1.1.2 1.1.1.1 2.1.1.3 7.2.0.35 正負樣本標誌 classlabels 1.0,1.0,1.0,1.0,1.0,1.0 return datmat,cl...
AdaBoost演算法 強分類器訓練過程
初始化權重 負樣本權重w0i 1 2m,正樣本權重w1i 1 2l,其中m為負樣本總數,l為正樣本總數 對於t 1,t t為訓練次數 權重歸一化,簡單說就是使本輪所有樣本的權重的和為1 根據每乙個特徵訓練簡單分類器,僅使用乙個特徵 從所有簡單分類器中選出乙個分錯率最低的分類器,為弱分類器 更新權重 ...