当前位置: 首页 > 科技观察

微信OCR(二):深度序列学习助力文本识别

时间:2023-03-17 23:28:53 科技观察

本文属于微信OCR技术介绍系列,重点介绍如何利用深度序列学习的方法实现端到端的文本字符串识别,并将其应用到微信产品。这篇文章主要是方法概述,下篇文章重点介绍深度序列学习技术在微信产品中的实现。这里,文本字符串识别的默认输入是包含文本(行或词)的最小外接矩形框,其目的是识别其中的文本内容,如图1所示。对于前面的文本框检测和定位工作,详见我们之前的文章[1]。图1:文本字符串识别示例stagedvsend-to-end文本字符串识别作为目标识别的一个子领域,其本质是一个多类分类问题:旨在找到一个从文本字符串图像到文本字符串内容的映射,这类似于人脸识别和车辆识别。然而,作为序列目标,文本字符串有其独特的特点:1.局部性:即文本字符串的所有部分都直接反映在其整体标签中。举个例子:“我想吃”和“我不想吃”,词的区别体现在图像特征上,只是局部特征发生变化,而文本字符串的意思完全相反。在一般的物体识别问题中(细粒度物体识别除外),这种局部干扰正是要被抑制的。比如张三,还是戴墨镜的张三。2.组合:文本字符串的内容差异很大。以常用的英语单词为例,就有9万多个单词。汉字的组合就更复杂了。然而,无论是4万字的长文,还是简短的对话,都是由有限的字符组成:26个英文字母、10个数字、数千个汉字等等。基于以上两点,一种直观的字符串识别方法是:首先将字符分割成单个字符,识别字符的类别,然后将识别结果拼接起来。这种分块的方法是深度学习出现之前几十年OCR常用的方法,其过程如图2所示。图2:基于各种图像特征的分词但是,这种方法有两个明显的缺点:1、切分错误会影响识别性能;2.单词识别没有考虑上下文信息。为了弥补这两个缺陷,传统的方法往往需要对图像进行“过分割”,即找到所有可能切点的位置,然后将所有的切片和可能的切片组合发送到单词识别模块。在识别结果中间进行“动态规划”,寻找最优路径来确定分割和识别的结果。在优化过程中,往往需要结合字符的外观统计特征和语言模型(几个字符的共现概率)。可以看出,这里的分割、识别和后处理之间存在着深度耦合,导致实际系统中的字符串识别模块往往堆砌着非常复杂且可读性差的算法。而且,即便如此,传统方法仍然存在无法突破的性能瓶颈,如一些复杂的艺术字和手写字、粘连严重等。总而言之,传统方法的问题是过程繁琐冗长,导致错误不断传播,并且过于依赖人工规则,低估了大规模数据训练。图3:基于过分割和动态规划获取文本字符串内容。从2012年的ImageNet比赛开始,深度学习首先在图像识别领域大展拳脚。随着研究的深入,深度学习逐渐应用于音频、视频和自然语言理解等领域。这些领域的特点是对时间序列数据进行建模。如何利用深度学习进行端到端学习,摒弃基于人为规则的中间步骤,提高序列学习的效果成为当前的研究热点。基本思想是CNN和RNN的结合:CNN用来提取具有表征能力的图像特征,而RNN天生适合处理序列问题和学习上下文。这种CNN+RNN混合网络从本质上彻底改变了文本字符串识别领域的研究。CRNN:CNN+RNN+CTC图4:CRNN实现端到端的文本字符串识别CRNN是目前字符串识别领域非常成功的模型。在我们之前的文章[2]中也有介绍。模型前面的CNN部分按空间顺序对图像进行压缩,相当于沿水平方向形成若干个切片,每个切片对应一个特征向量。由于卷积感受野相互重叠,这些特征本身包含一定的上下文关系。在接下来的RNN部分,使用了一个二层双向LSTM来进一步学习上下文特征,从而得到切片对应的字符类别。最新的CTC层设计了结构化损失,通过引入空白类和映射规则来模拟动态规划的过程。CRNN在图像特征和识别内容序列之间严格保序,非常擅长识别难以分割的字符序列,甚至包括潦草的手写电话号码。此外,这种序列学习模型也大大降低了标注训练数据的难度,便于收集更大的训练数据。EDA:Encoder+Decoder+attentionmodel文本字符串识别另一种常用的网络模型是编码器-解码器模型(Encoder-Decoder),加入注意力模型(Attentionmodel)帮助特征对齐,故简称EDA.方法流程如图:图4:EDA实现端到端的文本字符串识别Encoder-Decoder模型从一开始就被提出来解决seq2seq问题。即根据一个输入序列x,生成另一个输出序列y。这里的encoding是将输入序列转化为定长向量;解码是将之前生成的固定向量转换为输出序列。Encoder-Decoder模型虽然很经典,但也有很大的局限性:编码和解码之间唯一的联系是一个固定长度的语义向量C。也就是说,编码器需要将整个序列的信息压缩成一个固定长度的向量。这种强压缩使得语义向量无法完整表示整个序列的信息,先输入的内容所携带的信息会被后输入的信息稀释。输入序列越长,这种现象越严重。Attention模型就是为解决这个问题而设计的:在生成当前输出的同时,还会生成一个“注意力范围”,表示下一次输出时要关注输入序列的哪些部分,然后根据区域生成下一个输出感兴趣的。如此来回。这样,解码不再依赖于中间向量,而是注意力模型对所有编码特征进行加权调整得到的特征向量。Attention模型实现了softalign的功能,同时使得输入向量和输出向量不再严格有序。这对文本字符串识别的影响后面会提到。值得一提的是,今年5月,谷歌发布了用于端到端自然场景文本识别的AttentionOCR方法。该方法基于EDA,将输入扩展到全图(如图5所示)。因此,该方法理论上可以实现任意包含文字的图片到文字内容的映射,不仅不需要文字分割,甚至连文字检测的步骤都不需要(是不是很酷)。该算法在法国街道名称标志(FSNS)数据集(包含约100w个街道名称的法国街道标志数据集)上实现了84.2%的准确率。图5:Google的AttentionOCR实现了端到端的文本检测和识别。从流程图可以看出,网络输入是从同一招牌的不同角度拍摄的四张图像,由Inception-V3网络(CNN的一种)处理。对图像进行编码形成featuremap,然后根据attention模型给定的权重对不同位置的特征进行加权,作为解码模型的输入。为了突出位置信息,这里使用locationawareattention,这是一种位置相关的attention模型。从文中给出的注意力模型的可视化结果可以看出,该模型确实可以在一定程度上预测文本出现的位置。该方法可以同时对语言和图像序列进行建模,能够适应大小和位置分布不均匀的文本排版。不需要标记文本框的位置,真正实现了端到端的文本检测和识别。在实践中,我们使用公开可用的FSNS数据集重现本文的结果。但是,也发现该方法存在一些局限性:1.由于注意力模型的软对齐机制,识别结果的字符内容可能出现乱序;2、由于RNN记忆功能的限制,不适合文字内容较多的图片;3.由于输入图像包含大量背景噪声,所以只有在文字内容和风格比较简单的情况下效果才可靠。本文主要总结深度序列学习在OCR中的应用,然后主要介绍此类技术在微信产品中的实现。原文链接:http://t.cn/R0w2hAP作者:马文华【本文为专栏作者《腾讯云技术社区》原创稿件,转载请联系原作者获得授权】点此查看更多精彩该作者的文章