OpenCV 3.1:无法填充临时阶段的训练数据集。在一阶段

时间:2016-02-20 19:25:31

标签: windows opencv opencv3.1

这是一个常见的错误,但我已经寻找答案并尝试了很多建议,但没有任何效果。我在我的windows(10)系统上使用opencv 3.1想要训练一个识别playmobil数字的系统。 我有一堆118个不同的playmo数字的正面图像,我有近3000张负面图像。全部转换为pgm格式。正像是64x128,负像最大。 256×256。 (我也有原始文件) 我开始使用这些参数进行培训:

opencv_traincascade.exe -data classifier -vec playmobil.vec -bg negative.txt -numPos 110 -numNeg 1000 -numStages 3 -w 24 -h 48 -minHitRate 0.999 -maxFalseAlarmRate 0.5

0-stage就像魅力一样,将其作为输出:

E:\temp\train>..\opencv3\build\x64\vc14\bin\opencv_traincascade.exe -data classifier -vec playmobil.vec -bg negative.txt -numPos 110 -numNeg 1000 -numStages 3 -w 24 -h 48 -minHitRate 0.999 -maxFalseAlarmRate 0.5
PARAMETERS:
cascadeDirName: classifier
vecFileName: playmobil.vec
bgFileName: negative.txt
numPos: 110
numNeg: 1000
numStages: 3
precalcValBufSize[Mb] : 1024
precalcIdxBufSize[Mb] : 1024
acceptanceRatioBreakValue : -1
stageType: BOOST
featureType: HAAR
sampleWidth: 24
sampleHeight: 48
boostType: GAB
minHitRate: 0.999
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
mode: BASIC

===== TRAINING 0-stage =====
<BEGIN
POS count : consumed   110 : 110
NEG count : acceptanceRatio    1000 : 1
Precalculation time: 20.522
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1|        1|        1|
+----+---------+---------+
|   2|        1|        0|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 1 minutes 32 seconds.

但是在一阶段训练停止时会显示以下消息:

===== TRAINING 1-stage =====
<BEGIN
POS count : consumed   110 : 110
Train dataset for temp stage can not be filled. Branch training terminated.

我尝试了很多不同的参数。带有或多或少的负面图像。什么都行不通。还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

您的问题似乎与您的训练参数有关。

当训练级联时,可能会发生正样本被丢弃以进行进一步处理(以及否定)。现在的问题是您指定 numPos 为110,即所有正样本。

当所述事情发生并且正样本不能用于进一步处理时,级联分类器尝试用新的样本替换掉落的样本。由于您已将所有正样品送入管道,因此无法替换掉落的样品并退出。

因此,您应尝试使用 numPos 的较低值重新运行培训。

有关更详细的说明,请查看this link