【发布时间】:2018-11-22 06:11:28
【问题描述】:
我只是一个 Keras 初学者,我尝试通过 Keras 实现一个 OCR 项目。所以我尝试学习 Keras OCR 示例。这里是a link!
我不明白为什么 TextImageGenerator 类中的“get_output_size”是 len(alphabet) + 1 而不是 len(alphabet)?
如果有人能告诉我原因,我将不胜感激..
【问题讨论】:
我只是一个 Keras 初学者,我尝试通过 Keras 实现一个 OCR 项目。所以我尝试学习 Keras OCR 示例。这里是a link!
我不明白为什么 TextImageGenerator 类中的“get_output_size”是 len(alphabet) + 1 而不是 len(alphabet)?
如果有人能告诉我原因,我将不胜感激..
【问题讨论】:
它与用作成本函数的 CTC 层有关。也许阅读科学论文会给你更多的视角,但这与模型使用的“额外”类说(“没有字母”)有关。 Paper by Graves explaining the algorithm behind
【讨论】:
在使用 CTC 损失 训练的神经网络中需要一个额外字符。这个额外的字符本质上意味着“在这个位置没有看到任何字符”并且被称为 CTC 空白。
它用于允许文本的不同对齐方式或允许字符之间有一些空格(想想包含“你好”或“你好”的图像,它们周围有空格,因为你想识别“你好”) . 识别文本时,这些空白被删除:例如使用最佳路径解码时,取每个位置得分最高的字符,但会去掉空格。
为了更好地了解这个特殊的 CTC 空白字符,让我们看一下下面的插图。神经网络的输出包含字符 a、b 和 CTC 空白(表示为“-”)。 让我们为每个位置 t0...t4 挑选得分最高的字符,这给了我们“aaa-b”。最佳路径解码去除了重复的字符,这给了我们“a-b”,最后去除了所有的空白,这给了我们“ab”。
如果您想了解更多信息,可以查看我的CTC article,或this article,或original paper。
【讨论】: