为haar级联生成良好的训练数据

时间:2015-03-12 23:51:23

标签: opencv haar-classifier

我正在尝试建立haar级联来进行特定字体的OCR;每个字符一个分类器。

我只需将字体绘制到图像上即可生成大量的训练数据。因此,计划是为每个角色生成积极的训练数据,并使用其他角色的示例作为负面训练数据。

我想知道我应该在培训数据中加入多少变化。通常情况下,我只是尝试一切,但我收集这些东西需要几天的时间来训练(对于每个角色!)所以一些建议会很好。

所以,有几个问题:

  • 训练算法是否认识到我不关心透明像素?或者如果我将角色叠加在不同的背景上,它会表现得更好吗?
  • 我应该包含每个角色带有不同前缀和后缀的图像,还是我应该单独处理每个角色?
  • 我应该包含放大和缩小角色的图像吗?我收集的算法几乎忽略了大小,无论如何都要降低所有效率?

谢谢!

1 个答案:

答案 0 :(得分:8)

  

训练算法是否认识到我不关心透明像素?或者如果我将角色叠加在不同的背景上,它会表现得更好吗?

您在训练数据部分上提供的图像越多“噪音”就会越强大,但是,训练所需的时间越长。然而,这是你的负面采样将付诸实施的地方。如果你有尽可能多的负训练样本,尽可能多的范围,那么你将创建更强大的探测器。话虽如此,如果你有一个特定的用例,那么我会建议略微倾斜你的训练集以匹配它,它会不那么健壮,但在你的应用程序中要好得多。

  

我应该包含每个角色带有不同前缀和后缀的图像,还是应该单独处理每个角色?

如果您想检测单个字母,请单独训练。如果你训练它来检测“ABC”并且你只想要“A”那么它将开始获得混合信息。只需训练每个字母“A”,“B”等,然后您的探测器应该能够在较大的图像中挑选出每个字母。

  

我应该在角色放大和缩小的位置包含图像吗?我收集算法几乎忽略了大小,并且为了效率而缩减所有内容?

我不相信这是正确的。 AFAIK HAAR算法无法缩小训练后的图像。因此,如果您使用50x50字母训练所有图像,但图像中的字母为25x25,那么您将无法检测到它们。如果你训练和检测相反的方式,你会得到结果。从小处开始,让算法为你改变大小(上)。