我正在尝试训练一个检测图像中的legos面的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小时,我认为这太快了,也许是导致表现不佳的原因)。
答案 0 :(得分:3)
在这里查看我的答案 - Generating good training data for haar cascades
如果您的训练集实际上是您发布的图片的大小,那么40x40很可能只是宽度和高度的大小。 2小时可以用于训练,但是在0.999我不会期望它能够快速达到10个阶段。
这是那些没有真正“正确”答案的问题之一。我会建议更高分辨率的图像。
评论问题的答案 第一条评论 - 在您将要使用的图像上训练您的分类器,因此如果它们是低分辨率,则坚持低分辨率。这可能只是一个更难的问题。
第二条评论 - 如果您只是在一个场景中进行训练,即如果您有一个具有不同背景的乐高照相亭并且您只是检测到了帽子,则使用除了正面特征之外的所有内容。即背景。它变成了一个更简单的CV问题,当我说否定是“其他所有”时我的意思就是你试图检测到的。如果你试图探测在伦敦街头行走的乐高男人那么你需要一个比他们都在同一背景下更大的负面集。它甚至可能有助于使你的背景成为一种独特的颜色或其他东西,我不确定。
答案 1 :(得分:0)
问题解决了:
它需要更高分辨率的图像和更小的maxFalseAlarmRate。
低图像分辨率可能会增加很多噪音,这会误导分类器。
我建议对面临类似问题的任何人重新评估并重建数据集。