簡體   English   中英

Haarcascade分類器培訓

[英]Haarcascade classifier training

我正在嘗試使用相機拍攝的示例創建xml文件。 這是一次測試,我將相機放在窗戶上,每30秒經過一會兒的汽車拍照。 我現在有大約200張照片(僅用於小測試),但我無法再繼續了。

我制作了一個選擇工具來挑選圖片(邊界框)上的汽車,並將圖片標記為底片(如果沒有)。 以下是該應用程序外觀的兩個示例:

在此處輸入圖片說明在此處輸入圖片說明

然后,應用程序將標記的對象保存在positive.txt文件中,如下所示,跳過未標記的圖片或標記為負的圖片:

/samples/img_0000.jpg 1 74 66 34 30
/samples/img_0001.jpg 2 78 69 31 25 218 129 61 38
/samples/img_0003.jpg 1 83 72 21 21
/samples/img_0005.jpg 1 76 65 19 17
/samples/img_0006.jpg 1 127 112 37 24
/samples/img_0007.jpg 2 83 72 22 21 127 112 36 22
...

底片圖片僅保存到negative.txt文件中,如下所示:

/samples/img_0002.jpg
/samples/img_0004.jpg
/samples/img_0024.jpg
/samples/img_0026.jpg
...

最后,我嘗試使用/usr/bin/opencv_haartraining -data samples -vec positive.txt -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode ALL運行haar訓練算法/usr/bin/opencv_haartraining -data samples -vec positive.txt -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode ALL

不用擔心設置,在使用功能更強大的計算機對包含更多圖片的實際數據進行實際訓練之前,我只需要執行此操作即可。

為此,我得到以下輸出和錯誤:

Data dir name: samples
Vec file name: positive.txt
BG  file name: negative.txt, is a vecfile: no
Num pos: 99
Num neg: 20
Num stages: 5
Num splits: 1 (stump as weak classifier)
Mem: 128 MB
Symmetric: FALSE
Min hit rate: 0.999000
Max false alarm rate: 0.500000
Weight trimming: 0.950000
Equal weights: FALSE
Mode: ALL
Width: 24
Height: 24
Applied boosting algorithm: GAB
Error (valid only for Discrete and Real AdaBoost): misclass
Max number of splits in tree cascade: 0
Min number of positive samples per cluster: 500
Required leaf false alarm rate: 0.03125

Tree Classifier
Stage
+---+
|  0|
+---+



Number of features used : 261600

Parent node: NULL

*** 1 cluster ***
OpenCV Error: Unspecified error (Vec file sample size mismatch) in icvGetHaarTrainingDataFromVec, file /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp, line 1930
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp:1930: error: (-2) Vec file sample size mismatch in function icvGetHaarTrainingDataFromVec

Aborted

有人知道這意味着什么嗎? 為什么樣本大小有錯誤,無論是什么...我也嘗試用絕對路徑替換相對路徑,但是我遇到了同樣的錯誤。 我實際上想做的是正確的,我還沒有找到任何明確的示例,說明如何從現有的和標記的圖片創建分類器。

事實證明.vec文件不僅是positive.txt文件,還必須使用opencv_createsamples生成。

因此,我首先使用以下命令創建了training_24-24.vec文件(不僅僅是文本文件):

/usr/bin/opencv_createsamples -vec training_24-24.vec -info positive.txt -bg negative.txt -w 24 -h 24 -num 100

這創建了training_24-24.vec文件。 與我最初的問題相比,我用正方形選擇重新制作了positive.txt文件。 然后,我通過

/usr/bin/opencv_haartraining -data samples -vec training_24-24.vec -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode ALL

此時的性能簡直糟透了,它可以識別除汽車之外的所有東西。 本文說,一個人應該使用1000幅正像和2000幅負像來開始獲得可接受的圖像。 它還說-nstages選項:

如果您有少量的正負樣本,那么設置很多階段是沒有用的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM