人臉檢測 訓練心得

2021-06-26 23:52:21 字數 2666 閱讀 5801

1.準備訓練樣本,包括正例及反例樣本

2.生成樣本描述檔案

3.訓練樣本

4.目標識別

***************==

今天我們將著重學習第3步:基於haar特徵的adaboost級聯分類器的訓練。若將本步驟看做乙個系統,則輸入為正樣本的描述檔案(.vec)以及負樣本的說明檔案(.dat);輸出為分類器配置引數檔案(.xml)。

工具都準備好了,下面進入正題:

1.訓練分類器

開啟cmd,cd到當前目錄,執行命令:

1

opencv_haartraining.exe -data ./cascade -vec ./pos/sample_pos.vec -bg ./neg/sample_neg.dat -npos 20 -nneg 60 -mem 200 -mode all -w 20 -h 20

引數說明,這個要好好看,出錯了好除錯

-data 指定生成的檔案目錄, 

-vec vec檔名,

-bg 負樣本描述檔名稱,也就是負樣本的說明檔案(.dat)

-nstage 20 指定訓練層數,推薦15~20

,層數越高,耗時越長。

-nsplits **子節點數目,選取預設值 2

-minhitrate 最小命中率,即訓練目標準確度。

-maxfalsealarm最大虛警(誤檢率),每一層訓練到這個值小於0.5時訓練結束,進入下一層訓練,

-npos 在每個階段用來訓練的正樣本數目,

-nneg在每個階段用來訓練的負樣本數目 這個值可以設定大於真正的負樣本影象數目

,程式可以自動從負樣本影象中切割出和正樣本大小一致的,這個引數一半設定為正樣本數目的1~

3倍 -w -h樣本尺寸,與前面對應 -mem 程式可使用的記憶體,這個設定為256即可,實際執行時根本就不怎麼耗記憶體,以mb為單位 -mode all指定haar特徵的種類,basic僅僅使用垂直特徵,all表示使用垂直以及45度旋轉特徵

-sym或者-nonsym,後面不用跟其他引數,用於指定目標物件是否垂直對稱,若你的物件是垂直對稱的,比如臉,則垂直對稱有利於提高訓練速度

其中要注意,負樣本使用的是.dat檔案,而不是.vec檔案。訓練結束後會在cascade目錄下生成0-n的子目錄。訓練過程如下圖,我的正樣本20,負樣本60,小試牛刀,畢竟資料量有限。

想讓自己更強大,就應該知道這張圖裡面一些引數的意思。

1

2

3

4

5

6

7

backgroung processing time 是負樣本切割時間,一般會占用很長的時間

n 為訓練層數

%smp 樣本佔總樣本個數

st.thr 閾值,

hr 擊中率,

fa 虛警,只有當每一層訓練的fa低於你的命令中宣告的maxfalsealarm數值才會進入下一層訓練

exp.err 經驗錯誤率

2.合併子分類器生成xml檔案

輸入命令:

1

haarconv.exe ./cascade haar_adaboost.xml 25 25

若你使用的是convert_cascade.exe則是另外一種格式:

1

convert_cascade.exe --size="20x20"..\cascade haar_adaboost.xml

想知道用法可以輸入***.exe  usage,用法以及引數說明一目了然

3.總結以及注意事項

看起來很簡單是不是,你錯了!真正做起來會有各種各樣的錯誤發生讓你措手不及。以下是我總結的問題及分析:

1)訓練時間非常久,少則秒鐘,多則幾天甚至一禮拜。具體的時間跟你樣本的選取、樣本數量、機器的效能有著直接聯絡。舉個例子,有人正樣本7097負樣本2830,在8核3.2ghz的機器上,開啟了多核並行加速(mp)的情況下訓練了一周時間,跑到19層。鏈結 。這個真心有點久了,有點誇張。舉這個例子是想跟你說明,這是一件耗時間的事情,所以請你耐心等待。

2)卡死在某一層,好像進入死迴圈。這種情況一般跟樣本的選擇有關,尤其是負樣本。當剩下所有的negtive樣本在臨時的cascade classifier中evaluate的結果都是0(也就是拒絕了),隨機取樣本的數目到幾百萬都是找不到誤檢測的neg樣本了,因而沒法跳出迴圈!

解決方法是,增大負樣本數目,增大負樣本之間的變化!

3)訓練帶某一層出錯,報錯提示下圖。檢視cascade目錄下發現確實走到第5層。這種情況跟上一種情況其實有點類似,都是opencv_haartraining.exe無法正常terminate。而我們的關注點在於,所生成的這些子分類器能用嗎?要依實際情況而定。拿下圖來說,在第5層的時候fa已經很低了,0.125000,說明效果已經夠用。2)中也是這個道理。

opencv 人臉檢測 模型訓練 人臉識別

人臉檢測 模型訓練 人臉識別 2018 08 15 今天給大家帶來一套人臉識別乙個小案例,主要是幫助小夥伴們解決如何入門opencv人臉識別的問題,現在的ai行業比較火熱,ai技術的使用比較廣泛。就拿現在的只能手機來說吧,現在很多智慧型手機都必須有人臉識別解鎖 拍照自動美顏 拍照物體識別等等功能,這...

AdaBoost人臉檢測訓練演算法 (下)

就像我一開始說的,比起 violajones 人臉檢測方法,lienhart 的人臉檢測方法 只是在harr like 特徵的選取 計算以及 adaboost 的訓練 演算法上有區別。一 harr like 特徵的選取 lienhart 提出了一些新的旋轉 haar like 特徵。4個邊緣特徵 8...

人臉檢測中Triplet Loss的訓練

triplet loss 是在 facenet中提出的,用於訓練人臉識別和找出同乙個人的不同角度 姿勢 光線條件下的 為了達到這個目標,我們就需要一張ancor,即告知模型哪個人面是我們需要識別的或者說是需要找到與之類似的臉部,還需要乙個positive,用於讓模型去學習什麼樣的是與ancor類似的...