我正在尝试训练一个 haar 分类器来检测图像中的乐高积木人脸,但我真的很难调整参数。

我拍了 3 个乐高积木(每个 50 张图片)的照片,并使用 opencv 将它们的头部隔离为 40x40 图像。

示例图像如下:

python - Haar分类器参数调优-LMLPHP

除此之外,我只拿了 500 张空背景图像作为我数据集中的负图像。
我创建了路径并按照 opencv 文档中的描述生成了 samples.vec 文件。

之后,我尝试训练我的 haar 分类器。我使用了在另一个类似项目中找到的这些参数:opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt\ -numStages 10 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1000\ -numNeg 600 -w 40 -h 40 -mode ALL -precalcValBufSize 1024\ -precalcIdxBufSize 1024
结果真的很糟糕。分类器识别不存在的乐高积木,奇怪的是它不识别预期的乐高积木面孔。

我真的在调整这个分类器时遇到了麻烦,因为参数列表很大,我不知道如何设置将导致高效分类器并且不需要很长时间训练的值。

任何帮助将不胜感激,特别是关于如何选择参数以及“平均”计算机中的预期训练时间是多少。感谢您的时间!

(ps:培训时长为 2 小时,我认为这太快了,可能是性能不佳的原因)。

最佳答案

在这里看看我的答案 - Generating good training data for haar cascades

如果您的训练集确实是您发布的那张图片的大小,那么 40x40 很可能只是宽度和高度较大的方法。 2 小时的训练时间是可以的,但在 0.999 时,我不希望它很快达到 10 个阶段。

这是没有真正“正确”答案的问题之一。不过,我建议使用更高分辨率的图像。

回答评论问题
第一条评论 - 在您将要使用的图像上训练您的分类器,因此如果它们是低分辨率的,则坚持使用低分辨率。这可能只是一个更难的问题。

第二条评论 - 如果您只在一个场景中训练,即如果您有一个背景独特的乐高照相亭,并且您只检测到 int hat,则使用除正面特征之外的所有内容。 IE。背景。它变成了一个更容易的简历问题,当我说负面是“其他一切”时,我的意思是就您试图检测的内容而言。如果您试图检测在伦敦街道上行走的乐高人,那么您将需要一个比他们都在同一背景下更大的负集。它甚至可能有助于使您的背景具有独特的颜色或其他东西,我不确定。

关于python - Haar分类器参数调优,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46116661/

10-15 12:45