我正在尝试建立haar级联来进行特定字体的OCR; 每个字符一个分类器.
我只需将字体绘制到图像上即可生成大量的训练数据.因此,计划是为每个角色生成积极的训练数据,并使用其他角色的示例作为负面训练数据.
我想知道我应该在训练数据中加入多少变化.通常情况下,我只是尝试一切,但我收集这些东西需要几天训练(对于每个角色!)所以一些建议会很好.
那么,有几个问题:
训练算法是否认识到我不关心透明像素?或者如果我将角色叠加在不同的背景上,它会表现得更好吗?
我应该包含每个角色带有不同前缀和后缀的图像,还是我应该单独处理每个角色?
我应该包括角色放大和缩小的图像吗?我收集的算法几乎忽略了大小,并且无论如何都要降低所有效率?
谢谢!
训练算法是否认识到我不关心透明像素?或者如果我将角色叠加在不同的背景上,它会表现得更好吗?
您在训练数据部分上提供的图像越"噪音",它就会越强大,但是是的,训练所需的时间越长.然而,这是你的负面采样将付诸实施的地方.如果你有尽可能多的负训练样本,尽可能多的范围,那么你将创建更强大的探测器.话虽这么说,如果你有一个特定的用例,那么我会建议略微倾斜你的训练集以匹配它,它会不那么健壮但在你的应用程序中要好得多.
我应该包含每个角色带有不同前缀和后缀的图像,还是我应该单独处理每个角色?
如果要检测单个字母,则单独训练.如果你训练它来检测"ABC"并且你只想要"A"那么它将开始得到混合信息.只需训练每个字母"A","B"等,然后您的探测器应该能够在较大的图像中挑选出每个字母.
我应该包括角色放大和缩小的图像吗?我收集的算法几乎忽略了大小,并且无论如何都要降低所有效率?
我不相信这是正确的.AFAIK HAAR算法无法缩小训练后的图像.因此,如果您使用50x50字母训练所有图像,但图像中的字母为25x25,那么您将无法检测到它们.如果你训练和检测相反的方式,你会得到结果.从小处开始,让算法为您改变大小(向上).