簡體   English   中英

OpenCV HaarCascade樣本不足的可能原因

[英]Possible reasons for OpenCV HaarCascade insuffiecient samples

信息

我目前正在嘗試訓練 HaarCascade 分類器。 我已經到了訓練過程有效的地步,我能夠訓練一個至少“工作”的分類器。 這將檢測到很多正確。 現在我試圖通過添加更多的正負樣本來改善結果。

主意

由於分類器在很多時候都在工作,我決定讓它運行在測試數據集上並裁剪出正確分類的圖像。 這些裁剪的圖像是由我手動清理的。 我現在想將這些新的正面圖像添加到我的訓練數據集中。

問題

在開始另一次訓練運行后,我遇到了以下錯誤:

POS 當前樣本:166 POS 當前樣本:167 POS 當前樣本:168 POS OpenCV 錯誤:參數錯誤(無法獲取新的正樣本。最可能的原因是給定 vec 文件中的樣本數量不足。)在 CvCascadeImageReader::PosReader ::get,文件 D:\\cv\\opencv_3.2.0\\sources_withTextModule\\apps\\traincascade\\imagestorage.cpp,第 158 行

到目前為止我嘗試過的

  • 我在訓練過程中使用Cascade Trainer GUI (3.3.1) ,所以我檢查了日志,如果程序將參數設置為正確的值。 特別是計數正圖像計數絕對正確。
  • 接下來我嘗試將 minHitRate 降低到 80% 仍然沒有運氣
  • 我過去曾經遇到過這個問題。 我通過再次刪除添加的正數來解決它,因為它只是一個小批量。 這仍然有效,但這次不是一個例外的解決方案。

級聯訓練器 GUI 日志

包括 opencv 調用的所有參數。 我還縮短了相對路徑以提高可讀性。

**************************************************
*************** CREATING SAMPLES *****************
**************************************************
Object : project_name/trainingdata
Fixing file names in negative images folder.
Fixing file names in positive images folder.
Creating negative list project_name/trainingdata/neg.lst
Creating positive list project_name/trainingdata/pos.lst
Running : opencv_createsamples
Info file name: project_name\trainingdata\pos.lst
Img file name: (NULL)
Vec file name: project_name\trainingdata\pos_samples.vec
BG  file name: (NULL)
Num: 319
BG color: 0
BG threshold: 80
Invert: FALSE
Max intensity deviation: 40
Max x angle: 1.1
Max y angle: 1.1
Max z angle: 0.5
Show samples: FALSE
Width: 24
Height: 24
Max Scale: -1
Create training samples from images collection...
Done. Created 319 samples

**************************************************
************* TRAINING CLASSIFIER ****************
**************************************************
Running : opencv_traincascade
PARAMETERS:
cascadeDirName: project_name\trainingdata\classifier
vecFileName: project_name\trainingdata\pos_samples.vec
bgFileName: project_name\trainingdata\neg.lst

numPos: 319
numNeg: 1000
numStages: 16
precalcValBufSize[Mb] : 4096
precalcIdxBufSize[Mb] : 4096
acceptanceRatioBreakValue : -1
stageType: BOOST
featureType: HAAR
sampleWidth: 24
sampleHeight: 24
boostType: GAB
minHitRate: 0.995
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
mode: BASIC
Number of unique features given windowSize [24,24] : 162336

===== TRAINING 0-stage =====
<BEGIN

POS current samples: 1
POS current samples: 2
POS current samples: 3

(...) normal training log produced by opencv (stage0 works without any errors)
(...) then failing at stage1    

POS current samples: 167
POS current samples: 168
POS 
OpenCV Error: Bad argument (Can not get new positive sample. The most 
possible reason is insufficient count of samples in given vec-file.
) in CvCascadeImageReader::PosReader::get, file 
D:\cv\opencv_3.2.0\sources_withTextModule\apps\traincascade\imagestorage.cpp, line 158

額外的想法

因為這是我第一次嘗試這個,所以我仍然在做很多實驗,所以有一些事情可能會出錯,但我不太確定,所以我想我可能會在此處添加這些內容,以便了解這些內容的人確認。

  • 我沒有調整我的積極或消極。 它們中的大多數范圍在 50x50 到 200x200(正片)和 200x200 到 500x500(負片)之間,這是一個問題嗎? 我不調整大小,因為在大多數教程中,他們調整圖像大小並且僅在訓練后檢測固定大小。 我的目標是檢測不同大小的物體。
  • 我不太明白如何處理 sampleWidth 和 height 以及它們各自的比例。 我在想,因為我使用的圖像不僅有 KxK 比率而且還有 KxJ,這可能會使訓練器崩潰。 但是在我的原始數據集(有效)中包含這樣的比率。

1-您必須使用正面多於負面形象! 你的正面形象少於負面形象! 2- 為避免此錯誤,請使用 minHitRate= 0.999

暫無
暫無

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

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