如何通过深度学习从头开始打造手写阅读器

2020-09-04 13:38:45

预计到2025年,光学字符识别(OCR)市场规模将达到133.8亿美元,同比增长13.7%。这一增长是由使用OCR的业务流程的快速数字化推动的,以降低其劳动力成本并节省宝贵的工时。虽然OCR已经被认为是一个已经解决的问题,但它的一个关键组件-手写识别或手写文本识别(HTR)仍然被认为是一个具有挑战性的问题陈述。不同人之间的手写风格差异很大,与印刷文本相比,手写文本的质量较差,这对将其转换为机器可读文本构成了重大障碍。然而,对于医疗保健、保险和银行等多个行业来说,这是一个需要解决的关键问题。

深度学习领域的最新进展,如变压器架构的出现,加快了我们在破解手写文本识别方面的进展。识别手写文本被称为智能字符识别(ICR),因为解决ICR所需的算法比解决普通OCR需要更多的智能。

在这篇文章中,我们将学习手写文本识别的任务,它的错综复杂,以及我们如何使用深度学习技术来解决它。

想要从手写表单中提取数据吗?前往Nanonet,开始免费构建Form OCR模型!

打印文档中的文本位于一条直线上,而人类不需要在白纸上以直线书写一行文本。

手写文本可以向右旋转,这与打印文本不同,在打印文本中,所有文本都是直立的。

患者处方数字化是医疗保健/制药行业的主要痛点。例如,罗氏每天处理数百万PB的医学PDF。手写文本检测具有关键影响的另一个领域是患者登记和表单数字化。通过将手写识别添加到他们的服务工具包中,医院/制药公司可以显著改善用户体验。

一家大型保险业每天收到超过2000万份文件,处理索赔的延误可能会对公司造成严重影响。索赔文档可以包含各种不同的手写风格,而处理索赔的纯手动自动化将完全减慢流程

人们定期开支票,支票在大多数非现金交易中仍然扮演着重要角色。在许多发展中国家,目前的支票处理程序要求银行员工阅读和手动输入支票上的信息,并核实签名和日期等条目。由于银行每天要处理大量支票,手写文本识别系统可以节省成本和人力。

通过上传图像扫描来访问整个世界,大量的历史知识正在被数字化。但是,在图像中的文本能够被识别出可以被索引、查询和浏览之前,这项工作并不是非常有用。笔迹识别在使中世纪和20世纪的文献、明信片、研究性研究等变得生动活泼方面起着关键作用。

在线方法:-在线方法涉及数字笔/指示笔,并且可以在书写文本时访问笔划信息、笔位置,如上图所示。因为它们往往有大量关于文本流动的信息,所以可以相当高的准确率对它们进行分类,文本中不同字符之间的界限变得更加清晰。

脱机方法:-脱机方法包括一旦文本被写下来就进行识别,因此没有关于书写过程中所涉及的笔划/方向的信息,并且可能会增加来自来源(即纸张)的一些背景噪声。

在现实世界中,携带一支带有传感器来捕捉笔画信息的数字笔并不总是可能/可扩展的,因此离线识别文本的任务是一个更为相关的问题。因此,现在我们将讨论各种技术来解决脱机文本的识别问题。

解决手写识别的最初方法涉及机器学习方法,如隐马尔可夫模型(HMM)、支持向量机(SVM)等。在对原始文本进行预处理后,进行特征提取以识别单个字符的环路、拐点、纵横比等关键信息。这些生成的特征现在被提供给分类器,比如HMM,以获得结果。由于人工特征提取阶段和学习能力的限制,机器学习模型的性能受到很大的限制。特征提取步骤对于每种单独的语言都是不同的,因此是不可伸缩的。随着深度学习的到来,手写识别的准确性得到了极大的提高。让我们来讨论一下手写识别深度学习领域中几个突出的研究。

众所周知,RNN/LSTM可以处理时序数据来识别时态模式并生成结果。但它们仅限于处理一维数据,因此不能直接应用于图像数据。为了解决这一问题,本文作者提出了一种多维RNN/LSTM结构,如下图所示。

下面是一般RNN和多维RNN之间的区别。在一般RNN中,隐藏层假设i在时间i-1接收来自前一隐藏层的状态。在多维RNN(例如二维RNN)中,隐藏层(i,j)从多个先前的隐藏层(即(i-1,j)和(i,j-1))接收状态,并且因此从图像中的高度和宽度捕捉上下文,这对于通过网络获得对局部区域的清楚理解是关键的。在多维RNN中,隐藏层(i,j)接收来自多个先前隐藏层的状态,即(i-1,j)和(i,j-1)。类似地,2D MDRNN隐藏层i现在可以接收信息(i-1,j)、(i,j-1)、(i+1,j)、(i,j+1),从而捕获所有方向的上下文

整个网络结构如上所示。使用MDLSTM,这只不过是将RNN块替换为上面讨论的MDRNN中的LSTM块。输入被分成大小为3x4的块,这些块现在被馈送到MDSTM层。该网络具有MDLSTM层和紧随其后的前馈(ANN)层的分层结构。然后将最终输出转换为一维向量,并提供给CTC函数生成输出。

连接式时间分类(CTC)是一种用于处理诸如语音识别、手写识别等任务的算法,其中只有输入数据和输出转录可用,但没有提供对齐细节,即语音的音频中的特定区域或手写图像中的特定区域如何与特定字符对齐。简单的启发式方法,如给每个字符相同的面积,是行不通的,因为每个字符占用的空间大小因人而异,有时手写也不一样。

对于我们的手写识别用例,考虑如下输入X=[x1,x2,…]的特定句子的输入图像区域。,x**T],而预期输出为Y=[y1,y2,…。,y**U]。在给定X的情况下,我们应该找到准确的Y。CTC算法的工作原理是获取输入X,并给出所有可能的Y分布,利用这些分布,我们可以对最终输出进行预测。

CTC使用基础字符Say-来区分输入区域中的重复字符和重复字符。例如,特定字符可以跨越多个输入区域,因此CTC将连续输出同一字符。示例:-CTC的输入James和输出为jjaammmees。最后的输出是通过折叠重复的输出得到的,因此我们得到了James。但是现在要显示重复的字符,比如hello中的';l';,我们需要有一个适当的分隔,因此所有输出都用连字符(-)分隔。现在hello的输出可能是h-ee-ll-lll-oo,如果折叠,它将变成hello,而不是helo。更多关于CTC如何工作的信息可以在CTC这里看到。

当基于每个位置的最高概率的简单启发式对CTC的输出进行解码时,我们可能会得到在现实世界中可能没有任何意义的结果。为了解决这个问题,我们可以使用不同的解码器来改善结果。让我们讨论一下不同类型的译码。

最佳路径解码:-这是我们到目前为止已经讨论过的通用解码。在每个位置,我们取模型的输出,并以最高概率找到结果。

波束搜索解码:-不是每次波束搜索都从网络获得单个输出,而是建议保持具有最高每个概率的多个输出路径,并用新的输出扩展链,并且丢弃具有较小概率的路径,以保持波束大小恒定。通过这种方法得到的结果比使用贪婪方法得到的结果更准确。

BEAM搜索与语言模型:-BEAM搜索提供了比网格搜索更精确的结果,但是它仍然不能解决有意义的结果的问题。为了解决这个问题,我们可以使用语言模型以及波束搜索,使用模型和语言模型的概率来生成最终结果。

具有编码器-解码器网络的Seq2Seq模型最近已经流行于解决语音识别、机器翻译等任务,并且因此已经通过部署附加的注意机制被扩展以解决手写识别的使用情况。让我们来讨论一下这个领域的一些开创性研究。

在这项开创性的工作扫描、出席和阅读(SAR)中,作者提出了一种基于注意力的端到端手写识别模型的使用。这项研究的主要贡献是文本的自动转录,而不需要将文本分割成行作为预处理步骤,因此可以扫描整个页面并给出结果。

SAR使用基于MDLSTM的体系结构,类似于我们上面讨论的体系结构,但在最后一层做了一点小更改。在最后一个线性层(即上图中的最终求和块)之后,功能地图在垂直维度上折叠,并应用最终的Softmax函数来获得输出。

SAR体系结构由充当特征提取器的MDLSTM体系结构组成。具有Softmax输出和CTC丢失的最终折叠模块由注意模块和LSTM解码器取代。使用的注意力模型是基于内容的注意力和基于位置的注意力的混合组合,这将在下一篇文章中更详细地解释。解码器LSTM模块利用前一状态、前一关注图和编码器特征生成最终输出字符和状态向量,用于下一步预测。

提出了一种基于注意力的顺序到顺序的手写体单词识别模型。该体系结构由三个主要部分组成:由CNN和双向GRU组成的编码器,专注于相关特征的注意力机制,以及由单向GRU组成的能够逐字拼写相应单词的解码器。

编码器使用CNN来提取视觉特征。采用预先训练好的VGG-19-BN结构作为特征提取器。输入图像被转换为特征映射X,然后通过按列分割所有通道并将它们组合以获得顺序信息来将其重塑为X。X';通过使用双向GRU进一步转换为H。GRU是一种本质上类似于LSTM的神经网络,可以捕获时间信息。

此外,在预测来自解码器的输出时使用注意力模型。本文讨论了两种不同类型的注意机制。

基于内容的关注:这背后的想法是找出解码器当前隐藏状态和编码器的特征地图之间的相似性。我们可以在编码器的特征映射中找到相关性最强的特征向量,这些特征向量可以用来预测当前时间步长上的当前字符。从这里可以看到注意力机制如何工作的更多细节。

基于位置的关注:-基于内容的定位机制的主要缺点是有一个隐含的假设,即位置信息被嵌入到编码器的输出中。否则,无法区分从解码器重复的字符输出。例如,考虑一个单词Charmander,字符a在其中重复两次,如果没有位置信息,解码器将无法将它们作为单独的字符进行预测。为了缓解这个问题,当前字符和它的对齐是通过使用编码器输出和以前的对齐来预测的。更多关于基于位置的出席如何工作的详细信息可以在这里看到。

解码器为单向多层GRU。在每个时间点t,它接收来自前一时间点的输入和来自注意模块的上下文向量。在训练中探索了多项式译码和标签平滑,以提高泛化能力。

尽管编解码器网络在手写识别方面取得了相当好的效果,但由于涉及LSTM层,它们在训练中存在瓶颈,因此不能并行化。最近,转换器已经相当成功,并在解决各种与语言相关的任务方面取代了LSTM。现在让我们讨论一下如何将基于变压器的模型应用于手写识别。

在这项工作中,作者提出了在视觉和文本阶段使用多头注意自我注意层的基于转换器的结构,从而既可以学习字符识别,也可以学习要解码的字符序列的语言相关依赖关系。由于语言知识被嵌入到模型本身中,因此不需要使用语言模型的任何额外的后处理步骤,因此具有预测不是词汇表一部分的输出的能力。为了实现这一点,文本编码在字符级别而不是单词级别进行。由于变压器架构允许针对每个区域或字符并行训练模型,因此训练过程大大简化。

视觉编码器:-提取相关特征,并在不同字符位置应用多头视觉自我注意。

文本转录器:-它的任务是接受文本输入,对其进行编码,应用多头语言自我注意,并在视觉和文本特征上应用相互注意。

Resnet50主干用于额外的功能,如上图所示。从Resnet50FC输出的3维特征地图被传递到时间编码模块,该模块通过保持相同的宽度并因此重塑为2d的形状(f×h,w)。这被馈送到完全连接的层以将形状减小到(f,w),并且结果输出是fc';。此外,位置编码TE被添加到FC';以保留Vaswani在“变形金刚”论文中提到的位置信息。更多关于变压器架构是如何设计的信息可以在这里看到。输出经过完全连接的图层,以获得具有形状(f,w)的最终要素地图。最终输出经过8个头部的多头注意模块,得到视觉丰富的要素地图。

输入文本通过编码器,该编码器生成字符级嵌入。与使用时间编码器模块的视觉编码器中的方式类似,这些嵌入与时间位置相结合。然后将该结果传递给多头语言自我注意模块,该模块类似于视觉编码器中的注意模块。沿着视觉编码器的视觉特征生成的文本特征被传递给交互注意模块,该模块的任务是对齐和组合来自图像和文本输入的学习特征。输出通过Softmax函数传递以获得最终结果。

在对测试数据进行评估时,无法获得抄本。因此,只有开始令牌作为输入被传递,并且第一个预测字符被反馈给输出第二个预测字符的系统。在循环中重复该推断过程,直到产生序列码元的末尾或当达到最大输出长度N时。

手写文本生成是生成看起来真实的手写文本的任务,因此可以用来扩充现有的数据集。众所周知,深度学习需要大量的数据来训练,而获取不同语言的标记手写图像的海量语料库是一项繁琐的任务。为了解决这个问题,我们可以使用生成性对抗性网络来生成训练数据。让我们在这里讨论一种这样的架构。

SCrabbleGan遵循半监督的方法来合成风格和词汇都多种多样的手写文本图像。它具有生成不同长度的图像的能力。生成器还可以操作生成的文本样式,这允许我们决定文本是否必须是草书的,或者说应该是多粗/多细的笔画。

该体系结构由一个基于BigGAN的全卷积发生器组成。对于输入中的每个字符,选择相应的过滤器,并将所有值连接在一起,然后将其乘以控制生成的文本样式的噪声向量z。如上所述,为每个单独字符生成的区域重叠,从而有助于生成连接的递归文本,并允许不同字符大小的灵活性。例如,m占据了很大的空间,而e和t占据了有限的面积。为了使整个单词或句子保持相同的样式,所有字符的样式向量z保持不变。

采用基于BigGAN架构的卷积鉴别器对生成的图像风格进行真假分类。鉴别器不依赖于字符级注释,因此不基于类条件GAN。这样做的优点在于不需要带标签的数据,因此来自不属于训练数据一部分的不可见语料库的数据可以用于训练鉴别器。与鉴别器一起,文本识别器R被训练来分类生成的文本是否有现实世界的意义,或者它是否是胡言乱语。该识别器基于CRNN结构,去掉了递归头部,使识别器稍弱一些,即使文本不清楚也无法识别。将R的输出中生成的文本与提供给生成器的输入文本进行比较,并在损失函数中添加相应的惩罚。

IAM:-IAM数据集包含来自英语的大约100k个单词的图像,其中有657个不同的作者所写的单词。训练、测试和验证集包含由互斥作者编写的单词Link:-http://www.fki.inf.unibe.ch/databases/iam-handwriting-database。

Cvl:-cvl数据集由大约310名参与者手写的七个文档组成,产生了大约83k个单词的裁剪,分为训练集和测试集链接:-https://cvl.tuwien.ac.at/research/cvl-databases/an-off-line-database-for-writer-retrieval-writer-identification-and-word-spotting/。

RIMES:-包含约60k图像的法语单词,由1,300名作者撰写,对应于每个人撰写的约5封邮件。链接:-http://www.a2ialab.com/doku.php?id=rimes_database:start

字符错误率:-Levenshtein距离是将一个字符串转换为另一个字符串所需的字符替换(SC)、插入(IC)和删除(DC)的总和除以基本事实(NC)中的字符总数。

单词错误率:-如果是复合词。

.