哈尔分类器参数调优
Posted
技术标签:
【中文标题】哈尔分类器参数调优【英文标题】:Haar classifier parameters tuning 【发布时间】:2018-02-17 09:22:59 【问题描述】:我正在尝试训练一个 haar 分类器来检测图像中的乐高积木面孔,但我很难调整参数。
我拍摄了 3 张乐高积木的照片(每张 50 张照片),并使用 opencv 将它们的头部隔离为 40x40 图像。
示例图片如下:
除此之外,我只取了 500 张空白背景图像作为我的数据集中的负片图像。 我创建了路径并生成了 samples.vec 文件,如 opencv 文档中所述。
之后,我尝试训练我的 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
结果真的很糟糕。分类器可以识别不存在的乐高积木,但奇怪的是它不能识别预期的乐高积木面孔。
我确实在调整这个分类器时遇到了麻烦,因为参数列表很大,而且我不知道如何设置可以产生高效分类器并且不需要花费很长时间来训练的值。
任何帮助将不胜感激,尤其是关于如何选择参数以及在“平均”计算机中的预期训练时间是多少。感谢您的宝贵时间!
(p.s.:训练时间是2小时,我觉得太快了,可能是表现不好的原因)。
【问题讨论】:
【参考方案1】:在这里看看我的回答 - Generating good training data for haar cascades
如果您的训练集确实是您发布的那张图片的大小,那么 40x40 可能只是宽度和高度的大。 2 小时的训练是可以的,但在 0.999 时,我不希望它这么快达到 10 个阶段。
这是没有真正“正确”答案的问题之一。不过我建议使用更高分辨率的图像。
评论问题的答案 第一条评论 - 在您将要使用的图像上训练您的分类器,因此如果它们是低分辨率的,那么请坚持使用低分辨率。这可能只是一个更难的问题。
第二条评论 - 如果您只在一个场景中进行训练,即如果您有一个具有独特背景的乐高照相亭并且您只检测到 int hat,那么使用除正面特征之外的所有内容。 IE。背景。它成为一个更容易的简历问题,当我说否定是“其他一切”时,我的意思是你试图检测的东西。如果你想检测在伦敦街头走来走去的乐高人,那么你需要一个比他们都在同一个背景上更大的负集。它甚至可能有助于使您的背景具有独特的颜色或其他东西,我不确定。
【讨论】:
感谢您的回答。我可以在训练期间提供更高分辨率的图像,但我要测试的实时数据将是质量较低的照片,就像我在帖子中提供的样本一样。这不是问题吗?也许分类器会被训练来“期待”更好的图像。 还有别的:如果我说得对,你建议我的负面图像尽可能随机?因为我提供的负片几乎是同一个场景。考虑到我只想在那个场景中识别乐高积木面孔,我似乎无法理解为什么需要在负片图像中产生差异。 我已经用你的问题的答案更新了我的答案,评论有点长【参考方案2】:问题解决了:
它需要更高分辨率的图像和更小的 maxFalseAlarmRate。
可能是低图像分辨率增加了很多噪音,并且误导了分类器。
我建议任何面临类似问题的人重新评估并可能重建数据集。
【讨论】:
以上是关于哈尔分类器参数调优的主要内容,如果未能解决你的问题,请参考以下文章
算法 | 使用sklearn自带的贝叶斯分类器进行文本分类和参数调优