低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

深度学习在 OCR 中的应用

2020 年 2 月 27 日

深度学习在OCR中的应用

背景

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


基于深度学习的 OCR

文字是不可或缺的视觉信息来源。相对于图像/视频中的其他内容,文字往往包含更强的语义信息,因此对图像中的文字提取和识别具有重大意义。OCR 在美团业务中主要起着两方面作用。一方面是辅助录入,比如在移动支付环节通过对银行卡卡号的拍照识别以实现自动绑卡,辅助运营录入菜单中菜品信息,在配送环节通过对商家小票的识别以实现调度核单,如图 1 所示。另一方面是审核校验,比如在商家资质审核环节对商家上传的身份证、营业执照和餐饮许可证等证件照片进行信息提取和核验以确保该商家的合法性,机器过滤商家上单和用户评价环节产生的包含违禁词的图片。



图 1 图像中的文字提取和识别流程


OCR 技术发展历程

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



图 2 传统的印刷体 OCR 解决方案


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


  • 成像复杂。噪声、模糊、光线变化、形变。

  • 文字复杂。字体、字号、色彩、磨损、笔画宽度任意、方向任意。

  • 场景复杂。版面缺失、背景干扰。


对于上述挑战,传统的 OCR 解决方案存在着以下不足:


  • 通过版面分析(连通域分析)和行切分(投影分析)来生成文本行,要求版面结构有较强的规则性且前背景可分性强(例如黑白文档图像、车牌),无法处理前背景复杂的随意文字(例如场景文字、菜单、广告文字等)。另外,二值化操作本身对图像成像条件和背景要求比较苛刻。

  • 通过人工设计边缘方向特征(例如方向梯度直方图)来训练字符识别模型,在字体变化、模糊或背景干扰时,此类单一的特征的泛化能力迅速下降。

  • 过度依赖于字符切分的结果,在字符扭曲、粘连、噪声干扰的情况下,切分的错误传播尤其突出。

  • 尽管图像预处理模块可有效改善输入图像的质量,但多个独立的校正模块的串联必然带来误差传递。另外由于各模块优化目标独立,它们无法融合到统一的框架中进行。


为了解决上述问题,现有技术在以下三方面进行了改进。


1. 文字行提取


传统 OCR(如图 3 所示)采取自上而下的切分式,但它只适用于版面规则背景简单的情况。该领域还有另外两类思路。


  • 自底向上的生成式方法。该类方法通过连通域分析或最大稳定极值区域(MSER)等方法提取候选区域,然后通过文字/非文字的分类器进行区域筛选,对筛选后的区域进行合并生成文字行,再进行文字行级别的过滤,如图 3 所示。该类方法的不足是,一方面流程冗长导致的超参数过多,另一方面无法利用全局信息。



图 3 基于自底向上的文字检测


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


为了提升效率,DeepText、TextBoxes 等方法先提取候选区域再进行区域回归和分类,同时该类方法可进行端到端训练,但对多角度和极端宽高比的文字区域召回低。


2. 传统单字识别引擎→基于深度学习的单字识别引擎


由于单字识别引擎的训练是一个典型的图像分类问题,而卷积神经网络在描述图像的高层语义方面优势明显,所以主流方法是基于卷积神经网络的图像分类模型。实践中的关键点在于如何设计网络结构和合成训练数据。对于网络结构,我们可以借鉴手写识别领域相关网络结构,也可采用 OCR 领域取得出色效果的 Maxout 网络结构,如图 4 所示。对于数据合成,需考虑字体、形变、模糊、噪声、背景变化等因素。



图 4 基于 Maxout 卷积神经网络结构的单字识别模型


表 1 给出了卷积神经网络的特征学习和传统特征的性能比较,可以看出通过卷积神经网络学习得到的特征鉴别能力更强。



表 1 单字符识别引擎性能比较


3. 文字行识别流程


传统 OCR 将文字行识别划分为字符切分和单字符识别两个独立的步骤,尽管通过训练基于卷积神经网络的单字符识别引擎可以有效提升字符识别率,但切分对于字符粘连、模糊和形变的情况的容错性较差,而且切分错误对于识别是不可修复的。因此在该框架下,文本行识别的准确率主要受限于字符切分。假设已训练单字符识别引擎的准确率 p=99%,字符切分准确率为 q= 95%,则对于一段长度为 L 的文字行,其识别的平均准确率为 P= (pq)的 L 次方,其中 L=10 时,P=54.1%。


由于独立优化字符切分提升空间有限,因此有相关方法试图联合优化切分和识别两个任务。现有技术主要可分为基于切分的方法(Segmentation-Based)和不依赖切分的方法(Segmentation-


Free)两类方法。


基于切分的方法


该类方法还是保留主动切分的步骤,但引入了动态合并机制,通过识别置信度等信息来指导切分,如图 5 所示。



图 5 基于 CNN 的动态切分与识别流程


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


动态合并模块将相邻的笔划根据识别结果组合成可能的字符区域,最优组合方式即对应最佳切分路径和识别结果。直观来看,寻找最优组合方式可转换为路径搜索问题,对应有深度优先和广度优先两种搜索策略。深度优先策略在每一步选择扩展当前最优的状态,因此全局来看它是次优策略,不适合过长的文字行。广度优先策略在每一步会对当前多个状态同时进行扩展,比如在语音识别领域广泛应用的 Viterbi 解码和 Beam Search。但考虑到性能,Beam Search 通常会引入剪枝操作来控制路径长度,剪枝策略包含限制扩展的状态数(比如,每一步只扩展 TopN 的状态)和加入状态约束(比如,合并后字符形状)等。


由于动态合并会产生多个候选路径,所以需要设计合适的评价函数来进行路径选择。评价函数的设计主要从路径结构损失和路径识别打分两方面出发。路径结构损失主要从字符形状特征方面衡量切分路径的合理性,路径识别打分则对应于特定切分路径下的单字平均识别置信度和语言模型分。


该方案试图将字符切分和单字符识别融合在同一个框架下解决,但由于过分割是独立的步骤,因此没有从本质上实现端到端学习。


不依赖切分的方法


该类方法完全跨越了字符切分,通过滑动窗口或序列建模直接对文字行进行识别。


滑窗识别借鉴了滑动窗口检测的思路,基于离线训练的单字识别引擎,对文字行图像从左到右进行多尺度扫描,以特定窗口为中心进行识别。在路径决策上可采用贪心策略或非极大值抑制(NMS)策略来得到最终的识别路径。图 6 给出了滑窗识别的示意流程。可见滑窗识别存在两个问题:滑动步长的粒度过细则计算代价大,过粗则上下文信息易丢失;无论采用何种路径决策方案,它们对单字识别的置信度依赖较高。



图 6 基于滑动窗口的文字检测


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


基于现有技术和美团业务涉及的 OCR 场景,我们在文字检测和文字行识别采用如图 7 所示的深度学习框架。



图 7 基于深度学习的 OCR 解决方案


后面将分别介绍文字检测和文字行识别这两部分的具体方案。


基于深度学习的文字检测

对于美团的 OCR 场景,根据版面是否有先验信息(卡片的矩形区域、证件的关键字段标识)以及文字自身的复杂性(如水平文字、多角度),图像可划分为受控场景(如身份证、营业执照、银行卡)和非受控场景(如菜单、门头图),如图 8 所示。



图 8 受控场景与非受控场景


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


1. 受控场景的文字检测


对于受控场景(如身份证),我们将文字检测转换为对关键字目标(如姓名、身份证号、地址)或关键条目(如银行卡号)的检测问题。基于 Faster R-CNN 的关键字检测流程如图 9 所示。为了保证回归框的定位精度,同时提升运算速度,我们对原有框架和训练方式进行了微调。


  • 考虑到关键字或关键条目的类内变化有限,网络结构只采用了 3 个卷积层。

  • 训练过程中提高正样本的重叠率阈值。

  • 根据关键字或关键条目的宽高比范围来适配 RPN 层 Anchor 的宽高比。



图 9 基于 Faster R-CNN 的 OCR 解决方案


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



图 10 基于 Faster R-CNN 的银行卡卡号检测


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



图 11 由粗到精的检测策略


2. 非受控场景的文字检测


对于菜单、门头图等非受控场景,由于文字行本身的多角度且字符的笔画宽度变化大,该场景下的文字行定位任务挑战很大。由于通用目标检测方法的定位粒度是回归框级,此方法适用于刚体这类有良好闭合边界的物体。然而文字往往由一系列松散的笔画构成,尤其对于任意方向或笔画宽度的文字,仅以回归框结果作为定位结果会有较大偏差。另外刚体检测的要求相对较低,即便只定位到部分主体(如定位结果与真值的重叠率是 50%),也不会对刚体识别产生重大影响,而这样的定位误差对于文字识别则很可能是致命的。


为了实现足够精细的定位,我们利用语义分割中常用的全卷积网络(FCN)来进行像素级别的文字/背景标注,整体流程如图 12 所示。



图 12 基于全卷积网络的文字检测


多尺度全卷积网络通过对多个阶段的反卷积结果的融合,实现了全局特征和局部特征的联合,进而达到了由粗到精的像素级别标注,适应于任意非受控场景(门头图、菜单图片)。


基于多尺度全卷积网络得到的像素级标注,通过连通域分析技术可得到一系列连通区域(笔划信息)。但由于无法确定哪些连通域属于同一文字行,因此需要借助单链聚类技术来进行文字行提取。至于聚类涉及的距离度量,主要从连通域间的距离、形状、颜色的相似度等方面提取特征,并通过度量学习自适应地得到特征权重和阈值,如图 13 所示。



图 13 基于全卷积网络的图像语义分割


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



图 14 基于 FCN 的文字定位结果


基于序列学习的文字识别

我们将整行文字识别问题归结为一个序列学习问题。利用基于双向长短期记忆神经网络(Bi-directional Long Short-term Memory,BLSTM)的递归神经网络作为序列学习器,来有效建模序列内部关系。为了引入更有效的输入特征,我们采用卷积神经网络模型来进行特征提取,以描述图像的高层语义。此外在损失函数的设计方面,考虑到输出序列与输入特征帧序列无法对齐,我们直接使用结构化的 Loss(序列对序列的损失),另外引入了背景(Blank)类别以吸收相邻字符的混淆性。


整体网络结构分为三层:卷积层、递归层和翻译层,如图 15 所示。其中卷积层提取特征;递归层既学习特征序列中字符特征的先后关系,又学习字符的先后关系;翻译层实现对时间序列分类结果的解码。



图 15 基于序列学习的端到端识别框架


对于输入的固定高度 h0= 36 的图像(宽度任意,如 W0 = 248),我们通过 CNN 网络结构提取特征,得到 9×62×128 的特征图,可将其看作一个长度为 62 的时间序列输入到 RNN 层。RNN 层有 400 个隐藏节点,其中每个隐藏节点的输入是 9×128 维的特征,是对图像局部区域的描述。考虑到对应于某个时刻特征的图像区域,它与其前后内容都具有较强的相关性,所以我们一般采用双向 RNN 网络,如图 16 所示。



图 16 双向 RNN 序列


双向 RNN 后接一个全连接层,输入为 RNN 层(在某个时刻)输出的特征图,输出为该位置是背景、字符表中文字的概率。全连接层后接 CTC(联结主义时间分类器)作为损失函数。在训练时,根据每个时刻对应的文字、背景概率分布,得到真值字符串在图像中出现的概率 P(ground truth),将-log(P(ground truth))作为损失函数。在测试时,CTC 可以看作一个解码器,将每一时刻的预测结果(当前时刻的最大后验概率对应的字符)联合起来,然后去掉空白和重复的模式,就形成了最终的序列预测结果,如图 17 所示。



图 17 CTC 解码过程


从图 17 中也可以看出,对应输入序列中的每个字符,LSTM 输出层都会产生明显的尖峰,尽管该尖峰未必对应字符的中心位置。换句话说,引入 CTC 机制后,我们不需要考虑每个字符出现的具体位置,只需关注整个图像序列对应的文字内容,最终实现深度学习的端到端训练与预测。


由于序列学习框架对训练样本的数量和分布要求较高,我们采用了真实样本+合成样本的方式。真实样本以美团业务来源(例如,菜单、身份证、营业执照)为主,合成样本则考虑了字体、形变、模糊、噪声、背景等因素。


基于上述序列学习框架,我们给出了在不同场景下的文字行识别结果,如图 18 所示。其中前两行的图片为验证码场景,第三行为银行卡,第四行为资质证件,第五行为门头图,第六行为菜单。可以看到,识别模型对于文字形变、粘连、成像的模糊和光线变化、背景的复杂等都有较好的健壮性。



图 18 文字行识别结果


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



图 19 传统 OCR 和深度学习 OCR 性能比较


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


参考文献

  • [1]H. Chen, S. S. Tsai, G. Schroth, D. M. Chen, R. Grzeszczuk, and B. Girod. “Robust text detection in natural images with edge-enhanced maximally stable extremal regions.” ICIP 2011.

  • [2]Z Zhong,LJin,SZhang,ZFeng.“DeepText: A Unified Framework for Text Proposal Generation and Text Detection in Natural Images”. Architecture Science 2015.

  • [3]Minghui Liao, Baoguang Shi, Xiang Bai, Xinggang Wang, Wenyu Liu. “TextBoxes: A Fast Text Detector with a Single Deep Neural Network”. AAAI 2017.

  • [4]S. Ren, K. He, R. Girshick, and J. Sun. Faster r-cnn.“Towards real-time object detection with region proposal networks.” NIPS 2015.

  • [5]Graves, A.; Fernandez, S.; Gomez, F.; and Schmidhuber, J. “Connectionist temporal classification: Labelling unsegmented sequence data with recurrent neural networks.” ICML 2006.

  • [6]R Girshick,JDonahue,TDarrell,JMalik. “Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation.” CVPR 2014.

  • [7]J. Redmon, S. Divvala, R. Girshick, and A. Farhadi. “You only look once: Unified, real-time object detection”. CVPR 2016.

  • [8]W. Liu, D. Anguelov, D. Erhan, C. Szegedy, and S. Reed. “SSD: Single shot multibox detector”. ECCV 2016.

  • [9]“Object detection with discriminatively trained part-based models”. TPAMI 2010.

  • [10]Robust Real-time Object Detection. Paul Viola, Michael Jones. IJCV 2004.

  • [11]N. Markus, M. Frljak, I. S. Pandzic, J. Ahlberg and R. Forchheimer. “Object Detection with Pixel Intensity Comparisons Organized in Decision Trees”. CoRR 2014.

  • [12]Shengcai Liao, Anil K. Jain, and Stan Z. Li. “A Fast and Accurate Unconstrained Face Detector,” TPAMI 2015.

  • [13]Dong Chen, ShaoQingRen, Jian Sun. “Joint Cascade Face Detection and Alignment”, ECCV 2014.

  • [14]Haoxiang Li, Zhe Lin, XiaohuiShen, Jonathan Brandt, Gang Hua. “A convolutional neural network cascade for face detection”, CVPR.2015.

  • [15]Lichao Huang, Yi Yang, Yafeng Deng, Yinan Yu.“DenseBox: Unifying Landmark Localization with End to End Object Detection” CVPR 2015.

  • [16]Taigman Y, Yang M, Ranzato M A, et al. Deepface: Closing the gap to human-level performance in face verification.CVPR 2014.

  • [17]Sun Y, Wang X, Tang X. Deep learning face representation from predicting 10,000 classes.CVPR 2014.

  • [18]Sun Y, Chen Y, Wang X, et al. Deep learning face representation by joint identification-verification.NIPS. 2014.

  • [19] FaceNet: A Unified Embedding for Face Recognition and Clustering. CVPR 2015.

  • [20] A Discriminative Feature Learning Approach for Deep Face Recognition. ECCV 2016.

  • [21] Rethinking the Inception Architecture for Computer Vision. CVPR 2016.

  • [22] Alex Krizhevsky, IlyaSutskever, Geoffrey E. Hinton. “ImageNet Classification with Deep Convolutional Neural Networks”. 2014.

  • [23] Murray, N., Marchesotti, L., Perronnin, F. “Ava: A large-scale database for aesthetic visual analysis”. CVPR 2012.


2020 年 2 月 27 日 11:13260

评论

发布
暂无评论
发现更多内容

聪明人的训练(十二)

Changing Lin

4月日更

爆肝!华为安全专家连夜整理出全套网络安全学习书籍(小白必看)

Machine Gun

网络安全 信息安全 就业 WEB安全 行业趋势

好运转购物商城

飞亚科技

如何将区块链打造为城市底层基础设施

CECBC区块链专委会

区块链

Hadoop的发展及其架构

五分钟学大数据

hadoop 4月日更

OSI七层模型

赖猫

TCP 后台开发 后端 网络编程 网络协议

快速定制OCR识别模型好帮手:百度EasyDL OCR自训练平台上线啦!

百度大脑

EasyDL-OCR

博客站的架构渐进升级优化,亿级日写量架构又是什么样呢?

读字节

MySQL 大数据 分布式 软件架构设计 架构·

TimSort — 以人命名的排序法

Redis单线程已经很快,为何6.0要引入多线程?有啥优势?

Java架构师迁哥

攻击区块链网络的都有哪些方式方法

CECBC区块链专委会

区块链

思维导图学《Java性能权威指南》

Yano

Java 性能 思维导图

干货来袭!阿里技术官甩出的内部首推分布式系统开发笔记太顶了

Java王路飞

Java 程序员 架构 面试 分布式

最新面经出炉:双非一本学历裸辞奋战4个月,从外包跳进字节,给到29k*14薪!

程序员小毕

Java spring 程序员 架构 面试

回归主流:区块链新大门的“密钥”

CECBC区块链专委会

区块链

情指勤指挥调度平台搭建,公安重点人员管控平台搭建

13823153121

实时 OLAP, 从 0 到 1

Apache Flink

flink OLAP 区块链技术

26天吃透算法笔记,面试字节,面试官朝我比了个“ok”

比伯

Java 编程 架构 算法 技术宅

混音新手必备软件:FL Studio,用它简单制作混音

奈奈的杂社

视频云全球创新挑战赛 —— 视频目标分割经典算法解析

阿里云视频云

阿里云 计算机视觉

Javacv 音视频小工具 - 下载抖音视频

张音乐

Java 音视频 ffmpeg 抖音 javacv

积极研发区块链技术落地应用业务 这家A股上市企业试水云算力挖矿

CECBC区块链专委会

区块链

用 JavaScript 实现三次贝塞尔动画库 - 前端组件化

三钻

JavaScript 动画 组件化 前端进阶

融云音视频产品免费 20 万分钟 助力通信场景全搭建

融云 RongCloud

数据中台在企业数字化转型中的践行(上篇)

EAWorld

SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践

阿里巴巴云原生

Java 运维 云原生 中间件 Arthas

专业开发者眼中的HarmonyOS:专访资深软件工程师李宁

Geek_283163

华为

跟着源码学IM(八):万字长文,手把手教你用Netty打造IM聊天

JackJiang

Netty 即时通讯 IM

字节三面:对于Spring你了解多少?如果你会了这150道题 ,吊打面试官岂不是洒洒水?

北游学Java

Java spring Spring Framework spring Boot Starter spring cloud alibaba

交易所跟单软件搭建,合约跟单系统开发

13823153121

BERT和GAN咋压缩,且看咱PaddleSlim新利器—— OFA

百度大脑

百度 飞桨

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

深度学习在OCR中的应用-InfoQ