機器學習-分類器-級聯分類器訓練(Train CascadeClassifier )

來源:互聯網
上載者:User

標籤:lock   介紹   blog   手工   asi   索引   資訊   輸入   tag   

一、簡介:

  adaboost分類器由級聯分類器構成,"級聯"是指最終的分類器是由幾個簡單分類器級聯組成。在映像檢測中,被檢視窗依次通過每一級分類器,這樣在前面幾層的檢測中大部分的候選地區就被排除了,全部通過每一級分類器檢測的地區即為目的地區域。

分類器訓練完以後,就可以應用於輸入映像中的感興趣地區的檢測。檢測到目的地區域輸出為1,否則輸出為0。為了檢測整副映像,在映像中移動搜尋視窗,檢測每一個位置來確定可能的目標。為了搜尋不同大小的目標物體,在映像中檢測未知大小的目標物體,掃描過程中用不同比例大小的搜尋視窗對圖片進行掃描。

目標檢測分為三個步驟:

    1、 樣本的建立    2、 訓練分類器    3、 利用訓練好的分類器進行目標檢測。

二、樣本收集

  訓練樣本分為正例樣本和反例樣本,其中正例樣本是指待檢目標樣本,反例樣本指其它任意圖片,所有的樣本圖片都被歸一化為同樣的尺寸大小(例如,24x24)。負樣本可以來自於任意的圖片,但這些圖片不能包含目標特徵。負樣本由背景描述檔案來描述。

 

三、準備訓練資料

  訓練需要一些列樣本。樣本分兩類:負樣本和正樣本。負樣本是指不包括物體的映像。正樣本是待檢測的物體的映像。負樣本必須手工準備,正樣本使用opencv_createsamples 建立。

  1、負樣本

    負樣本可以是任意映像,但映像中不能包含待檢測的物體。用於摳取負樣本的影像檔名被列在一個檔案中。這個檔案是純文字檔案,每行是一個檔案名稱(包括相對目錄和檔案名稱)。負樣本和樣本映像也叫做背景樣本,或者背景樣本映像,本文檔中對之不予區分。這些映像可以是不同的尺寸,但是映像尺寸應該比訓練視窗的尺寸大,因為這些映像將被用於摳取負樣本,並將負樣本縮小到訓練視窗大小。

下面是一個描述檔案的例子:

假如目錄結構如下:

/img  img1.jpg  img2.jpgbg.txt

則bg.txt檔案中的內容將如下所示:

img/img1.jpgimg/img2.jpg

 

  2、正樣本

    正樣本由 opencv_createsamples 產生。正樣本可以由包含待檢測物體的一張圖片產生,也可由一系列標記好的映像產生。

    請注意你需要一個很大的負樣本庫送給訓練程式進行訓練。如果是絕對剛性的物體,如OpenCV的標誌,你只有一張正樣本映像;如果是人臉,你需要幾百甚至幾千個正樣本。在待檢測物體是人臉的情況下,你需要考慮所有的人種、年齡、表情甚至鬍子的樣式。

    如果只有一張包含物體的映像,如一個公司的標誌,那麼可以通過對物體映像的隨機旋轉、改變標誌亮度以及將標誌放在任意的背景上而獲得大量的正樣本。產生的正樣本數目以及隨機的程度都可以通過opencv_createsamples 的命令列參數控制。

    

命令列參數:

  • -vec<vec_file_name>

    輸出檔案,內含用於訓練的正樣本。

  • -img<image_file_name>

    輸入影像檔名(例如一個公司的標誌)。

  • -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>

    輸出樣本的高度(以像素為單位)。

    建立樣本的流程如下: 輸入映像沿著三個軸隨機旋轉。旋轉的角度由 -max?angle 限定。然後像素的亮度值位於 [bg_color-bg_color_threshold;bg_color+bg_color_threshold]範圍的像素被設定為透明像素。將白色雜訊加到前景映像上。如果指定了-inv ,那麼前景映像的顏色將被翻轉。如果指定了-randinv ,程式將隨機播放是否將顏色進行翻轉。任選背景映像,將獲得的前景映像放到背景映像上,並將映像調整到-w 和-h 指定的大小。最後將映像存入vec檔案,vec檔案名稱由命令列參數-vec 指定。

正樣本也可從一系列事先標記好的映像中建立。標記資訊可以儲存於一個文字檔,與背景描述檔案類似。檔案中的每行對應一個影像檔。每行的第一個元素為影像檔名,後面是物體的數目,最後是物體位置和大小的描述 (x, y, width, height)。

下面是描述檔案的例子:

假設目錄結構如下:

/img  img_with_faces_1.jpg  img_with_faces_2.jpginfo.dat

檔案info.dat裡的內容如下:

img/img_with_faces_1.jpg  1  140 100 45 45img/img_with_faces_2.jpg  2  100 200 50 50   50 30 25 25

    映像img_with_faces_1.jpg中包含一個物體執行個體(如人臉),標示其在映像中的位置和大小的矩形為(140, 100, 45, 45)。映像img_with_faces_2.jpg包含兩個物體執行個體。

從這樣的一系列資料中建立正樣本,需要在命令列指定 -info 而非前面所用的 -img 參數:

  • -info<collection_file_name>

    描述物體所在映像以及大小位置的描述檔案。

此部分樣本建立過程如下:將物體執行個體從映像中摳取出,然後將之調整尺寸到目尺規寸,然後儲存到輸出的vec檔案。在此過程中不會對映像進行變形,所以有效命令列參數僅有-w,-h,-show 和-num 。

opencv_createsamples 也可以用來查看和檢查儲存於vec正樣本檔案中的正樣本。這時只需指定-vec ,-w 和 -h 三個參數則可。opencv_createsamples 將逐一顯示正樣本映像。

在訓練中,訓練程式並不關心包含正樣本的vec檔案如何產生的,你可以自己寫程式來產生vec檔案。但是OpenCV提供的工具中,只有 opencv_createsamples 程式能夠建立包含正樣本的vec檔案。

一個vec檔案的例子位於 opencv/data/vec_files/trainingfaces_24-24.vec 。它可用來訓練人臉分類器,視窗大小為:-w24-h24 。

 

三、訓練級聯分類器

  

下一步是訓練分類器。如前面所述, opencv_traincascade 和opencv_haartraining 都可用來訓練一個級聯分類器,但是此處只介紹opencv_traincascade 。opencv_haartraining 的用法與opencv_traincascade 類似。

下面是 opencv_traincascade 的命令列參數,以用途分組介紹:

  1. 通用參數:

    • -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特徵時有效。如果指定這個參數,那麼級聯分類器將以老的格式儲存。

  2. 級聯參數:

    • -stageType<BOOST(default)>

      層級(stage)參數。目前只支援將BOOST分類器作為層級的類型。

    • -featureType<{HAAR(default),LBP}>

      特徵的類型: HAAR - 類Haar特徵;LBP - 局部紋理模式特徵。

    • -w<sampleWidth>

    • -h<sampleHeight>

      訓練樣本的尺寸(單位為像素)。必須跟訓練樣本建立(使用opencv_createsamples 程式建立)時的尺寸保持一致。

  3. 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。

    • -maxFalseAlarmRate<max_false_alarm_rate>

      分類器的每一級希望得到的最大誤檢率。總的誤檢率大約為 max_false_alarm_rate^number_of_stages.

    • -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>

      每一級中的弱分類器的最大數目。The boosted classifier (stage) will have so many weak trees (<=maxWeakCount), as needed to achieve the given-maxFalseAlarmRate.

  4. 類Haar特徵參數:

    • -mode<BASIC(default)|CORE|ALL>

      選擇訓練過程中使用的Haar特徵的類型。 BASIC 只使用右上特徵,ALL 使用所有右上特徵和45度旋轉特徵。更多細節請參考[Rainer2002] 。

  5. LBP特徵參數:

    LBP特徵無參數。

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

訓練結束後就可以測試訓練好的級聯分類器了.

 

機器學習-分類器-級聯分類器訓練(Train CascadeClassifier )

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.