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

2021-07-06 07:25:15 字數 4591 閱讀 2343

級聯分類器包括兩部分:訓練和檢測。 檢測部分在opencv objdetect

模組的文件中有介紹,在那文件中給出了一些級聯分類器的基本介紹。這個指南是描述如何訓練分類器:準備訓練資料和執行訓練程式。

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_haartraining

是乙個將被棄用的程式,下面將不再介紹,而會主要介紹 opencv_traincascade

。 opencv_createsamples

程式用來為opencv_traincascade

準備訓練樣本,因此也會介紹它。

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

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

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

假如目錄結構如下:

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

正樣本由 opencv_createsamples

生成。正樣本可以由包含待檢測物體的一張生成,也可由一系列標記好的影象生成。

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

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

的命令列引數控制。

命令列引數:

建立樣本的流程如下: 輸入影象沿著三個軸隨機旋轉。旋轉的角度由 -max?angle

限定。然後畫素的亮度值位於 [bg_color-bg_color_threshold

;bg_color+bg_color_threshold

]範圍的畫素被設定為透明畫素。將白雜訊加到前景影象上。如果指定了 -inv

,那麼前景影象的顏色將被翻轉。如果指定了 -randinv

,程式將隨機選擇是否將顏色進行翻轉。任選背景影象,將獲得的前景影象放到背景影象上,並將影象調整到 -w

和 -h

指定的大小。最後將影象存入vec檔案,vec檔名由命令列引數 -vec

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

下面是描述檔案的例子:

假設目錄結構如下:

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

影象img_with_faces_1.jpg中包含乙個物體例項(如人臉),標示其在影象中的位置和大小的矩形為(140, 100, 45, 45)。影象img_with_faces_2.jpg包含兩個物體例項。

從這樣的一系列資料中建立正樣本,需要在命令列指定 -info

而非前面所用的 -img

引數:此部分樣本建立過程如下:將物體例項從影象中摳取出,然後將之調整尺寸到目標尺寸,然後儲存到輸出的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 。

下一步是訓練分類器。如前面所述, opencv_traincascade

和 opencv_haartraining

都可用來訓練乙個級聯分類器,但是此處只介紹 opencv_traincascade

。 opencv_haartraining

的用法與 opencv_traincascade

類似。下面是 opencv_traincascade

的命令列引數,以用途分組介紹:

通用引數:

級聯引數:

boosted分類器引數:

類haar特徵引數:

lbp特徵引數:

lbp特徵無引數。

當 opencv_traincascade

程式訓練結束以後,訓練好的級聯分類器將儲存於檔案cascade.xml中,這個檔案位於 -data

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

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

[viola2001]

paul viola, michael jones. rapid object detection using a boosted cascade of ****** features. conference on computer vision and pattern recognition (cvpr), 2001, pp. 511-518.

[rainer2002]

rainer lienhart and jochen maydt. an extended set of haar-like features for rapid object detection. submitted to icip2002.

[liao2007]

shengcai liao, xiangxin zhu, zhen lei, lun zhang and stan z. li. learning multi-scale block local binary patterns for face recognition. international conference on biometrics (icb), 2007, pp. 828-837.

級聯分類器訓練

使用級聯分類器工作 包括兩個階段 訓練和檢測。檢測部分在opencvobjdetect 模組的文件中有介紹,在那個文件中給出了一些級聯分類器的基本介紹。當前的指南描述了如何訓練分類器 準備訓練資料和執行訓練程式。opencv中有兩個程式可以訓練級聯分類器 opencv haartraining 和o...

級聯分類器訓練

一.準備正負樣本 正樣本 225張車牌 負樣本 將opencv traincascade.exe和opencv createsamples.exe複製到同一目錄 樣本存放路徑 二.檔案 dat vec 準備 得到pos.txt檔案,所有非資訊刪掉,最後一行空格刪掉,jpg替換為jpg 1 0 0 1...

級聯分類器訓練

adaboost分類器由級聯分類器構成,級聯 是指最終的分類器是由幾個簡單分類器級聯組成。在影象檢測中,被檢視窗依次通過每一級分類器,這樣在前面幾層的檢測中大部分的候選區域就被排除了,全部通過每一級分類器檢測的區域即為目標區域。分類器訓練完以後,就可以應用於輸入影象中的感興趣區域的檢測。檢測到目標區...