【问题标题】:Generating good training data for haar cascades为 haar 级联生成良好的训练数据
【发布时间】:2015-05-15 08:37:41
【问题描述】:
我正在尝试构建用于对特定字体进行 OCR 的 haar 级联;每个字符一个分类器。
只需将字体绘制到图像上,我就可以生成大量训练数据。因此,计划是为每个字符生成正训练数据,并使用其他字符的示例作为负训练数据。
我想知道我应该在训练数据中加入多少变化。通常我会尝试一切,但我收集这些东西需要几天的时间来训练(对于每个角色!)所以一些建议会很好。
所以,有几个问题:
- 训练算法是否识别出我不关心透明像素?或者,如果我将角色叠加在不同的背景上,效果会更好吗?
- 我应该包含每个字符都显示有不同前缀和后缀的图像,还是应该单独处理每个字符?
- 我应该包括角色放大和缩小的图像吗?我认为该算法几乎忽略了大小,并且无论如何都会缩小所有内容以提高效率?
谢谢!
【问题讨论】:
标签:
opencv
haar-classifier
【解决方案1】:
训练算法是否识别出我不关心透明像素?或者如果我将角色叠加在不同的背景上会更好吗?
您在训练数据部分中为图像提供的“噪音”越多,那么它就越稳健,但是训练所需的时间越长。然而,这是您的负面样本将发挥作用的地方。如果您有尽可能多的负训练样本和尽可能多的范围,那么您将创建更强大的检测器。话虽如此,如果你有一个特定的用例,那么我建议稍微调整你的训练集以匹配它,它会不太健壮但在你的应用程序中会更好。
我应该包含每个字符以不同前缀和后缀显示的图像,还是应该单独处理每个字符?
如果您想检测单个字母,请单独训练。如果您训练它检测“ABC”并且您只想要“A”,那么它将开始收到混合消息。只需训练每个字母“A”、“B”等,然后您的检测器应该能够在较大的图像中挑选出每个单独的字母。
我应该包含角色放大和缩小的图像吗?我认为该算法几乎忽略了大小,并且无论如何都会缩小所有内容以提高效率?
我不相信这是正确的。 AFAIK HAAR 算法无法缩小经过训练的图像。因此,如果您在 50x50 字母上训练所有图像,但图像中的字母是 25x25,那么您将无法检测到它们。如果你反过来训练和检测,你会得到结果。从小处着手,让算法为您改变大小(向上)。