OpenCV級聯分類器訓練(二) 引數註解

2021-06-29 09:32:04 字數 2440 閱讀 9284

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 級聯分類器訓練 訓練步驟詳解(一)

參考文章 根據本人實踐過程和理解寫了下文。一 正樣本準備 正樣本應該盡可能包含少的干擾背景資訊。在訓練過程中這些背景資訊也會成為正樣本的乙個區域性特徵,使得特徵值的計算包含干擾資訊。資料 盡可能做到多樣化,比如樣本為車,車的姿態場景應稍豐富些。同一正樣本目標的影象太多會使區域性特徵過於明顯,造成這個...