写点什么

揭秘!文字识别在高德地图数据生产中的演进

  • 2020-08-08
  • 本文字数:5826 字

    阅读完需:约 19 分钟

揭秘!文字识别在高德地图数据生产中的演进

一 背景

作为一个 DAU 过亿的国民级软件,高德地图每天为用户提供海量的查询、定位和导航服务。地图数据的丰富性和准确性决定了用户体验。传统的地图数据的采集和制作过程,是在数据采集设备实地采集的基础上,再对采集资料进行人工编辑和上线。这样的模式下,数据更新慢、加工成本高。为解决这一问题,高德地图采用图像识别技术从采集资料中直接识别地图数据的各项要素,实现用机器代替人工进行数据的自动化生产。通过对现实世界高频的数据采集,运用图像算法能力,在海量的采集图片库中自动检测识别出各项地图要素的内容和位置,构建出实时更新的基础地图数据。而基础地图数据中最为重要的是 POI(Point of Interest)和道路数据,这两种数据可以构建出高德地图的底图,从而承载用户的行为与商家的动态数据。


图像识别能力决定了数据自动化生产的效率,其中场景文字识别技术占据了重要位置。不同采集设备的图像信息都需要通过场景文字识别(Scene Text Recognition,STR)获得文字信息。这要求我们致力于解决场景文字识别技术全、准、快的问题。在 POI 业务场景中,识别算法不仅需要尽可能多的识别街边新开商铺的文字信息, 还需要从中找出拥有 99%以上准确率的识别结果,从而为 POI 名称的自动化生成铺平道路;在道路自动化场景中,识别算法需要发现道路标志牌上细微的变化,日处理海量回传数据,从而及时更新道路的限速、方向等信息。与此同时,由于采集来源和采集环境的复杂性,高德场景文字识别算法面对的图像状况往往复杂的多。主要表现为:


  • 文字语言、字体、排版丰富:商家招牌上的艺术字体,LOGO 五花八门,排版形式各式各样。

  • 文字背景复杂:文字出现的背景复杂,可能有较大的遮挡,复杂的光照与干扰。

  • 图像来源多样:图像采集自低成本的众包设备,成像设备参数不一,拍摄质量差。图像往往存在倾斜、失焦、抖动等问题。


由于算法的识别难度和识别需求的复杂性,已有的文本识别技术不能满足高德高速发展的业务需要,因此高德自研了场景文字识别算法,并迭代多年,为多个产品提供识别能力。

二 文字识别技术演进与实践

STR 算法发展主要历程

场景文字识别(STR)的发展大致可以分为两个阶段,以 2012 年为分水岭,分别是传统图像算法阶段和深度学习算法阶段。


传统图像算法


2012 年之前,文字识别的主流算法都依赖于传统图像处理技术和统计机器学习方法实现,传统的文字识别方法可以分为图像预处理、文字识别、后处理三个阶段:


  • 图像预处理:完成文字区域定位,文字矫正,字符切割等处理,核心技术包括连通域分析,MSER,仿射变换,图像二值化,投影分析等;

  • 文字识别:对切割出的文字进行识别,一般采用提取人工设计特征(如 HOG 特征等)或者 CNN 提取特征,再通过机器学习分类器(如 SVM 等)进行识别;

  • 后处理:利用规则,语言模型等对识别结果进行矫正。


传统的文字识别方法,在简单的场景下能达到不错的效果,但是不同场景下都需要独立设计各个模块的参数,工作繁琐,遇到复杂的场景,难以设计出泛化性能好的模型。


深度学习算法


2012 年之后,随着深度学习在计算机视觉领域应用的不断扩大,文字识别逐渐抛弃了原有方法,过渡到深度学习算法方案。在深度学习时代,文字识别框架也逐渐简化,目前主流的方案主要有两种,一种是文本行检测与文字识别的两阶段方案,另一种是端到端的文字识别方案。


1)两阶段文字识别方案


主要思路是先定位文本行位置,然后再对已经定位的文本行内容进行识别。文本行检测从方法角度主要分为基于文本框回归的方法[1],基于分割或实例分割的方法[2],以及基于回归、分割混合的方法[3],从检测能力上也由开始的多向矩形框发展到多边形文本[2],现在的热点在于解决任意形状的文本行检测问题。文本识别从单字检测识别发展到文本序列识别,目前序列识别主要又分为基于 CTC 的方法[4]和基于 Attention 的方法[5]。


2)端到端文字识别方案[6]


通过一个模型同时完成文本行检测和文本识别的任务,既可以提高文本识别的实时性,同时因为两个任务在同一个模型中联合训练,两部分任务可以互相促进效果。

文字识别框架

高德文字识别技术经过多年的发展,已经有过几次大的升级。从最开始的基于 FCN 分割、单字检测识别的方案,逐渐演进到现有基于实例分割的检测,再进行序列、单字检测识别结合的方案。与学术界不同,我们没有采用 End-to-End 的识别框架,是由于业务的现实需求所决定的。End-to-End 框架往往需要足够多高质量的文本行及其识别结果的标注数据,但是这一标注的成本是极为高昂的,而合成的虚拟数据并不足以替代真实数据。因此将文本的检测与识别拆分开来,有利于分别优化两个不同的模型。


如下图所示,目前高德采用的算法框架由文本行检测、单字检测识别、序列识别三大模块构成。文本行检测模块负责检测出文字区域,并预测出文字的掩模用于解决文本的竖直、畸变、弯曲等失真问题,序列识别模块则负责在检测出的文字区域中,识别出相应的文字,对于艺术文本、特殊排列等序列识别模型效果较差的场景,使用单字检测识别模型进行补充。



文字识别框架


文本行检测


自然场景中的文字区域通常是多变且不规则的,文本的尺度大小各异,成像的角度和成像的质量往往不受控制。同时不同采集来源的图像中文本的尺度变化较大,模糊遮挡的情况也各不相同。我们根据实验,决定在两阶段的实例分割模型的基础上,针对实际问题进行了优化。


文本行检测可同时预测文字区域分割结果及文字行位置信息,通过集成 DCN 来获取不同方向的文本的特征信息,增大 mask 分支的 feature 大小并集成 ASPP 模块,提升文字区域分割的精度。并通过文本的分割结果生成最小外接凸包用于后续的识别计算。在训练过程中,使用 online 的数据增广方法,在训练过程中对数据进行旋转、翻转、mixup 等,有效的提高了模型的泛化能力。具体检测效果如下所示:



检测结果示例


目前场景文本检测能力已经广泛应用于高德 POI、道路等多个产品中,为了验证模型能力,分别在 ICDAR2013(2018 年 3 月)、ICDAR2017-MLT(2018 年 10 月)、ICDAR2019-ReCTS 公开数据集中进行验证,并取得了优异的成绩。



文本行检测竞赛成绩


文字识别


根据背景的描述,POI 和道路数据自动化生产对于文字识别的结果有两方面的需求,一方面是希望文本行内容尽可能完整识别,另外一方面对于算法给出的结果能区分出极高准确率的部分(准确率大于 99%)。不同于一般文字识别评测以单字为维度,我们在业务使用中,更关注于整个文本行的识别结果,因此我们定义了符合业务使用需求的文字识别评价标准:


  • 文本行识别全对率:表示文字识别正确且读序正确的文本行在所有文本行的占比。

  • 文本行识别高置信占比:表示识别结果中的高置信度部分(准确率大于 99%)在所有文本行的占比。


文本行识别全对率主要评价文字识别在 POI 名称,道路名称的整体识别能力,文本行识别高置信占比主要评价算法对于拆分出识别高准确率部分的能力,这两种能力与我们的业务需求紧密相关。为了满足业务场景对文字识别的需求,我们针对目前主流的文字识别算法进行了调研和选型。


文字识别发展到现在主要有两种方法,分别是单字检测识别和序列识别。单字检测识别的训练样本组织和模型训练相对容易,不被文字排版的顺序影响。缺点在某些"上下结构","左右结构"的汉字容易检测识别错误。相比之下序列识别包含更多的上下文信息,而且不需要定位单字精确的位置,减小因为汉字结构导致的识别损失。但是现实场景文本的排版复杂,“从上到下”,"从左到右"排版会导致序列识别效果不稳定。结合单字检测识别和序列识别各自的优缺点,采用互补的方式提高文字识别的准确率。



单字检测识别和序列识别结果融合


1)单字检测识别


单字检测采用 Faster R-CNN 的方法,检测效果满足业务场景需求。单字识别采用 SENet 结构,字符类别支持超过 7000 个中英文字符和数字。在单字识别模型中参考 identity mapping 的设计和 MobileNetV2 的结构,对 Skip Connections 和激活函数进行了优化,并在训练过程中也加入随机样本变换,大幅提升文字识别的能力。在 2019 年 4 月,为了验证在文字识别的算法能力,我们在 ICDAR2019-ReCTS 文字识别竞赛中获得第二名的成绩(准确率与第一名相差 0.09%)。



单字检测识别效果图


2)文本序列识别


近年来,主流的文本序列识别算法如 Aster、DTRT 等,可以分解为文字区域纠正,文字区域特征提取、序列化编码图像特征和文字特征解码四个子任务。文字区域纠正和文字区域特征提取将变形的文本行纠正为水平文本行并提取特征,降低了后续识别算法的识别难度。序列化编码图像特征和文字特征解码(Encoder-Decoder 的结构)能在利用图像的纹理特征进行文字识别的同时,引入较强的语义信息,并利用这种上下文的语义信息来补全识别结果。



通用序列识别结构


在实际应用中,由于被识别的目标主要以自然场景的短中文本为主,场景文本的几何畸变、扭曲、模糊程度极为严重。同时希望在一个模型中识别多个方向的文本,因此我们采用的是的 TPS-Inception-BiLSTM-Attention 结构来进行序列识别。主要结构如下所示:



文本序列识别模型


对于被检测到的文本行,基于角点进行透视变换,再使用 TPS 变换获得水平、竖直方向的文本,按比例缩放长边到指定大小,并以灰色为背景 padding 为方形图像。这一预处理方式既保持了输入图像语义的完整,同时在训练和测试阶段,图像可以在方形范围内自由的旋转平移,能够有效的提高弯曲、畸变文本的识别性能。将预处理完成的图像输入 CNN 中提取图像特征。再使用 BiLSTM 编码成序列特征,并使用 Attention 依次解码获得预测结果。如下图所示,这一模型通过注意力机制在不同解码阶段赋予图像特征不同的权重,从而隐式表达预测字符与特征的对齐关系,实现在一个模型中同时预测多个方向文本。文本序列识别模型目前已覆盖英文、中文一级字库和常用的繁体字字库,对于艺术文本、模糊文本具有较好的识别性能。



序列识别效果


3)样本挖掘 &合成


在地图数据生产业务中经常会在道路标志牌中发现一些生僻的地点名称或者在 POI 牌匾中发现一些不常见的字甚至是繁体字,因此在文字识别效果优化中,除了对于模型的优化外,合理补充缺字、少字的样本也是非常重要的环节。为了补充缺字、少字的样本,我们从真实样本挖掘和人工样本合成两个方向入手,一方面结合我们业务的特点,通过数据库中已经完成制作的包含生僻字的名称,反向挖掘出可能出现生僻字的图像进行人工标注,另一方面,我们利用图像渲染技术人工合成文字样本。实际使用中,将真实样本和人工合成样本混合使用,大幅提升文字识别能力。



样本挖掘和合成方案

文字识别技术小结

高德文字识别算法通过对算法结构的打磨,和多识别结果的融合,满足不同使用场景的现实需要。同时以文字识别为代表的计算机视觉技术,已广泛应用于高德数据自动化生产的各个角落,在部分采集场景中,机器已完全代替人工进行数据的自动化生产。POI 数据中超过 70%的数据都是由机器自动化生成上线,超过 90%的道路信息数据通过自动化更新。数据工艺人员的技能极大简化,大幅节约了培训成本和支出开销。

三 未来发展和挑战

目前高德主要依赖深度学习的方式解决场景文字的识别问题,相对国外地图数据,国内汉字的基数大,文字结构复杂导致对数据多样性的要求更高,数据不足成为主要痛点。另外,图像的模糊问题往往会影响自动化识别的性能和数据的制作效率,如何识别模糊和对模糊的处理也是高德的研究课题之一。我们分别从数据,模型设计层面阐述如何解决数据不足和模糊识别的问题,以及如何进一步提高文字识别能力。

数据层面

数据问题很重要,在没有足够的人力物力标注的情况下,如何自动扩充数据是图像的一个通用研究课题。其中一个思路是通过数据增广的方式扩充数据样本。Google DeepMind 在 CVPR 2019 提出 AutoAugment 的方法, 主要通过用强化学习的方法寻找最佳的数据增广策略。另一种数据扩充的解决办法是数据合成,例如阿里巴巴达摩院的 SwapText 利用风格迁移的方式完成数据生成。

模型层面

模糊文本的识别


模糊通常造成场景识别文本未检测和无法识别的问题。在学术界超分辨率是解决模糊问题的主要方式之一,TextSR 通过 SRGAN 对文本超分的方式,还原高清文本图像,解决模糊识别的问题。对比 TextSR,首尔大学和马萨诸塞大学在 Better to Follow 文中提出通过 GAN 对特征的超分辨率方式,没有直接生成新的图像而是将超分辨率网络集成在检测网络中,在效果接近的同时,由于其采用 End-to-End 的模式,计算效率大幅提高。


文字语义理解


通常人在理解复杂文字时会参考一定的语义先验信息,近年来随着 NLP(Natural Language Processing)技术的发展,使得计算机也拥有获得语义信息的能力。参考人理解复杂文字的方式,如何利用语义的先验信息和图像的关系提高文字识别能力是一个值得研究的课题。例如 SEED 在 CVPR 2020 提出将语言模型添加到识别模型中,通过图像特征和语义特征综合判断提高文字识别能力。


其他发展


除此之外,从云到端也是模型发展的一个趋势,端上化的优势在于节约资源,主要体现在节约上传至云端的流量开销和云端服务器的计算压力。在端上化设计上,针对 OCR 算法的研究和优化,探索高精度、轻量级的检测和识别框架,压缩后模型的大小和速度满足端上部署的需要,也是我们今后需要研究的一个课题。


参考文献

  1. Liao M et al. Textboxes++: A single-shot oriented scene text detector[J]. IEEE transactions on image processing, 2018.

  2. Lyu P , Liao M , Yao C , et al. Mask TextSpotter: An End-to-End Trainable Neural Network for Spotting Text with Arbitrary Shapes[J]. 2018.

  3. Zhou X , Yao C , Wen H , et al. EAST: An Efficient and Accurate Scene Text Detector[J]. 2017.

  4. Shi B , Bai X , Yao C . An End-to-End Trainable Neural Network for Image-Based Sequence Recognition and Its Application to Scene Text Recognition[J]. ieee transactions on pattern analysis & machine intelligence, 2017, 39(11):2298-2304.

  5. Wojna Z , Gorban A N , Lee D S , et al. Attention-Based Extraction of Structured Information from Street View Imagery[C]// 2017 14th IAPR International Conference on Document Analysis and Recognition (ICDAR). IEEE, 2018.

  6. Li H , Wang P , Shen C . Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks[J]. 2017.


本文转载自公众号阿里技术(ID:ali_tech)。


原文链接


https://mp.weixin.qq.com/s/jnkRP9hOwILmGLf6pS3U3w


2020-08-08 10:002932

评论

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

Python之简易计算器的制作

梦笔生花

Python 9月月更 简易计算器

2022-09-30:以下go语言代码输出什么?A: true true false true false; B: true false false true false; C: true true

福大大架构师每日一题

面试官问我 JS 中 foreach 能不能跳出循环

茶无味的一天

JavaScript js foreach for

工业4.0时代IIoT存储面临哪些挑战

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

Java中的悲观锁和乐观锁是什么意思?其分类依据是啥?

wljslmz

Java 乐观锁 悲观锁 9月月更

Python之斐波那契数列的实现

梦笔生花

Python 9月月更 斐波那契数列

部署华为云DWS过程

乌龟哥哥

9月月更

还在为产品的客户服务而烦恼?来搭建在线客服中心!

Baklib

「产品运营」研发效能之DevOps平台如何运营?

laofo

DevOps cicd 研发效能 持续交付 工程效率

(WebFlux)004、WebFilter踩坑记录

编号94530

Spring Boot WebFlux Reactor3 WebFilter

数据价值平台化输出:数据服务平台

小鲸数据

数据中台 接口管理 API接口管理 数据服务 数据服务平台

14个你必须要知道的ubuntu快捷键

乌龟哥哥

9月月更

第1章:初识数据库与MySQL----数据库基本概念

乌龟哥哥

9月月更

还不知道产品帮助中心怎样制作?,来看看这个吧

Baklib

OptaPlanner场景和示例

成长兔🐇

Spring Security 在 Servlet 的作用区域

HoneyMoose

《MySQL入门很轻松》第2章:MySQL管理工具介绍

乌龟哥哥

9月月更

Databricks Data Science&Engineering模块介绍

Jackchang234987

大数据 数据产品经理 数据产品 大数据开发 Databricks

微信架构图

Johnny

#架构实战营

Python之鸡兔同笼

梦笔生花

9月月更 Python语法 鸡兔同笼

leetcode 513. Find Bottom Left Tree Value 找树左下角的值 (简单)

okokabcd

LeetCode 数据结构与算法

无线网络安全技术中的王牌标准:WPA到底是个什么东东?解决了什么问题?

wljslmz

网络安全 无线技术 9月月更 WAP

产品的帮助中心怎么建设?关于编辑帮助文档的几个小技巧~

Baklib

给你一本武林秘籍,和KeeWiDB一起登顶高性能

腾讯云数据库

redis 腾讯云 NoSQL 数据库 腾讯云数据库 KeeWiDB

新品速递|海泰边缘安全网关护航工控数据采集

电子信息发烧客

大数据开发应用场景解读

Jackchang234987

大数据 数据开发

第56届世乒赛团体赛开幕!三思近900㎡ LED显示点燃赛事激情

电子信息发烧客

《MySQL入门很轻松》第4章:数据表中存放的数据类型

乌龟哥哥

9月月更

打破线上社交“不可能三角”,语音社交可以做到既要、又要、还要

擎声科技

音视频 sdk 语音社交 实时互动 擎声Qtt

字符串哈希

留白的艺术

开发者有话说|我想给你讲一个故事

石云升

个人成长 9月月更

揭秘!文字识别在高德地图数据生产中的演进_AI&大模型_虽寿_InfoQ精选文章