haar培训OpenCV断言失败

val*_*tin 6 c++ opencv image-processing computer-vision haar-wavelet

我正在尝试使用3340正面图像和1224个负面图像为OpenCV中的行人训练一个类似于haar的分类器.(在.txt文件中我保留负图像名称,即负数(1).bmp,并在txt文件中保留正数,即图片(1).bmp 1 0 0 64 128.实际上正面的例子已经是裁剪图像行人所以我只需要为每个图像指定一个正样本.

在培训过程中的某个时刻,它停止并说:

"Opencv错误:断言失败(elements_read == 1)在未知函数中,文件c:\ path\cvhaartraining.cpp,第1858行"

关于是什么导致这个的任何想法?

may*_*ank 12

这个问题在2012年6月由OpenCV DevZone网站上的实用程序创建者回答.

引用玛丽亚:

问题是你的vec文件与你在命令行-numPos 979中传递的样本数完全相同.训练应用程序使用vec文件中的所有样本来训练0阶段,它不能获得新的正样本用于下一个阶段训练因为vec文件结束了.traincascade的错误在于它在这种情况下有assert(),但它必须为用户抛出一个带有错误消息的异常.它在r8913中修复.-numPose是用于训练每个阶段的样本计数.一些已经使用的样本可以被每个前一阶段(即被识别为背景)过滤,但每个阶段不超过(1 - minHitRate)*numPose.因此vec文件必须包含> =(numPose +(numStages-1)*(1 - minHitRate)*numPose)+ S,其中S是来自vec文件的样本计数,可立即识别为背景.我希望它可以帮助您创建正确大小的vec文件并选择正确的numPos值.

它对我有用.我也有同样的问题,我正在关注HAAR培训着名教程,但想尝试使用-npos 7000 -nneg 2973的新训练实用程序

所以我做了以下计算:

vec文件必须包含> =(numPos +(numStages-1)*(1 - minHitRate)*numPos)+ S

7000> =(numPos +(20-1)*(1 - 0.999)*numPos)+ 2973

(7000 - 2973)/(1 + 19*0.001)> = numPos

numPos <= 4027/1.019

numPos <= 3951 ~~ 3950

和使用:

-npos 3950 -nneg 2973

有用.我也注意到其他人也在减少numPos方面取得了成功:这里

  • 有没有其他人发现-numPos和-numPose是两个令人困惑的事情?或者只是一个错字?这里的文档中不存在numPose:http://docs.opencv.org/doc/user_guide/ug_traincascade.html#cascade-training我知道这是一个直接的qoute,但为了清楚起见,编辑它可能会很好 (2认同)