1. 程式人生 > >級聯分類器訓練及其引數的含義

級聯分類器訓練及其引數的含義

正樣本

正樣本由 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.jpg
info.dat

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

img/img_with_faces_1.jpg  1  140 100 45 45
img/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 。它可用來訓練人臉分類器,視窗大小為: -w 24 -h 24 。