摘要: 该文章先介绍常见的文字识别方法,然后介绍YunOS在场景文字识别方面取得的进展、结果和技术方案。将重点讲解技术方案的两个主要部分:1)基于全卷积网络的从局部到整体的文字行检测方法;2)基于BLSTM-CTC-Seq2Seq的文字行识别方案。

1 概述

随着深度学习技术的发展,尤其是卷积神经网络(Convolutional Neural Networks,CNN)和循环神经网络(Recurrent Neural Networks,RNN)的发展,文字识别(Optical Character Recognition,OCR)和场景文字识别(Scene Text Recognition,STR)在近年来有了飞速的发展。文字识别主要分为两步:文字检测和文字识别。其中,文字检测主要有基于笔划特征的方法(Stroke Width Transform,SWT)、基于稳定区域(Maximally Stable Extremal Region,MSER)的方法和基于全卷积网络(Fully Convolutional Networks,FCN)的方法。而文字识别则主要分为基于字符/单词分类的方法和基于序列的识别方法。

与传统的OCR服务不同,YunOS更关注用户照片中的内容,即自然场景中的文字识别技术。因此,我们的技术方案更关注训练样本的多样性和基础分类模型的性能,较少地考虑文档的先验结构。

下面先简要介绍已有方法,然后介绍我们的方法和接入方式。

2 现有方法

2.1 文字检测

如上所述,文字检测方法主要分为三类:基于笔划特征、基于稳定区域和基于卷积网络。代表性方法如下。

1)Stroke Width Transform,SWT [1]

SWT假设每个字符的笔划宽度是大致相同的,因此从一个Canny边缘点沿梯度方向出发,如果能够找到梯度方向相反的边缘点,则认为该笔划宽度有效。检测完所有边缘点后,基于笔划宽度过滤,即可得到文字置信度。其过程如下图1和图2所示。该方法简单有效,但在自然场景中会导致很多虚警。这些虚警通常出现在类似文字的区域,如:条环、窗户、砖块和网格等。

 
图1 - 文字的局部梯度方向

图2 -SWT算法的过程
 

2)Maximally Stable Extremal Region,MSER [2-3]

MSER首先提取图像中最大稳定极值区域的作为候选,然后通过分类器滤除不合法的候选区域,最后将过滤后的候选区域,通过一系列的后处理和连接规则组合为文本行。该算法利用的先验知识较少,对语种、文字的角度就较为鲁棒。但与SWT类似,其在复杂背景下容易产生虚警,影响后续步骤。

图3 - 基于最大稳定极值区域MSER的文字检测

3)基于文字分类CNN和连通域分析的方法[4-5]

该方案是将图像输入“文字分类CNN”,得到对应的文字置信度图,然后使用连通域分析计算文字行。该方案中的CNN基于文字正负样本训练而成,须要切图、负样本采样等步骤,效率较低,其性能易受正负样本的多样性影响。


图4 - 基于文字分类CNN和连通域分析的方法

4)基于FCN的方法 [6-9]

该方案将检测问题看作一种广义的“分割问题”,避免了3)中的正负样本准备步骤,以end-to-end的方式预测文字区域mask(如图6和图7所示)。在mask的基础上进行坐标回归、字符切分、行分析等操作,从而得到最终的文字行坐标。该方案对尺度、方向、复杂背景的鲁棒性均较强,目前已成为文字检测的主流方法。


图5 - 近似横排文字的检测效果

图6 - 任意角度文字的检测效果

5)基于FCN和RNN的联合方法

在FCN的基础上,[10]将RNN引入到文字检测任务中,以获取更大的横向感受野(Receptive Field)。结果表明,该方法对于水平文字效果非常好,但其较难推广到任意角度。


图7 - 基于CNN和RNN的联合方法

2.2 文字识别

文字识别方法主要分为三类:基于浅层模型的字符识别、基于深度网络的字符/单词识别、序列识别。代表性方法如下。

1)基于浅层模型的字符识别方法

将文字行按字符切割后,文字识别即可看作字符分类问题。通常的做法是,提取字符的描述特征,然后使用分类器进行分类。常采用的文字特征有局部矩、HOG、SIFT等[11-12]。在[13]中Shi等人提出一种基于DPM(Deformable Part Model)的文字表达方法。DPM可适应字体变化,对噪声、模糊等因素较为鲁棒。


图8 - 数字和英文字母的DPM样例

2)基于深度网络的字符/单词识别方法

用深度网络代替传统的人工特征,即可大幅提升识别率。第一种做法与传统方法类似,采用CNN对字符进行分类(如图9),另一种则对单词进行分类(如图10)。字符分类网络的训练相对容易,但由于完全不考虑语义信息,其准确率相对较低。

CNN强大的表达能力使得“单词级”的分类成为可能,其类别数普遍较大,如:英文9万。[14]使用此暴力方法在英文识别任务上取得了当时最好的结果。此类方法主要存在两处不足:a)其依赖预先定义的词典,不能识别字典外单词(Out-of-Vocabulary Problem);b)对于过长的单词,输入图像的形变往往较大,会影响识别率。


图9 - 中、英、数混合字符识别网络

图10 - 英文单词识别网络

3)基于序列的文字识别方法

此外,字符和单词识别方法的性能严重依赖于文本切分的精度。针对此问题,基于序列的文字识别方法应运而生。此类方法与语音识别方法非常相似,其将文字行看作一个整体,不做切分,直接批量或增量识别出其中的字符序列。这种方法能够更充分地利用文字序列上下文关联进行消歧,避免字符误分割造成的不可逆错误。在此框架下,训练集的准备也更加简单,只需标注整行对应的文字内容,无需标注每个字符的具体位置。

文字行识别主要有两种结构,其一是CNN+LSTM+CTC结构[15-16](见图11),其二是CNN+LSTM+Seq2Seq [17](见图12)。这两种方法的主体是一致的,首先采用CNN学习图像相邻像素之间的关系,然后采用双向长短期记忆神经网络(Bidirectional Long Short-Term Memory,BLSTM)学习较长跨度的上下文关系(感受野为整行)。最后分别采用CTC(Connectionist Temporal Classification)和Seq2Seq作为目标函数优化整个网络的参数。


图11 - 基于CNN+LSTM+CTC的英文单词识别

图12 – 基于CNN +LSTM+Seq2Seq的英文单词识别

3 技术方案

我们的方案沿用了当前的主流方法,分为三步:训练数据合成、文字行检测和文字行识别,其流程如图13所示。下面将展开介绍检测和识别步骤的细节和特点,训练数据的合成将在其中穿插介绍。


图13 - 技术方案流程

3.1 检测步骤

3.1.1 训练数据生成

深度网络的性能强依赖于大规模和多样化的数据,而文字数据的人工标注成本往往较高(约为0.1元/文本框),此外也存在标注速度问题(125个/每小时)。为节约成本和提升效率,我们采取了“以合成数据为主,人工标注数据为辅”的策略。

合成流程与[18]基本一致,步骤如下:

  • 准备大量不含文字的背景图像
  • 准备丰富多样的各类字体
  • 准备的丰富的文本语料,按行组织
  • 对背景图片做区域分割和深度估计
  • 随机选取背景图、字体、区域等参数,将随机选取的文本行渲染到背景图上
  • 在渲染过程中,记录每个文本框的坐标

整个过程自动进行,在数天内我们合成了超过50W的训练样本。样例如图14所示,可看出合成样本较为接近真实场景,为网络训练打下了较好的基础。


图14 - 合成的文字检测训练数据

3.1.2 网络训练

如前所述,FCN是目前主流的文字检测方法。而另一种非常流行的物体检测方法Faster-RCNN在文字检测中的效果却不尽如人意,其主要原因是:文字的形状往往为长条状,不太适合采用感受野(Receptive Field)比例接近1:1的网络结构。

若网络的感受野太小,则难以检测较长的文字(图15绿色框),若扩大感受野,则在短边方向存在较大浪费,较难区分多行文字(图15红色框)。由于无法预知文字方向,构造长方形感受野的方案也不太可行。对于英文单词,其长宽比一般在可接受范围内(如:从1:5到5:1),此矛盾不会凸显。而对于中文或中英混排文字行,如何有效地检测带状物体是提升性能的关键。


图15 - 感受野与分辨率之间的矛盾

为解决此问题,我们于2016年10月提出了采用“FCN局部文字块检测”和“几何约束下的行生成”来检测任意长度文字行的方案(如图16所示)。该方案主要思想是:将文字行切分为局部方形框,使用FCN检测其擅长的方形文字块,同时预测每个文字块与近邻间的连接关系。


图16 - 文字行检测过程

FCN前部是普通的卷积、Pooling等层,后部分为三支,分别输出:文字置信度、局部文字框坐标、局部角度。置信度采用二分类交叉熵作为目标函数,坐标采用L2或L1距离作为目标函数,角度采用相关性(或Cosine相似度)作为目标函数。整体目标函数由上述三项加权得到。

在测试阶段,首先根据置信度筛选出少量候选文字块(数百个);然后根据候选块之间的相互几何关系构建图(Graph),几何关系可包括:距离、相对大小、角度一致性等;最后对图进行分割,可采用最简单的连通子图方法,也可采用GraphCut等复杂方法。

图17和图18详细展示了经过该方案中的中间结果和最终检测结果。


图17 - 检测的中间和最终结果


图18 - 检测的中间和最终结果

该方案的不足在于,其将检测过程拆分为独立的两步:局部检测和合并,而两步之间鸿沟会导致误差累积。虽然网络输出的方向信息为合并操作提供了重要的线索,若我们能将两步有机地串连起来,相信会带来较大的性能提升。此外,从上图中可以看出FCN输出的文字置信度有棋盘格效应,这种效应一般由反卷积(或称为Transposed Convolution)操作导致[19],通过某些平滑技巧即可避免,可能对性能有一定帮助。

值得注意的是,近期学术界也开始采用类似的方法[8, 20]来检测场景文字,并取得了较好的结果。这类从局部到整体的检测方法在人体姿态估计问题中也有成功的应用[21]。

3.2 识别步骤

3.2.1 训练数据生成

与文字检测类似,在识别步骤中我们仍采用“以合成数据为主,人工标注数据为辅”的策略。对于识别任务,各类样本的均衡性非常重要,但各字符在真实语料或图象中的分布却非常不均匀,往往为长尾分布(如图19所示)。采用自然数据训练的模型,常用字准确率一般较高,而长尾字准确率偏低。为提升长尾字的准确率,合成几乎是唯一可行的方案。


图19 - 中、英等字符呈典型的长尾分布

我们采用与3.1.1类似的步骤合成文字行,其中包含汉字、字母、标点、数字等6803类字符,加入了模糊、倾斜、透视、拉伸、阴影、描边、加框、随机噪声等变化,最终合成约500W张文字行图片。在合成过程中,通过对语料进行采样,可以获得几乎呈均匀分布的训练样本。样例如图20所示。


图20 - 合成的文字行识别训练数据

3.2.2 网络训练

如前所述,基于序列的文字行识别方法是当前主流,在自然场景下具有最好的性能。目标函数一般分为CTC和Seq2Seq两种,CTC的优点是收敛速度快,Seq2Seq收敛速度慢但其精度一般高于CTC。我们参考了近期MERL在语音识别中采用的方式[22],将CTC和Seq2Seq结合起来,并引入Attention机制。

整体网络结构如图21所示,其中Encoder部分由CNN和BLSTM组成负责将图像转换为抽象的特征表达,Decoder部分负责从特征中解码字符。Decoder分为两支,CTC分支一边配准一边计算特征与Label之间的损失,Seq2Seq分支利用Attention机制关注特征的某些局部,并按时序解码字符。实验证明,联合训练方案的精度确实更优,且收敛速度与CTC相当。


图21 - Joint CTC+Seq2Seq (with Attention)

3.3 ICDAR RRC 2015

为验证方案的有效性,我们于2016年11月在ICDAR RRC 2015 [23]的三个场景下测试并提交了英文模块的性能,在当时取得了一项排名第一,二项排名第二。结果如图22所示。


图22 - 在ICDAR RRC 2015 Generic协议下的结果(时间:2016年11月)

当然,现有服务还存在诸多不足,我们正在持续改进。

  • 竖行文字检测精度不够理想
  • 竖行文字识别模块缺失
  • 暂不支持“空格”,会导致英文单词粘连

另外,相应离线版本也在开发中,预计2017年7月底会有初步成果,相关内容会单独介绍

参考文献

[1] Epshtein, Boris, Eyal Ofek, and Yonatan Wexler. "Detecting text in natural scenes with stroke width transform." Computer Vision and Pattern Recognition (CVPR), 2010 IEEE Conference on. IEEE, 2010.

[2] Neumann, Lukas, and Jiri Matas. "A method for text localization and recognition in real-world images." Computer Vision–ACCV 2010 (2011): 770-783.

[3] Neumann, Lukáš, and Jiří Matas. "Real-time scene text localization and recognition." Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012.

[4] Jaderberg, Max, et al. "Reading text in the wild with convolutional neural networks." International Journal of Computer Vision 116.1 (2016): 1-20.

[5] Jaderberg, Max, Andrea Vedaldi, and Andrew Zisserman. "Deep features for text spotting." European conference on computer vision. Springer International Publishing, 2014.

[6] Zhang, Zheng, et al. "Multi-oriented text detection with fully convolutional networks." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

[7] Yao, Cong, et al. "Scene Text Detection via Holistic, Multi-Channel Prediction." arXiv preprint arXiv:1606.09002 (2016).

[8] Zhou, Xinyu, et al. "EAST: An Efficient and Accurate Scene Text Detector." arXiv preprint arXiv:1704.03155 (2017).

[9] Moysset, Bastien, Christopher Kermorvant, and Christian Wolf. "Full-Page Text Recognition: Learning Where to Start and When to Stop." arXiv preprint arXiv:1704.08628 (2017).

[10] Tian, Zhi, et al. "Detecting text in natural image with connectionist text proposal network." European Conference on Computer Vision. Springer International Publishing, 2016.

[11] Wang, Kai, Boris Babenko, and Serge Belongie. "End-to-end scene text recognition." Computer Vision (ICCV), 2011 IEEE International Conference on. IEEE, 2011.

[12] Yao, Cong, et al. "Strokelets: A learned multi-scale representation for scene text recognition." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2014.

[13] Shi, Cunzhao, et al. "Scene text recognition using part-based tree-structured character detection." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2013.

[14] Jaderberg, Max, et al. "Reading text in the wild with convolutional neural networks." International Journal of Computer Vision 116.1 (2016): 1-20.

[15] He, Pan, et al. "Reading scene text in deep convolutional sequences." Thirtieth AAAI Conference on Artificial Intelligence. 2016.

[16] Shi, Baoguang, Xiang Bai, and Cong Yao. "An end-to-end trainable neural network for image-based sequence recognition and its application to scene text recognition." IEEE Transactions on Pattern Analysis and Machine Intelligence (2016).

[17] Lee, Chen-Yu, and Simon Osindero. "Recursive Recurrent Nets with Attention Modeling for OCR in the Wild." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

[18] Gupta, Ankush, Andrea Vedaldi, and Andrew Zisserman. "Synthetic data for text localisation in natural images." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

[19] http://distill.pub/2016/deconv-checkerboard/

[20] Shi, Baoguang, Xiang Bai, and Serge Belongie. "Detecting Oriented Text in Natural Images by Linking Segments." arXiv preprint arXiv:1703.06520 (2017).

[21] Cao, Zhe, et al. "Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields." arXiv preprint arXiv:1611.08050 (2016).

[22] Kim, Suyoun, Takaaki Hori, and Shinji Watanabe. "Joint ctc-attention based end-to-end speech recognition using multi-task learning." arXiv preprint arXiv:1609.06773 (2016).

[23] http://rrc.cvc.uab.es/

版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

YunOS场景文字识别相关推荐

  1. php 点对点,浅析点对点(End-to-End)的场景文字识别

    一.背景 随着智能手机的广泛普及和移动互联网的迅速发展,通过手机等移动终端的摄像头获取.检索和分享资讯已经逐步成为一种生活方式.基于摄像头的(Camera-based)的应用更加强调对拍摄场景的理解. ...

  2. 场景文字识别的算法创新与应用,来自百度的技术前沿

    点击我爱计算机视觉标星,更快获取CVML新技术 几天前,52CV曾经向大家推荐百度家 OCR主题的飞桨博士会: 飞桨博士会第四期,中国深度学习技术俱乐部诚邀您加入 百度组织的这个会比较高端,很多52C ...

  3. 中文场景文字识别技术创新大赛,总奖池5.4万!

    点击我爱计算机视觉标星,更快获取CVML新技术 竞赛简介 为贯彻执行国家创新驱动发展战略,搭建人工智能领域综合性.集群化.市场化的产学研用综合协同创新平台,中国人工智能学会于2018年创办了首届中国& ...

  4. 识别中文_中文场景文字识别大赛官方baseline

    7月5日,由中国人工智能学会主办.百度深度学习平台飞桨(PaddlePaddle)承办的2019第二届中国"AI+"创新创业大赛-中文场景文字识别技术创新大赛启动.本届大赛围绕中文 ...

  5. 史上最全场景文字识别资源汇集(56篇重要论文 + 20 个开源代码 + 330 个实验结果 + 1882个统计信息)...

    点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:刘崇宇 转载自:CSIG文档图像分析与识别专委会 本 ...

  6. CVPR 2020 | 旷视研究院探究优化场景文字识别的「词汇依赖」问题

    IEEE国际计算机视觉与模式识别会议 CVPR 2020 (IEEE Conference on Computer Vision and Pattern Recognition) 大会官方论文结果公布 ...

  7. OpenVINO™场景文字识别与同步与异步推理

    场景文字检测与识别模型 OpenVINO2021.4支持场景文字检测是基于MobileNetV2的PixelLink模型,模型有两个分别是text-detection-0003与text-detect ...

  8. Paddle入门实战系列(四):中文场景文字识别

    ✨写在前面:强烈推荐给大家一个优秀的人工智能学习网站,内容包括人工智能基础.机器学习.深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习.➡️点击跳转到 ...

  9. PaddleOCR实践之飞桨常规赛:中文场景文字识别

    简介 本项目是参加飞桨常规赛:中文场景文字识别(已结束)的项目,项目score为85.87141. 生成的预测文件为work/PaddleOCR中的test2.txt文件 项目任务为识别包含中文文字的 ...

最新文章

  1. 公司app 从兼容Android 8.0 升级兼容9.0
  2. 一个Java对象到底占多大内存?(转)
  3. ubuntu16.04 xfce4的鼠标主题设置为oxygen-red、修改文件夹背景颜色、两处系统字体设置、右键菜单添加压缩解压选项
  4. php curl重用,使用PHP CURL解析负载较重的站点?
  5. zend guard6的使用
  6. android glu,我可以使用glu与Android NDK
  7. ORA-12519: TNS:no appropriate service handler found 解决方法
  8. 二叉树的先序、中序、后序遍历超详解
  9. JavaScript内置对象→对象、系统函数、Date日期对象、String字符串对象、Math对象、Number数字对象、Object对象、Boolean对象、Error对象
  10. Android 跳转权限设置界面的终极方案
  11. HTTP权威协议笔记-6.代理
  12. 分类损失函数多元分类_二元分类为什么不能用MSE做为损失函数?
  13. 程序员文档写作能力(三)-如何处理好微信、邮件、开会时的话术
  14. android手机内存其他文件夹里,别再胡乱清理手机内存了,1秒清空这些文件夹,手机瞬间腾出50G...
  15. 微信小程序授权登录、绑定手机号(接口+小程序)
  16. 《青玉案·元夕》 辛弃疾
  17. 【BZOJ】P4238 电压
  18. Labview各版本软件下载链接
  19. beego之bee 工具简介
  20. softlayer iso_配置SoftLayer组件以与帐户定义的网络一起使用

热门文章

  1. 【JavaEE】HTTP 协议详解 ( 使用fiddler进行抓取http请求/相应包)
  2. 基于matlab的人脸识别系统设计与仿真
  3. Python 数据可视化神器—Pyecharts
  4. c语言出圈问题10人,第38套题:c语言出圈问题分析.doc
  5. 华为运营商级路由器配置示例 | 静态BFD for IPv4静态路由
  6. 数字基带信号(主要涉及基带编码、传输系统)
  7. 钉钉dingtalk=6.3.5版本RCE复现
  8. BHM-AN10 OTG 刷机 记录 2021-10-18
  9. 再谈批量下载Modis数据之Google earth engine
  10. 服务器数据恢复通用方法/服务器硬盘故障导致数据丢失解决方案