要说生活里最常见、最便民的AI应用技术,OCR(Optical Character Recognition,光学字符识别)当属其中之一。寻常到日常办理各种业务时的身份证识别,前沿到自动驾驶车辆的路牌识别,都少不了它的加持。作为一名开发者,各种OCR相关的需求自然也少不了:卡证识别、票据识别、汽车场景、教育场景文字识别……
OCR领域向来开源repo比较少,大部分核心算法用在了商业化产品。今年算是OCR开源领域的丰收年,chineseocr_lite,easyocr,以及百度飞桨推出的PaddleOCR先后横空出世。
确实喜大普奔 对于OCR方向开发者而言,开源repo最吸引人的莫过于: ① 高质量的预训练模型 ② 简单易上手的训练代码 ③ 好用无坑的部署能力 简单对比一下目前主流OCR方向开源repo的核心能力

对于
语种方面,easyOCR的优势在于多语言支持,非常适合有小语种需求的开发者; 从
预训练模型来看,easyOCR目前暂无超轻量模型,chineseocr_lite最新的模型是10M左右,而PaddleOCR提供的8.6M是
目前业界已知最轻量的
; 对于
部署方面,easyOCR模型较大不适合端侧部署,Chineseocr_lite和PaddleOCR都具备端侧部署能力; 对于
自定义训练,实际业务场景中,预训练模型往往不能满足需求,对于自定义训练和模型Finetuning,
目前只有PaddleOCR支持
; PaddleOCR项目地址: https://github.com/PaddlePaddle/PaddleOCR PaddleOCR 8.6M超轻量模型,支持自定义训练、丰富的部署方式(覆盖服务器端、移动端/嵌入式端(apk/sdk)多场景需求)。提供的超级开源开发者大礼包,无疑让开发者大呼过瘾 ,看一下repo中提供的教程
文档,真心全覆盖。

高质量的内容也换来了开发者的广泛认可,GitHub Trending 第一,Star数量已经超过2.5k。
这仅仅是开始。。。 随着大量用户涌入,也实实在在提出了很多业务场景常见的问题,比如: 能否解决自然场景任意形状文本检测问题? 文字识别结果能否通过语义信息自动纠正? 既然开发者有需求,百度飞桨也是诚意满满!
百度自研SAST、SRN
两大SOTA算法开源啦!
核心信息先睹为快:
面向自然场景任意形状文字检测问题,开源ACM Multimedia 2019上发表的SAST(A Single-Shot Arbitrarily-Shaped Text Detector based on,Context Attended Multi-Task Learning)算法,在多个公开数据集(包括SCUT-CTW1500,Total-Text,ICDAR15 和 MLT),准确度取得了SOTA或可比的结果,速度上位列领先行列。
面向场景文本图像中兼顾视觉信息和语义信息的需求,开源CVPR2020中发表的SRN(Towards Accurate Scene Text Recognition with Semantic Reasoning Networks )算法,在包括ICDAR13、ICDAR15,IIIT5K,SVT,SVTP,CUTE80数据集,准确度取得了SOTA或可比的结果。
开源算法详细解读
01
单阶段任意形态文字检测器-SAST(ACM MM2019)
论文地址:https://arxiv.org/abs/1908.05498

第一列为语义分割图,黄色框标记的为较长文字分割响应断裂的情况;第二列为SAST利用Pixel-to-Quad思想对实例分割的处理结果,相同颜色为同一个文字实例;第三列红色框为最终检测结果,蓝色为真值,青色为EAST算法检测结果。 目前业界解决任意形态文字检测问题的主流思路有两种:
- 一种基于Mask-RCNN思想的自顶向下的检测方法,例如LOMO、PMTD等;
- 另外一种是基于语义分割的自底向上的检测方法,例如TextField、TextMontain 等。
自顶而下的方法往往由于算法级联的模块比较多、特征抽取比较复杂导致实际使用效率没法得到很好保证;语义分割的方法由于缺乏实例(instance)的先验,在面临距离较近的文字条难以分割开、过长的文本条则容易出现响应不连续等问题。 SAST (“A Single-Shot Arbitrarily-Shaped Text Detector based on Context Attended Multi-Task Learning”) 收录于ACM Multimedia 2019,是百度研发的面向自然场景任意形状文字检测问题,兼顾效率和准确率的解决方案。 SAST使用多任务学习对文字中心线区域进行语分割的同时学习了文字实例的多种几何信息,进而实现文字的实例分割和多边形表达的重建。该方法的整体算法流程,如图1所示:
Ⅰ
首先,通过多任务学习方法学习文字实例的多种几何信息,包括文字条中心线响应图 (Text Center Line, TCL),中心线像素与四角点偏移量 (Text Vertex Offset, TVO),中心线像素与文字中心点偏移量 (Text Center Offset, TCO) 和中心线到文字上下边界偏移量 (Text Border Offset, TBO);
Ⅱ
其次,使用Pixel-to-Quad方法对TCL进行实例分割,该方法结合了高层检测信息和底层分割信息,具体过程如图2虚线框中所示。
Ⅲ
最后,在实例分割的基础上,针对每个文字实例结合TBO信息,即可恢复出任意形状文字的几何表达。

论文中对SAST在多个公开数据集上进行了效果验证,包括SCUT-CTW1500,Total-Text,ICDAR15 和 MLT数据集,准确度上取得了SOTA或可比的结果,速度上位列领先行列。此次SAST开源工作中,通过对模型的Backbone和训练数据做了适当的升级和调整,
在icdar2015数据集上hmean达到87.33%,在弯曲文本数据集total-text上hmean达到84.03%。
02
利用语义推理网络强化的场景文字识别器-SRN(CVPR2020)
论文地址:https://arxiv.org/abs/2003.12294

(a)是较难识别的场景文本图像,(b)是从(a)中图像里分离抽取出的字符图像,(c)是(a)中图像对应的语义内容。 场景文本图像包含两种层次的内容:视觉信息和语义信息。近年来致力于提高识别性能的工作,大多从提取鲁棒且有效的视觉特征的视角出发,例如升级模型Backbone,增加矫正模块,校准Attention机制等,往往忽视了改进语义特征。场景文字识别不单依赖视觉感知信息,也依赖高层次的语义信息的认知理解,例如图3所示 ,仅依靠视觉信息是很难准确识别分离抽取出的字符图像,尤其是(b)中红框标出的字符;相反地,结合整个单词完整语义信息进行推理的时候,我们是可以很容易识别出完整单词内容的。

为了解决如下主流Attention-based隐含式语义信息建模的方法缺陷: 1)仅仅感知了历史时刻的语义信息,而无法获取其他时刻的语义信息; 2)如果较早时刻解码出的错误字符,会为余下时刻的解码传递错误的语义信息,导致误差积累效应; 3)串行的解码模式是相对低效的(特别是在模型预测的环节) 百度在CVPR 2020录用工作SRN(Towards Accurate Scene Text Recognition with Semantic Reasoning Networks )中借鉴Transformer和NLP预训练模型思想提出了一种高效的全局并行语义推理模块GSRM,其信息传递方式采用如图 4(b)所示方式。

SRN是端到端可训练的场景文字识别网络,由四部分组成:基础网络Backbone、并行的视觉特诊提取模块(PVAM)、全局语义推理模块(GSRM) 和视觉语义融合的解码器(VSFD)。给定一张输入的文本图像,基于ResNet50 + Transformer unit的Backbone从中提取出视觉2D feature map
V;之后PVAM会针对每个目标字符获取其相应的视觉特征
G;GSRM会基于视觉特征
G获取全局语义信息,并转化为每个目标字符的语义特征
S;最后VSFD融合对齐的视觉特征和语义特征,预测出相应字符。在训练阶段和推断阶段,每个序列中各个字符之间是并行。 SRN在多个公开数据集上进行了效果验证,包括ICDAR13、ICDAR15,IIIT5K,SVT,SVTP,CUTE80数据集,
在准确度上取得了SOTA或者可比的结果。同时,也在中文长词数据集合TRW上与主流方法做了精度对比,证明了该方法对于中文的适用性。图 6中展示了语义推理模块的使用与否在中英文上的可视化对比效果。

加了GSRM模块后,能将一些不符合语义逻辑的单字识别结果进行纠错。 参考DTRB文字识别训练和评估流程,使用MJSynth和SynthText两个文字识别数据集训练,在IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE数据集上进行评估,算法效果如下:可以看到SRN检测算法指标明显优于其它算法,效果提升明显。而且值得一提的是,此次PaddleOCR开源SRN工作中,对训练方法做了适当的优化,采用一步到位端到端的训练方式,原始论文使用两阶段训练平均精度为89.74%,PaddleOCR中使用one-stage训练,平均精度为88.33%。精度虽然略有下降,但是训练效率和实用性明显增加。
开源数据集建设
除了开源自研算法,百度也一直致力于推动开源数据集的建设。ICDAR“Robust Reading Competitions”竞赛是评估自然场景/网络图片/复杂视频文本提取与智能识别新技术进展的权威国际赛事及评测标准,竞赛中涌现出诸多方法持续推动业界新技术的创新与应用。
作为ICDAR 2019 Robust Reading Competition竞赛主要组织者之一,百度联合学术界共同发布了两项极具挑战的竞赛任务,ICDAR 2019-LSVT(Large-scale Street View Text with Partial Labeling, 弱标注大规模街景文字识别竞赛)、ICDAR 2019-ArT(Arbitrary-Shaped Text, 任意形状场景文字识别竞赛)。
ICDAR 2019-LSVT竞赛数据聚焦探索大规模数据场景下
深度学习文字识别能力极限,是业界最大的中文场景OCR集合。ICDAR2019-LSVT数据集源于百度真实应用场景,作为首个提出弱标注数据的场景文字数据集,包括精标注5万张街景图像,40万张弱标注图像,总计45万,数据量是现有公开数据集(ICDAR 2017、ICPR 2018等)的14倍以上。场景文字识别具有广泛应用场景,例如:拍照翻译、图像检索、街景地标识别、室外场景理解等。
ICDAR2019-ArT竞赛数据总计10176张,是业界最大的任意形状场景文字集合,聚焦推动自然场景下任意形状文字检测识别能力新突破。
PaddleOCR开源的超轻量和通用版中英文模型,训练数据组成中的中文真实数据集,主要就是上述开源的LSVT数据集,此外,本次SAST算法开源模型total-text指标超过论文指标约4%,主要原因也是由于加入了ArT数据集进行了优化。以上数据集也已经在PaddleOCR中开源了,欢迎使用: https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/datasets.md