1. 程式人生 > >關於opencv中訓練級聯分類器所使用opencv_createsamples.exe和opencv_traincascade.exe的引數的詳細說明

關於opencv中訓練級聯分類器所使用opencv_createsamples.exe和opencv_traincascade.exe的引數的詳細說明

關於如何訓練分類器來識別一個新目標,可以看這裡。 重點注意事項: OpenCV中有兩個程式可以訓練級聯分類器: opencv_haartraining and opencv_traincascade。opencv_traincascade 是一個新程式,使用OpenCV 2.x API 以C++ 編寫。這二者主要的區別是 opencv_traincascade 支援 Haar [Viola2001] 和 LBP [Liao2007] (Local Binary Patterns) 兩種特徵,並易於增加其他的特徵。與Haar特徵相比,LBP特徵是整數特徵,因此訓練和檢測過程都會比Haar特徵快幾倍。LBP和Haar特徵用於檢測的準確率,是依賴訓練過程中的訓練資料的質量和訓練引數。訓練一個與基於Haar特徵同樣準確度的LBP的分類器是可能的。 opencv_traincascade and opencv_haartraining 所輸出的分類器檔案格式並不相同。注意,新的級聯檢測介面(參考 objdetect 模組中的 CascadeClassifier 類)支援這兩種格式。 opencv_traincascade 可以舊格式匯出選練好的級聯分類器。但是在訓練過程被中斷後再重啟訓練過程, opencv_traincascade and opencv_haartraining 不能裝載與中斷前不同的檔案格式。 opencv_traincascade 程式使用TBB來處理多執行緒。如果希望使用多核並行運算加速,請使用TBB來編譯OpenCV。 還有一些與訓練相關的輔助程式。 opencv_createsamples 用來準備訓練用的正樣本資料和測試資料。 opencv_createsamples 能夠生成能被 opencv_haartraining 和 opencv_traincascade 程式支援的正樣本資料。它的輸出為以 *.vec 為副檔名的檔案,該檔案以二進位制方式儲存影象。 opencv_performance 可以用來評估分類器的質量,但只能評估 opencv_haartraining 輸出的分類器。它讀入一組標註好的影象,執行分類器並報告效能,如檢測到物體的數目,漏檢的數目,誤檢的數目,以及其他資訊。 既然 opencv_haartraining 是一個將被棄用的程式,下面將不再介紹,而會主要介紹 opencv_traincascade 。 opencv_createsamples 程式用來為 opencv_traincascade 準備訓練樣本,因此也會介紹它。 opencv_createsamples.exe引數的說明:

命令列引數:


-vec <vec_file_name>
	輸出檔案,內含用於訓練的正樣本。他應該有一個.vec副檔名。

-info <file_name>
	這是指定輸入示例集合的檔案的名字,包括檔名和在影象中示例目標的位置(例如自己建立的.dat
	檔案)。

-img <image_file_name>
	這是-info的替代(必須提供其中一個)。使用-img,你可以提供單個裁剪的正向示例。在使用-img的
	模式中,將產生多個輸出,且都來自於這一個輸入。

-bg <background_file_name>
	背景影象的描述檔案,檔案中包含一系列的影象檔名,這些影象將被隨機選作物體的背景。

-num <number_of_samples>
	生成的正樣本的數目。

-bgcolor <background_color>
	背景顏色(目前為灰度圖);背景顏色表示透明顏色。因為影象壓縮可造成顏色偏差,顏色的容差
	可以由 -bgthresh 指定。所有處於 bgcolor-bgthresh 和 bgcolor+bgthresh 之間的畫素都被設定為
	透明畫素。

-bgthresh <background_color_threshold>

-inv
	如果指定該標誌,前景影象的顏色將翻轉。

-randinv
	如果指定該標誌,顏色將隨機地翻轉。

-maxidev <max_intensity_deviation>
	前景樣本里畫素的亮度梯度的最大值。

-maxxangle <max_x_rotation_angle>
	X軸最大旋轉角度,必須以弧度為單位。

-maxyangle <max_y_rotation_angle>
	Y軸最大旋轉角度,必須以弧度為單位。

-maxzangle <max_z_rotation_angle>
	Z軸最大旋轉角度,必須以弧度為單位。

-show
	很有用的除錯選項。如果指定該選項,每個樣本都將被顯示。如果按下 Esc 鍵,程式將繼續建立樣
	本但不再顯示。

-w <sample_width>
	輸出樣本的寬度(以畫素為單位)。

-h <sample_height>
	輸出樣本的高度(以畫素為單位)。

opencv_createsamples 也可以用來檢視和檢查保存於vec正樣本檔案中的正樣本。這時只需指定 -vec , -w 和 -h 三個引數則可。 opencv_createsamples 將逐一顯示正樣本影象。 一個vec檔案的例子位於 opencv/data/vec_files/trainingfaces_24-24.vec 。它可用來訓練人臉分類器,視窗大小為: -w 24 -h 24 。

opencv_traincascade.exe引數的說明: 下面是 opencv_traincascade 的命令列引數,以用途分組介紹:


通用引數:
	-data <cascade_dir_name>
		目錄名,如不存在訓練程式會建立它,用於存放訓練好的分類器。

	-vec <vec_file_name>
		包含正樣本的vec檔名(由 opencv_createsamples 程式生成)。

	-bg <background_file_name>
		背景描述檔案,也就是包含負樣本檔名的那個描述檔案。

	-numPos <number_of_positive_samples>
		每級分類器訓練時所用的正樣本數目,通常小於所提供的示例的數量。

	-numNeg <number_of_negative_samples>
		每級分類器訓練時所用的負樣本數目,可以大於 -bg 指定的圖片數目。

	-numStages <number_of_stages>
		訓練的分類器的級數。

	-precalcValBufSize <precalculated_vals_buffer_size_in_Mb>
		快取大小,用於儲存預先計算的特徵值(feature values),單位為MB。

	-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb>
		快取大小,用於儲存預先計算的特徵索引(feature indices),單位為MB。記憶體越大,訓練時間越短。

	-baseFormatSave
		這個引數僅在使用Haar特徵時有效。如果指定這個引數,那麼級聯分類器將以老的格式儲存。

級聯引數:
	-stageType <BOOST(default)>
		級別(stage)引數。目前只支援將BOOST分類器作為級別的型別。

	-featureType<{HAAR(default), LBP}>
		特徵的型別: HAAR - 類Haar特徵; LBP - 區域性紋理模式特徵。

	-w <sampleWidth>
	-h <sampleHeight>
		訓練樣本的尺寸(單位為畫素)。必須跟訓練樣本建立(使用 opencv_createsamples 程式建立)
		時的尺寸保持一致。

Boosted分類器引數:
	-bt <{DAB, RAB, LB, GAB(default)}>
		Boosted分類器的型別: DAB - Discrete AdaBoost, RAB - Real AdaBoost, LB - LogitBoost, 
		GAB - Gentle AdaBoost。

	-minHitRate <min_hit_rate>
		分類器的每一級希望得到的最小檢測率。總的檢測率大約為 min_hit_rate^number_of_stages。
		預設值為0.995對應於99.5%。

	-maxFalseAlarmRate <max_false_alarm_rate>
		分類器的每一級希望得到的最大誤檢率。總的誤檢率大約max_false_alarm_rate^number_of_stages.
		預設值0.50對應於50%。

	-weightTrimRate <weight_trim_rate>
		Specifies whether trimming should be used and its weight. 一個還不錯的數值是0.95。

	-maxDepth <max_depth_of_weak_tree>
		弱分類器樹最大的深度。注意,這不是級聯器的深度。一個還不錯的數值是1,是二叉樹(stumps)。

	-maxWeakCount <max_weak_tree_count>
		每一級中的弱分類器的最大數目。類似-maxDepth,引數-maxWeakCount被直接傳遞給級聯分類
		器的boosting,同時設定可以用於形成每一個強分類器(即,分類器的每一階段)的弱級聯器的最大
		數量。這個引數的預設值是100,但是這並不意味著弱分類器一定會使用這個數。

類Haar特徵引數:
	-mode <BASIC (default) | CORE | ALL>
		引數-mode與類Haar特徵一起使用,選擇訓練過程中使用的Haar特徵的型別。 BASIC 只使用右上
		特徵, ALL 使用所有右上特徵和45度旋轉特徵。

LBP特徵引數:
	LBP特徵無引數。

當 opencv_traincascade 程式訓練結束以後,訓練好的級聯分類器將儲存於檔案cascade.xml中,這個檔案位於 -data 指定的目錄中。這個目錄中的其他檔案是訓練的中間結果,當訓練程式被中斷後,再重新執行訓練程式將讀入之前的訓練結果,而不需從頭重新訓練。訓練結束後,你可以刪除這些中間檔案。