我正在构建OCR。为此,我使用了CNN
,RNN
和CTC
损失函数。
我的输入层获取图像,输出层预测该图像上写的内容。标签将转换为整数。
['A', 'B', 'C'] -> A = 0, B = 1, C = 2
如果图像为ABC,则训练标签将为0,1,2(单行向量)
我能够单行完成此操作。例如。 “ ABCDE
”写在图像上,模型效果很好。但是如果图像是
'ABC'
'CAB'
那培训标签应该是什么?我如何告诉模型下一行?我想在多条线上训练模型。
答案 0 :(得分:2)
您要识别包含多行文档的文本。有两种方法来实现:
段将文档分成行作为预处理步骤,然后将每个分段的行分别馈入神经网络。 如果您想这样走,例如请阅读Bunke和Marti的论文[1]。他们实质上是对每条扫描线的黑白过渡进行计数,并从中创建直方图。他们使用直方图的最小值将文档分为几行。还有一些其他方法可以将文档分成几行。
培训 神经网络,以隐式将文档细分为行。 您需要增加对神经网络的关注,以便它可以专注于各个行。 Bluche在文档级别的文本识别方面做了出色的工作。 参见论文[2]和网站[3]。
[1] Marti邦克:IAM数据库:用于离线手写识别的英语句子数据库。通过Springer下载
[2] Bluche:用于端到端手写段落识别的联合行分段和转录。通过https://arxiv.org/abs/1604.08352
下载[3]模糊:扫描,出席和阅读。请参阅http://www.tbluche.com/scan_attend_read.html,然后查找“使用MDLSTM和CTC进行手写识别”和“折叠层及其建议的替换”