reference from: http://htedsv.com/?tag=opencv

 

訓練樣本方法

這篇文章非常好,解決了我長久以來的問題,成功訓練樣本2.0
由於版本問題,網上的大部分教程都是錯誤的。

目標:訓練眼睛分類器
數據準備
正例:收集眼睛圖像,圖像大小一致(720*576共800張)
反例:不包含眼鏡的圖像,圖像大小與正例圖像一致(共80)
訓練步驟:(OPencv2.0)
一、 數據預處理
每個正例資料,使用ObjectMarker在每個圖像上畫出眼鏡區域, 那麼在一幅圖像上可以得到兩個矩形框,

ObjectMarker會自動生成一個info.txt文本用於後面的訓練。ObjectMarker是基於 Opencv的影像處理工具,

它只能打開bmp格式的圖像,主要的功能是在圖像上畫出目的地區域,會自動生成目標描述文本(info.txt)。

每一個文本 行對應一個圖片。每行的第一個元素是圖片檔案名,第二個元素是物件實體的個數。

後面緊跟著的是與之匹配的矩形框(x, y, 寬度,高度)。內容如下:


rawdata/img1.bmp 2 211 205 60 27 345 215 51 28
rawdata/img10.bmp 2 194 204 61 27 329 216 58 31
rawdata/img101.bmp 2 206 265 56 19 340 276 51 22
rawdata/img102.bmp 2 211 263 49 20 340 278 58 20
rawdata/img103.bmp 2 211 263 54 22 339 277 54 19

用bg.txt文檔描述反例資料:
negimg/bg1.bmp
negimg/bg2.bmp
negimg/bg3.bmp
negimg/bg4.bmp

 

二、創建樣本


使用如下命令創建樣本:
opencv_createsamplesd -info info.txt -num 300 -bg bg.txt -vec pos.vec -w 65 -h 30
opencv_createsamplesd是Opencv2.0提供用於創建樣本命令。opencv_createsamplesd程式的命令列參數:


-vec 訓練好的正樣本的輸出檔案名。
-img源靶心圖表片(例如:一個公司圖示)
-bg背景描述檔。
-num要產生的正樣本的數量,和正樣本圖片數目相同。
-bgcolor背景色(假定當前圖片為灰度圖)。

背景色制定了透明色。對於壓縮圖片,顏色方差量由bgthresh參數來指定。則在bgcolor-bgthresh和bgcolor+bgthresh中間的圖元被認為是透明的。


-bgthresh
-inv如果指定,顏色會反色
-randinv如果指定,顏色會任意反色
-maxidev背景色最大的偏離度。
-maxangel
-maxangle
-maxzangle


最大旋轉角度,以弧度為單位。
-show
如果指定,每個樣本會被顯示出來,按下”esc”會關閉這一開關,即不顯示樣本圖片,而創建過程繼續。這是個有用的debug選項。
-w
輸出樣本的寬度(以圖元為單位)
-h

三、訓練分類器

樣本創建之後,接下來要訓練分類器,這個過程是由haartraining程式來實現的。使用下面的命令進行訓練:


opencv_haartrainingd -data f:\\data -vec vec_pos.vec -bg bg.txt -npos 300 -nneg 10 -w 65 -h 30
Haartraining的命令列參數如下:
-data存放訓練好的分類器的路徑名。
-vec正樣本檔案名
-bg背景描述檔。
-npos
-nneg
用來訓練每一個分類器階段的正/負樣本。
-nstages訓練的階段數。
-nsplits決定用於階段分類器的弱分類器。如果1,則一個簡單的stump classifier被使用。如果是2或者更多,則帶有number_of_splits個內部節點的CART分類器被使用。(2比較好,1比較快)


-mem預先計算的以MB為單位的可用記憶體。記憶體越大則訓練的速度越快。
-sym(default)
-nonsym指定訓練的目標物件是否垂直對稱。垂直對稱提高目標的訓練速度。例如,正面部是垂直對稱的。


-minhitrate每個階段分類器需要的最小的命中率。總的命中率為min_hit_rate的number_of_stages次方。


-maxfalsealarm沒有階段分類器的最大錯誤報警率。總的錯誤警告率為max_false_alarm_rate的number_of_stages次方。


-weighttrimming指定是否使用權修正和使用多大的權修正。一個基本的選擇是0.9
-eqw
-mode選擇用來訓練的haar特徵集的種類。basic僅僅使用垂直特徵。all使用垂直和45度角旋轉特徵。


-w
-h訓練樣本的尺寸,(以圖元為單位)。必須和訓練樣本創建的尺寸相同。


訓練結束後,會在目錄data下生成一些子目錄,即為訓練好的分類器。同時會生成data.xml(網路上一些資料說xml要用另外個程式生成,事實上這邊已經可以生成了)。


在這個過程存在著幾個問題,需要在進一步分析:
在完成這個訓練過程後對得到的data.xml進行測試,得到的效果比較差。
在創建樣本的過程中,需要輸入檢測視窗的大小作為參數,而每次從原圖中截取的圖像的大小都是不一樣的,這個視窗時如何確定的?

 

創作者介紹

白痴的Step by Step

honoyang 發表在 痞客邦 PIXNET 留言(5) 人氣()


留言列表 (5)

發表留言
  • sbphsho
  • hello

    我自己訓練1500:3500 20stage,測試人臉偵測時,效果還ok,但是還是比原本alt2差一些。

    在創建樣本的過程中,需要輸入檢測視窗的大小作為參數,而每次從原圖中截取的圖像的大小都是不一樣的,這個視窗時如何確定的?
    ----------------------
    你應該指的是正樣本的描述文件的內容吧?
    我從各不同的人臉樣本擷取人臉的時候,會擷取正方形的比例,並讓每張正樣本的背景大小不要差異太大。
    接著我會把所有樣本調整成一樣的解析度,作描述文件的時候,我會採用整張得大小。這樣就沒有圖像大小不同的問題。

    小弟也最近剛上手,希望能有多一點的夥伴討論經驗,有需要可以用mail聯絡我。
  • 有疑問
  • ObjectMarker 這也是內建功能嗎??
    不知該如何用呢@@"
  • Rich
  • 請問一下ObjectMarker 要去哪裡抓呢?
    謝謝
  • 伯 伯
  • 請問一下非目標樣本,是彩色的可以嗎?
  • 我記得都會轉成灰階
    如果要針對彩色
    應該可以將RGB分開擷取
    不過一般來說都會以灰階做為訓練和預測吧

    honoyang 於 2011/05/26 07:54 回覆

  • kyo
  • 請問objectmarker的exe檔能寄一份給我嗎?
    我找到的都不能用