我正在寻找一个光学字符识别(OCR)项目。在进行了一些研究之后,我遇到了一个看起来很有趣的体系结构:CNN + RNN + CTC。我熟悉卷积神经网络(CNN)和递归神经网络(RNN),但是什么是连接主义时间分类(CTC)?我想用外行的话解释一下。
我正在寻找一个光学字符识别(OCR)项目。在进行了一些研究之后,我遇到了一个看起来很有趣的体系结构:CNN + RNN + CTC。我熟悉卷积神经网络(CNN)和递归神经网络(RNN),但是什么是连接主义时间分类(CTC)?我想用外行的话解释一下。
Answers:
您有一个包含以下内容的数据集:
因此您的数据集可能看起来像这样:
神经网络(NN)输出图像的每个可能水平位置(在文献中通常称为时间步长 t )的得分。对于宽度为2(t0,t1)和2个可能的字符(“ a”,“ b”)的图像,这看起来像这样:
| t0 | t1
--+-----+----
a | 0.1 | 0.6
b | 0.9 | 0.4
要训练这样的NN,您必须为每个图像指定在图像中放置地面真实文本的字符的位置。例如,考虑一个包含文本“ Hello”的图像。现在,您必须指定“ H”的开始和结束位置(例如,“ H”从第10个像素开始,一直到第25个像素)。“ e”,“ l” ...相同,这听起来很无聊,并且对于大型数据集来说是一项艰巨的工作。
即使您设法以这种方式注释完整的数据集,也存在另一个问题。NN在每个时间步输出每个角色的分数,有关玩具示例,请参见上面显示的表格。现在,我们可以按时间步长选择最可能的角色,在玩具示例中为“ b”和“ a”。现在考虑一个较大的文本,例如“ Hello”。如果作家的写作风格在水平位置占用大量空间,则每个字符将占用多个时间步长。以每个时间步长中最有可能出现的角色为例,可以给我们提供类似“ HHHHHHHHeeeellllllllloooo”的文字。我们应该如何将这些文本转换为正确的输出?删除每个重复的字符?这会产生“ Helo”,这是不正确的。因此,我们需要一些巧妙的后处理。
CTC解决了两个问题:
如何实现的?
为了说明这一点,请看下图。它是在语音识别的上下文中,但是,文本识别是相同的。即使字符的对齐方式和位置不同,解码也会为两个讲话者产生相同的文本。
进一步阅读: