训练哈尔级联花了很少的时间

时间:2014-01-13 14:08:20

标签: opencv computer-vision

我使用2000张裁剪面部图像(仅包含脸部)和3321张负面随机图像训练了一个新的haar级联。

我使用了命令:

opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt -numStages 20 -minHitRate 0.999  maxFalseAlarmRate 0.5 -numPos 2000 -numNeg 3321 -w 80 -h 40 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024

我担心培训时间只有34分钟。结果也不是很好。

我应该使用更多样品吗?使用上述参数训练分类器只需30分钟是否正常?我应该改变它们以获得更好的结果吗?

我正在使用OpenCV 2.4.7开发windows8。我使用8GN的RAM工作在一台相对较强的机器上。

提前致谢,

吉尔。

2 个答案:

答案 0 :(得分:2)

检查你是否真的有一个20级的级联。如果您的阶段比预期的少,请检查是否因为您的样本用完了。通常,您不应该为每个阶段使用所有阳性样本。根据您的命中率,您可以拒绝每个阶段的一些阳性样本,需要补充这些样本以进行下一阶段的培训。因此,您希望您的numPos小于您拥有的阳性样本总数。

首先,您需要分析检测结果。您是否患有过多的误报,过多的假阴性或两者兼而有之?

一般来说,如果你的结果不好,你可以做几件事。

首先,确保您的负片图像相当大,并且它们包含通常与您感兴趣的对象相关的背景(面部,在您的情况下)。培训师会为每个阶段自动生成负样本。它使用已有的阶段对负片图像进行检测。无论它检测到什么,根据定义都是误报,而那些被用作下一阶段的否定。

更多数据通常是个好主意。因此,如果您有15K肯定,请尝试添加更多。如果您的探测器错过很多面孔,这可能非常有用。

如果您看到太多错误警报,那么您应该尝试降低分类器的整体误报率。由于您有这么多数据,您可以通过增加阶段数来尝试这样做。或者,您可以降低每个阶段的最大误报率。这意味着每个阶段都必须更加复杂,并且需要更长的时间进行训练。

您还可以尝试不同的功能。您现在可以选择Haar,LBP和HOG。与哈尔相比,LBP和HOG的训练时间和记忆要少得多。然而,HOG可能不太适合面孔。

答案 1 :(得分:2)

我的答案可能已经很晚了。但是为了别人的利益,无论如何我都会发布它;

首先,我很惊讶培训花了这么短的时间。特别是因为你的样品非常大。 80x40真是太棒了!我自己通常训练样本大约20像素的最大尺寸。在你的情况下22x11会好的。随着样本量的增加,训练时间几乎逐渐增加。

接下来,2000年的积极因素应该会很好。也就是说,如果它们不太相似。最好的样本与您想要检测的样本有很大差异。删除非常相似的样本。它们会对探测器的质量产生负面影响。

然后,3000负数有点偏低。大约6000个负面因素给了我很好的结果。但是,再一次,让负面情况大不相同会更好。拥有很多细节的负片也更好。明亮的蓝天图片不能很好地工作。如果你不能轻易得到那么多的底片,你也可以呈现你所拥有的那些副本。

最后,我越是想到它,我就越相信你做错了什么。在短短34分钟内完成2000个80x40样品的20个阶段?没门!你真的在那个载体文件中有2000个阳性吗?

问候并祝你好运!