使用traincascade.exe在TBB的Haar训练期间出错

时间:2013-05-02 06:08:41

标签: opencv

我有大约931个裁剪的阳性样本和1162个阴性样本(非感兴趣的对象)。裁剪后的图像分辨率为54x12,并放置在一个文件夹中。包含正样本的.txt文件如下所示:picture1.bmp 1 0 0 54 12。我有一个负面图片的.txt文件,其中只包含Noneye001.bmp等负面图片的名称。

使用的命令: 1.对于.vec文件生成

C:\Opencv2.4.3\opencv\build\bin\Debug\opencv_createsamplesd.exe -info positive/info.txt -num 931 -vec data/vector.vec -maxxangle 0.6 -maxyangle 0 -maxzangle 0.3 -maxidev 100 -bgcolor 0 -bgthresh 0 -w 54 -h 12

2.对于Haartraining

C:\Opencv2.4.3\opencv\build\bin\Debug\opencv_traincascaded.exe -data data/cascade -vec data/vector.vec -bg negative/infofile.txt -numPos 931 -numNeg 1162 -numStages 20 -precalcValBufSize 256 -precalcIdxBufSize 256 -featureType HAAR -mode ALL -w 54 -h 12

我收到以下错误

PARAMETERS:
cascadeDirName: data/cascade
vecFileName: data/vector.vec
bgFileName: negative/infofile.txt
numPos: 931
numNeg: 1162
numStages: 20
precalcValBufSize[Mb] : 256
precalcIdxBufSize[Mb] : 256
stageType: BOOST
featureType: HAAR
sampleWidth: 54
sampleHeight: 12
boostType: GAB
minHitRate: 0.995
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
mode: ALL

===== TRAINING 0-stage =====
<BEGIN
POS count : consumed   931 : 931
NEG count : acceptanceRatio    1162 : 1
Precalculation time: 41.787
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1|        1|        1|
+----+---------+---------+
|   2|        1|        1|
+----+---------+---------+
|   3| 0.996778| 0.300344|
+----+---------+---------+
END>

===== TRAINING 1-stage =====
<BEGIN
OpenCV Error: Bad argument (Can not get new positive sample. The most possible r
eason is insufficient count of samples in given vec-file.
) in unknown function, file ..\..\..\apps\traincascade\imagestorage.cpp, line 15
9

我尝试增加和减少否。负面样本,但没有帮助。

请帮忙....... 提前谢谢。

2 个答案:

答案 0 :(得分:1)

这是因为你有931张正面图像,正在尝试训练931为正面阶段。

你需要在每个训练阶段减少这个数字,以便每次“错误分类”,它会尝试并获得另一个图像。

将其调低至800,看看你如何上场,我想它不会失败。

如果您需要更多信息,可以在其上找到一个OpenCVAnswers问题Here

答案 1 :(得分:0)

opencv_createsamples有一个-num参数,用于设置正样本的数量(它不会简单地读取正样本文件中的行数)。如果未设置-num,则默认值为1000个样本。这就是opencv_traincascade在1000个样本附近失败的原因,因为只有1000个正例。 对于更难的问题,您可能需要超过1000个样本,因此需要设置-num参数。