haar培训OpenCV断言失败

时间:2012-06-02 15:27:10

标签: c++ image-processing opencv 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行”

关于导致这种情况的任何想法?

1 个答案:

答案 0 :(得分:12)

OpenCV DevZone网站in June 2012.上的实用工具的创建者回答了这个问题

引用玛丽亚:

  

问题是您的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   值。

它对我有用。我也有同样的问题,我跟随famous tutorial on HAAR training,但想尝试更新的训练实用程序 -npos 7000 -nneg 2973

所以我做了以下计算:

vec-file必须包含> =(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:here