我正在尝试训练自己的OpenCV Haar分类器进行杯检测。 我有100个包含杯子的图像和400个不包含杯子的图像,所以,
正面图片数量= 100
不。负片数量= 400
起初,我为他们两个创建了dat,
find ./Negative_Images -name '*.jpg' >negatives.dat
find ./Positive_Images -name '*.jpg' >positives.dat
接下来,我运行以下命令来生成样本(我将样本100的值放入,因为我的正像中没有一个是100。对吗?)
perl createtrainsamples.pl positives.dat negatives.dat samples 100 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 1.1 -maxyangle 1.1 maxzangle 0.5 -maxidev 40 -w 80 -h 60"
现在在“样本”文件夹中创建了100个样本(* .jpg.vec)。接下来,我运行以下命令来生成samples.vac
python ./tools/mergevec.py -v samples/ -o samples.vec
在mrnugget 中找到的mergevec.py
下一个命令现在是“ opencv_haartraining”,
opencv_traincascade -data classifier -vec samples.vec -bg negatives.dat -precalcValBufSize 2500 -precalcIdxBufSize 2500 -numPos 100 -numNeg 400 -numStages 15 -minhitrate 0.99 -maxfalsealarm 0.5 -w 80 -h 60
我收到错误错误:无法获取新的阳性样本
有人通过numPos = noOfPositiveImages * 0.9解决了它,但是对我来说不起作用
从不同的来源,我找到了一个公式来计算numPose的值。
vec文件必须包含> =(numPose +(numStages-1)*(1-minHitRate)* numPose)+ S
到目前为止,对我而言
vec文件必须包含= 100(因为我有100个正图像,并从那100个样本中创建了该图像)
numStage = 4(或者根据需要,它可以是任何其他值)
minHitRate = 0.99
S =来自vec文件的样本计数。(在其他地方说,来自vec文件的所有跳过样本的计数(对于所有阶段))
我不明白,我应该为S赋予什么价值?
有人可以举例说明这个公式吗?我应该在命令中输入什么值来解决此错误?