關於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 指定的目錄中。這個目錄中的其他檔案是訓練的中間結果,當訓練程式被中斷後,再重新執行訓練程式將讀入之前的訓練結果,而不需從頭重新訓練。訓練結束後,你可以刪除這些中間檔案。