深度学习在OCR中的应用

背景计算机视觉是利用摄像机和电脑代替人眼,使得计算机拥有类似于人类的对目标进行检测、识别、理解、跟踪、判别决策的功能。以美团业务为例,在商家上单、团单展示、消费评价等多个环节都会涉及计算机视觉的应用,包括文字识别、图片分类、目标检测和图像质量评价等方向。本文将通过以OCR(光学字符识别)的场景来介绍深度学习在计算机视觉中的应用。基于深度学习的OCR文字是不可或缺的视觉信息来源。

图1图像中的文字提取和识别流程OCR技术发展历程传统的OCR基于图像处理(二值化、连通域分析、投影分析等)和统计机器学习(Adaboost、SVM),过去20年间在印刷体和扫描文档上取得了不错的效果。传统的印刷体OCR解决方案整体流程如图2所示。

图2传统的印刷体OCR解决方案从输入图像到给出识别结果经历了图像预处理、文字行提取和文字行识别三个阶段。其中文字行提取的相关步骤(版面分析、行切分)会涉及大量的先验规则,而文字行识别主要基于传统的机器学习方法。随着移动设备的普及,对拍摄图像中的文字提取和识别成为主流需求,同时对场景中文字的识别需求越来越突出。因此,相比于印刷体场景,拍照文字的识别将面临以下三方面挑战:成像复杂。

图3基于自底向上的文字检测基于滑动窗口的方法。该类方法利用通用目标检测的思路来提取文字行信息,利用训练得到的文字行/词语/字符级别的分类器来进行全图搜索。原始的基于滑动窗口方法通过训练文字/背景二分类检测器,直接对输入图像进行多尺度的窗口扫描。检测器可以是传统机器学习模型(Adaboost、RandomFerns),也可以是深度卷积神经网络。

图4基于Maxout卷积神经网络结构的单字识别模型表1给出了卷积神经网络的特征学习和传统特征的性能比较,可以看出通过卷积神经网络学习得到的特征鉴别能力更强。

表1单字符识别引擎性能比较3.文字行识别流程传统OCR将文字行识别划分为字符切分和单字符识别两个独立的步骤,尽管通过训练基于卷积神经网络的单字符识别引擎可以有效提升字符识别率,但切分对于字符粘连、模糊和形变的情况的容错性较差,而且切分错误对于识别是不可修复的。因此在该框架下,文本行识别的准确率主要受限于字符切分。

图5基于CNN的动态切分与识别流程过切分模块将文字行在垂直于基线方向上分割成碎片,使得其中每个碎片至多包含一个字符。通常来说,过切分模块会将字符分割为多个连续笔划。过切分可以采用基于规则或机器学习的方法。规则方法主要是直接在图像二值化的结果上进行连通域分析和投影分析来确定候补切点位置,通过调整参数可以控制粒度来使得字符尽可能被切碎。基于规则的方法实现简单,但在成像/背景复杂的条件下其效果不好。

图6基于滑动窗口的文字检测序列学习起源于手写识别、语音识别领域,因为这类问题的共同特点是需要对时序数据进行建模。尽管文字行图像是二维的,但如果把从左到右的扫描动作类比为时序,文字行识别从本质上也可归为这类问题。通过端到端的学习,摒弃矫正/切分/字符识别等中间步骤,以此提升序列学习的效果,这已经成为当前研究的热点。

图7基于深度学习的OCR解决方案后面将分别介绍文字检测和文字行识别这两部分的具体方案。基于深度学习的文字检测对于美团的OCR场景,根据版面是否有先验信息(卡片的矩形区域、证件的关键字段标识)以及文字自身的复杂性(如水平文字、多角度),图像可划分为受控场景(如身份证、营业执照、银行卡)和非受控场景(如菜单、门头图),如图8所示。

图8受控场景与非受控场景考虑到这两类场景的特点不同,我们借鉴不同的检测框架。由于受控场景文字诸多约束条件可将问题简化,因此利用在通用目标检测领域广泛应用的FasterR-CNN框架进行检测。而对于非受控场景文字,由于形变和笔画宽度不一致等原因,目标轮廓不具备良好的闭合边界,我们需要借助图像语义分割来标记文字区域与背景区域。

图9基于FasterR-CNN的OCR解决方案FasterR-CNN框架由RPN(候选区域生成网络)和RCN(区域分类网络)两个子网络组成。RPN通过监督学习的方法提取候选区域,给出的是无标签的区域和粗定位结果。RCN引入类别概念,同时进行候选区域的分类和位置回归,给出精细定位结果。训练时两个子网络通过端到端的方式联合优化。图10以银行卡卡号识别为例,给出了RPN层和RCN层的输出。

图10基于FasterR-CNN的银行卡卡号检测对于人手持证件场景,由于证件目标在图像中所占比例过小,直接提取微小候选目标会导致一定的定位精度损失。为了保证高召回和高定位精度,可采用由粗到精的策略进行检测。首先定位卡片所在区域位置,然后在卡片区域范围内进行关键字检测,而区域定位也可采用FasterR-CNN框架,如图11所示。

图11由粗到精的检测策略非受控场景的文字检测对于菜单、门头图等非受控场景,由于文字行本身的多角度且字符的笔画宽度变化大,该场景下的文字行定位任务挑战很大。由于通用目标检测方法的定位粒度是回归框级,此方法适用于刚体这类有良好闭合边界的物体。然而文字往往由一系列松散的笔画构成,尤其对于任意方向或笔画宽度的文字,仅以回归框结果作为定位结果会有较大偏差。

图12基于全卷积网络的文字检测多尺度全卷积网络通过对多个阶段的反卷积结果的融合,实现了全局特征和局部特征的联合,进而达到了由粗到精的像素级别标注,适应于任意非受控场景(门头图、菜单图片)。基于多尺度全卷积网络得到的像素级标注,通过连通域分析技术可得到一系列连通区域(笔划信息)。但由于无法确定哪些连通域属于同一文字行,因此需要借助单链聚类技术来进行文字行提取。

图13基于全卷积网络的图像语义分割图14分别给出了在菜单和门头图场景中的全卷积网络定位效果。第二列为全卷积网络的像素级标注结果,第三列为最终文字检测结果。可以看出,全卷积网络可以较好地应对复杂版面或多角度文字定位。

图14基于FCN的文字定位结果基于序列学习的文字识别我们将整行文字识别问题归结为一个序列学习问题。利用基于双向长短期记忆神经网络(Bi-directionalLongShort-termMemory,BLSTM)的递归神经网络作为序列学习器,来有效建模序列内部关系。为了引入更有效的输入特征,我们采用卷积神经网络模型来进行特征提取,以描述图像的高层语义。

图15基于序列学习的端到端识别框架对于输入的固定高度h0=36的图像(宽度任意,如W0=248),我们通过CNN网络结构提取特征,得到9×62×128的特征图,可将其看作一个长度为62的时间序列输入到RNN层。RNN层有400个隐藏节点,其中每个隐藏节点的输入是9×128维的特征,是对图像局部区域的描述。

图16双向RNN序列双向RNN后接一个全连接层,输入为RNN层(在某个时刻)输出的特征图,输出为该位置是背景、字符表中文字的概率。全连接层后接CTC(联结主义时间分类器)作为损失函数。在训练时,根据每个时刻对应的文字、背景概率分布,得到真值字符串在图像中出现的概率P(groundtruth),将-log(P(groundtruth))作为损失函数。

图17CTC解码过程从图17中也可以看出,对应输入序列中的每个字符,LSTM输出层都会产生明显的尖峰,尽管该尖峰未必对应字符的中心位置。换句话说,引入CTC机制后,我们不需要考虑每个字符出现的具体位置,只需关注整个图像序列对应的文字内容,最终实现深度学习的端到端训练与预测。由于序列学习框架对训练样本的数量和分布要求较高,我们采用了真实样本+合成样本的方式。

图18文字行识别结果基于上述试验,与传统OCR相比,我们在多种场景的文字识别上都有较大幅度的性能提升,如图19所示。

图19传统OCR和深度学习OCR性能比较与传统OCR相比,基于深度学习的OCR在识别率方面有了大幅上升。但对于特定的应用场景(营业执照、菜单、银行卡等),条目准确率还有待提升。一方面需要融合基于深度学习的文字检测与传统版面分析技术,以进一步提升限制场景下的检测性能。另一方面需要丰富真实训练样本和语言模型,以提升文字识别准确率。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180915A05FQO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券