GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

Stella981
• 阅读 1064

要说生活里最常见、最便民的AI应用技术,OCR(Optical Character Recognition,光学字符识别)当属其中之一。寻常到日常办理各种业务时的身份证识别,前沿到自动驾驶车辆的路牌识别,都少不了它的加持。作为一名开发者,各种OCR相关的需求自然也少不了:卡证识别、票据识别、汽车场景、教育场景文字识别……

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

OCR领域向来开源repo比较少,大部分核心算法用在了商业化产品。今年算是OCR开源领域的丰收年,chineseocr_lite,easyocr,以及百度飞桨推出的PaddleOCR先后横空出世。

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

确实喜大普奔

对于OCR方向开发者而言,开源repo最吸引人的莫过于:

① 高质量的预训练模型

② 简单易上手的训练代码

③ 好用无坑的部署能力

简单对比一下目前主流OCR方向开源repo的核心能力

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

对于语种方面,easyOCR的优势在于多语言支持,非常适合有小语种需求的开发者;

预训练模型来看,easyOCR目前暂无超轻量模型,chineseocr_lite最新的模型是10M左右,而PaddleOCR提供的8.6M是目前业界已知最轻量的****;

对于部署方面,easyOCR模型较大不适合端侧部署,Chineseocr_lite和PaddleOCR都具备端侧部署能力;

对于自定义训练,实际业务场景中,预训练模型往往不能满足需求,对于自定义训练和模型Finetuning,目前只有PaddleOCR支持****;

PaddleOCR项目地址:

https://github.com/[PaddlePaddle](https://www.oschina.net/action/visit/ad?id=1185)/[Paddle](https://www.oschina.net/action/visit/ad?id=1185)OCR

PaddleOCR 8.6M超轻量模型,支持自定义训练、丰富的部署方式(覆盖服务器端、移动端/嵌入式端(apk/sdk)多场景需求)。提供的超级开源开发者大礼包,无疑让开发者大呼过瘾 ,看一下repo中提供的教程文档,真心全覆盖。

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

高质量的内容也换来了开发者的广泛认可,GitHub Trending 第一,Star数量已经超过2.5k。

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

这仅仅是开始。。。

随着大量用户涌入,也实实在在提出了很多业务场景常见的问题,比如:

能否解决自然场景任意形状文本检测问题?

文字识别结果能否通过语义信息自动纠正?

既然开发者有需求,百度飞桨也是诚意满满!

下载安装命令

CPU版本安装命令

pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

GPU版本安装命令

pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

百度自研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

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

图 1. SAST算法效果图

第一列为语义分割图,黄色框标记的为较长文字分割响应断裂的情况;第二列为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信息,即可恢复出任意形状文字的几何表达。

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

图 2  SAST算法检测流程,虚线部分为Pixel-to-Quad实例分割示意图。

论文中对SAST在多个公开数据集上进行了效果验证,包括SCUT-CTW1500,Total-Text,ICDAR15 和 MLT数据集,准确度上取得了SOTA或可比的结果,速度上位列领先行列。此次SAST开源工作中,通过对模型的Backbone和训练数据做了适当的升级和调整,在icdar2015数据集上hmean达到87.33%,在弯曲文本数据集total-text上hmean达到84.03%。

表1 SAST在各项数据集上的实验结果

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

02 利用语义推理网络强化的场景文字识别器-SRN(CVPR2020)

论文地址:https://arxiv.org/abs/2003.12294

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

图3. 现实生活中的场景文本图像

(a)是较难识别的场景文本图像,(b)是从(a)中图像里分离抽取出的字符图像,(c)是(a)中图像对应的语义内容。

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

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

图4. 两种不同的传递语义信息的方式。(a)是单向串行方式;(b)是全局并行方式

为了解决如下主流Attention-based隐含式语义信息建模的方法缺陷:

1)仅仅感知了历史时刻的语义信息,而无法获取其他时刻的语义信息;

2)如果较早时刻解码出的错误字符,会为余下时刻的解码传递错误的语义信息,导致误差积累效应;

3)串行的解码模式是相对低效的(特别是在模型预测的环节)

百度在CVPR 2020录用工作SRN(Towards Accurate Scene Text Recognition with Semantic Reasoning Networks )中借鉴Transformer和NLP预训练模型思想提出了一种高效的全局并行语义推理模块GSRM,其信息传递方式采用如图 4(b)所示方式。

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

图5. SRN的结构图。灰色表示并行的数据流

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中展示了语义推理模块的使用与否在中英文上的可视化对比效果。

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!  GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

图 6. SRN w/o GSRM(全局语义推理模块)的收益效果对比

加了GSRM模块后,能将一些不符合语义逻辑的单字识别结果进行纠错。

参考DTRB文字识别训练和评估流程,使用MJSynth和SynthText两个文字识别数据集训练,在IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE数据集上进行评估,算法效果如下:可以看到SRN检测算法指标明显优于其它算法,效果提升明显。而且值得一提的是,此次PaddleOCR开源SRN工作中,对训练方法做了适当的优化,采用一步到位端到端的训练方式,原始论文使用两阶段训练平均精度为89.74%,PaddleOCR中使用one-stage训练,平均精度为88.33%。精度虽然略有下降,但是训练效率和实用性明显增加。

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

开源数据集建设

除了开源自研算法,百度也一直致力于推动开源数据集的建设。ICDAR“Robust Reading Competitions”竞赛是评估自然场景/网络图片/复杂视频文本提取与智能识别新技术进展的权威国际赛事及评测标准,竞赛中涌现出诸多方法持续推动业界新技术的创新与应用。

作为ICDAR 2019 Robust Reading Competition竞赛主要组织者之一,百度联合学术界共同发布了两项极具挑战的竞赛任务,ICDAR 2019-LSVTLarge-scale Street View Text with Partial Labeling, 弱标注大规模街景文字识别竞赛)、ICDAR 2019-ArTArbitrary-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](https://www.oschina.net/action/visit/ad?id=1185)/[Paddle](https://www.oschina.net/action/visit/ad?id=1185)OCR/blob/develop/doc/doc\_ch/datasets.md

·百度飞桨PaddleOCR 项目地址·

GitHub:

https://github.com/[PaddlePaddle](https://www.oschina.net/action/visit/ad?id=1185)/[Paddle](https://www.oschina.net/action/visit/ad?id=1185)OCR

Gitee:

https://gitee.com/[paddlepaddle](https://www.oschina.net/action/visit/ad?id=1185)/[Paddle](https://www.oschina.net/action/visit/ad?id=1185)OCR

·SAST论文·

https://arxiv.org/abs/1908.05498

·SRN论文·

https://arxiv.org/abs/2003.12294

·LSVT数据集相关论文地址·

https://arxiv.org/abs/1909.07808

GitHub Trending第一之后,PaddleOCR再发大招:百度自研顶会SOTA算法正式开源!

扫描二维码 | 关注我们

微信号 : PaddleOpenSource

下载安装命令

CPU版本安装命令

pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

GPU版本安装命令

pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

>> 访问 PaddlePaddle 官网了解更多相关内容

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这