opencv 分类器训练 Assertion failed (elements_read == 1) in icvGetHaarTraininDataFrom

今天进行分类器的训练,网上教程很多,开始跟着http://blog.csdn.net/txiaomiao/article/details/64132273做,完成之后没有问题,一切正常,实验发现效果不是很好,所以将负样本修改了一下,然后再次训练,也没有问题,但效果任然不理想,所以讲正样本尺寸进行了修改,完成之后再次训练出错了,提示Assertion failed (elements_read == 1) in icvGetHaarTraininDataFrom...。网上搜索了一下,这个问题很常见,大家都是说由于每次从正样本的vec中随机一些,由于虚报的存在,所以导致vec组件减小,这样到后面可能vec中的样本数量就没有给定的npos和nneg多,不能继续训练导致报错。

听起来很有道理的样子,但是无论我怎样修改我的npos和nneg,就是不行,我的vec中存在340个样本,即使我设置npos=30 nneg尝试过大于小于等于30的都不行。这就很尴尬了,又在网上看了很多文章,发现都是大同小异,按理说我的npos和nneg都调整的这么小了,样本怎么都应该是够了的,而且之前成功的步骤现在都有问题了。

最后发现是自己之前生成xml成功的时候有一个xml文件夹,保存了生成过程中的数据信息,第二次或者以后尝试最好先将之前生成的文件夹删除,不然也可能导致出现标题的问题。如果遇到调整参数无效的时候可以尝试一下这个思路。

你可能感兴趣的:(opencv使用心得)