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