opencv 級聯分類器訓練(一)
——步驟和方法
級聯分類器訓練中命令列和訓練過程中引數注釋:
命令列:
-data: 指定生成的檔案目錄
-vec: vec檔名(.vec)
-bg: 負樣本描述檔名(.dat)
-npos: 在每個階段用來訓練的正樣本數目
-neg: 在每個階段用來訓練的負樣本數目,這個值可以設定大於真正的負樣本影象數目,因為程式會自動從負樣本影象中切割出和正樣本大小一致的影象塊,這個引數一般設定為正樣本數目的1~3倍。
-nstages:訓練級數,推薦使用15~20,一般層數越高,耗時越長。
-mem: 程式可使用的記憶體,一般設為256即可。實際執行時一般不怎麼占用記憶體,以mb為單位
-nonsym: 後面不用跟引數,用於指定目標物件是否垂直對稱
-minhitrate:最小命中率,即訓練目標的準確度。這裡設為0.99。
-maxfalsealarm:最大虛警(誤檢率),每層訓練到這個值小於0.5時結束,進入下一級訓練。
-weighttrimming:指定是否使用權修正和使用多大的權修正,一般選擇0.9.
-mode:all指定harr型別,basic僅僅使用垂直特徵,all使用垂直以及45度旋轉特徵
-w: 正樣本影象的寬,訓練樣本的尺寸必須和訓練樣本建立的尺寸相同
-h: 正樣本影象的高
注意:
1)最大虛警率-maxfalsealarm和最小命中率-minhitrate的設定的關聯性。
系統首先根據命中率進行分類,然後計算虛警率,如果虛警率高於最大虛警率,則系統就拋棄該分類器,而建立下乙個分類器。
虛警率和命中率是每階訓練產生的相應值級聯,每階訓練結束後虛警率和命中率都會進行更新。
2)分類器訓練過程中的階數設定。訓練的階數的選擇,根據提供的正負樣本的數量進行設定。
如果正負樣本較少,最好不要把階數設定過大,這會使訓練程式出錯,訓練不成功。
如果分類器效果不好,還可以在原來訓練成果的分類器基礎上,增加訓練階數接著進行訓練,這樣會使樣本誤判的概率下降。
3)正負樣本比例問題:比例大約1:3的樣子比較好,1:3或者1:4訓練出來的分類器要優於1:1或者1:9,原因是正負樣本比例接近時,對負樣本的命中程度低(實際中負樣本肯定遠遠多於正樣本),正負樣本比例較大(比如1:9)時,重視負樣本的統計特性而忽略了正樣本的統計特性,造成正樣本權重總和小,當權重小於一定程度的時候可能很大一部分正樣本都不參與訓練了(在weighttrimrate=0.95時)。
4) minhitrate:分類器的每一級希望得到的最小檢測率。總的檢測率大約為minhitrate ^ numstages。影響每個強分類器閾值,當設定為0.95時如果正訓練樣本個數為12000個,那麼其中的600個就很可能被判別為負樣本,第二次選擇的時候必須多選擇後面的600個,按照這種規律我們為後面的每級多增加numpos*minhitrate個正樣本,根據訓練的級數可以得到如下公式
numpos+(numstages-1)*numpos*(1-minhitrate),即需要準備的訓練正樣本個數
5) maxfalsealarm:分類器的每一級希望得到的最大誤檢率。總的誤檢率大約為maxfalsealarm ^ numstages,.影響每個強分類器中弱分類器的個數,設定較大,每級可以濾除負樣本的比例就較小,這樣在測試過程中虛警率就較高;設定較小,每級強分類器中弱分類器的個數就較多,檢測時間就會相對要長,在可以接受的檢測時間下盡量降低maxfalsealarm是我們要追求的目標
關於負樣本的選擇,因為每級剩下的負樣本個數低於numneg*maxfalsealarm,在第二輪選擇的時候從之前選擇的負樣本後面繼續選擇,而不是重頭開始將選擇過的負樣本也包含進來,只有當遍歷完一遍負樣本列表後才重頭在掃瞄一遍
6) weighttrimrate:影響參與訓練的樣本(不管是正樣本還是負樣本),當更新完樣本權重之後,將樣本權重按照從小到大的順序排列,從後面開始累加樣本權重大於weighttrimrate時,前面的樣本就不參與後面的訓練了
7) maxweakcount:決定每級強分類器中弱分類器的最大個數,當fa降不到指定的maxfalsealarm時可以通過指定最大弱分類器個數停止單個強分類器。
8) boost引數(maxdepth、bt):影響決策樹構建的法則以及權重更新策略
訓練過程中出現的dos視窗:
n: 訓練層數
smp: 樣本佔總樣本個數
f: st.hr: 閾值
hr: 擊中率
fa: 虛警,只有當每一層訓練的fa低於你命令中設定的maxfalsealarm數值,才會進入下一級訓練
exp.err: 經驗錯誤率
parentnode:9 表示現在訓練到第9級。
OpenCV級聯分類器訓練
級聯分類器包括兩部分 訓練和檢測。檢測部分在opencv objdetect 模組的文件中有介紹,在那文件中給出了一些級聯分類器的基本介紹。這個指南是描述如何訓練分類器 準備訓練資料和執行訓練程式。opencv中有兩個程式可以訓練級聯分類器 opencv haartraining and openc...
opencv級聯分類器訓練
這個部落格寫的挺詳細的 下面來寫一下我訓練的過程 2.準備好正負樣本後就是生成樣本描述檔案 txt 用cmd命令進入對應樣本資料夾下,cd 路徑名 然後輸入dir s b info.txt生成樣本描述檔案,去掉最後一行 注意正樣本的描述檔案需要新增 1 0 0 width height,其中widt...
OpenCV 級聯分類器訓練 訓練步驟詳解(一)
參考文章 根據本人實踐過程和理解寫了下文。一 正樣本準備 正樣本應該盡可能包含少的干擾背景資訊。在訓練過程中這些背景資訊也會成為正樣本的乙個區域性特徵,使得特徵值的計算包含干擾資訊。資料 盡可能做到多樣化,比如樣本為車,車的姿態場景應稍豐富些。同一正樣本目標的影象太多會使區域性特徵過於明顯,造成這個...