请帮助我更多地了解我的第一次哈尔培训结果。 所以我想跟随Dileep Kumar’s文章训练哈尔分类器来识别简单的笔。
用手机拍了14张笔。这些图片大小很大: 263x2814
然后我收集了负面图片,其中一些是从网上下载的,尺寸 640x480 ,其中一些使用我的手机相机制作,尺寸为: 1920x1080,5313x2388 >
其中一些负面影像确实很大。我总共有158张负面图片 之后创建负面和正面图像列表并运行:createsamples命令:
perl createtrainsamples.pl positives.dat negatives.dat samples 250 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 0.5 -maxyangle 0.5 maxzangle 0.5 -maxidev 40 -w 160 -h 20"
我不确定这里160 for for和20 for height是否合适?
然后在使用samples.vec文件后,我使用以下命令运行级联训练:
opencv_traincascade -data firstTry -vec samples.vec -bg negatives.dat -numPos 250 -numNeg 99 -numStages 25 –featureType HAAR -mode ALL -w 160 -h 20 -mem 2048
我使用相同的宽度和高度,但不确定这是否正确。我从一些参考脚本中获取了宽度和高度值。获取cascade.xml文件后,我使用以下参数在我的图片上运行detectMultiScale:
faces = faceCascade.detectMultiScale( image, scaleFactor=1.4, minNeighbors=3, minSize=(30, 30) )
检测效果不佳。它只是检测笔的某些部分而不是完整的笔。
此外,当我有一些笔放在环境中的照片,而不是笔没有被检测到。
我认为我需要调整所有正面和负面图像的大小并使它们大小相同,但不确定。
你能否就我在这里做错了什么以及如何改进我的结果提出一些意见。
您可以找到我的所有文件here:
答案 0 :(得分:6)
这些仅基于我自己的经验:
您可以在traincascade命令中更改一些重要变量,使检测效果更好,但它们会使训练时间过长:
-minHitRate 0.999 -maxFalseAlarmRate 0.1 -maxWeakCount 1000
警告:如果您要使用上述数字, 基本上必须 使用LBP而不是HAAR。 HAAR有更好的检测功能,但使用LBP可以使用更好的值,因为它占用的时间更少(尽管使用这些数字和大量图像(+10000)可能仍需要数天但是使用HAAR并且我 可能 几个月后见到你。以下是你如何制作LBP:-featureType LBP
更接近-minHitRate为1越好。较低的-maxFalseAlarmRate为0越好。并且-maxWeakCount越高越好。
另请注意,您设置的越多,您需要的阶段越少。你可能有一个25级的级联,比一个设置良好的6级级联更差。另外请注意,当您使用这些数字时,您的火车赛车可能看起来像是停留在获得负面图像上(虽然没关系)。
奇怪的是:当你想要检测笔时,为什么要使用faces = faceCascade.detectMultiScale
。 :D 不要让计算机比已经配对更困惑。的:d 强>