高德POI数据生产中的计算机视觉技术

​前言:又到春招季!做为国民级出行服务平台,高德业务快速发展,大量校招/社招名额开放,欢迎你们投递简历,详情见文末。为帮助你们更了解高德技术,咱们策划了 #春招专栏#的系列文章,组织各业务团队的高年级同窗以 业务科普+技术应用实践为主要内容为你们作相关介绍。

本文是#春招专栏#系列的第 3 篇,根据 高德视觉技术中心基础研发部 负责人郝志会在AT技术讲坛分享的《视觉技术在POI名称自动化生成的实践》内容整理而成,在不影响原意的状况下略做删节。git

AT技术讲坛(Amap Technology Tribune)是高德发起的一档技术交流活动,每期围绕一个主题,咱们会邀请阿里集团内外的专家以演讲、QA、开放讨论的方式,与你们作技术交流。算法

郝志会所在团队涉及到计算机视觉方面不少技术:包括目标的检测、识别、分割,几何重建、视觉定位,等等。网络

高德POI数据的采集机器学习

高德有7000万以上的POI(Point of Interest,兴趣点)数据。每一年还会出现不少新增的POI,也会有一部分POI中止营业、关门倒闭。这些POI如何制做和更新?从采集方式来看会有不少获取POI的方式,有一种重要并且直观的采集方式,高德经过众包方式采集街边店铺的图像,利用计算机视觉技术(以及人工辅助)从图像中提取POI数据。性能

下图演示了一次众包化采集过程。高德的采集人员从这条街走过,拍摄连续图像。最后把图像和GPS坐标,上传给高德。学习

下图是一个POI从采集到生产,再到使用的示意图。输入的是连续采集的图像,对于生产环节,最重要的是计算每一个POI的内容和位置。而后和母库中的POI匹配,确认这个POI是已经存在的,仍是须要新增。从图像中识别POI的名称,计算坐标,都须要用到计算机视觉技术。字体

本文主要介绍的是名称的部分。实际上,高德的POI生产不是全自动化的,而是人机结合的方式。当机器不能自动化,或者置信度较低时,交给人工做业。优化

高德的POI数据采集—生产—使用流程示意图编码

POI数据丰富多彩的呈现形式,给自动化的处理过程带来了挑战,包括:文字的识别、是否为POI、文字之间关系、如何命名(定名)…spa

如下图为例,从原始图像,到自动生成POI的名称,包含了如下几项关键的计算机视觉技术天然场景文字识别文本属性断定和结构化处理名称自动生成

天然场景文字识别

文字识别,简单说,就是从一张图片中,找到里面的文本,给出正确的字符。从文字识别问题的发展过程来看,它包含了不一样的子问题。

首先,你们比较熟悉的名词是OCR,中文翻译过来是光学字符识别。原意是利用光学扫描仪,将印刷体文字读成二进制数据,再识别成ascii码字符,输出出来。

OCR问题历史比较悠久,上个世纪80、90年代,就有很多研究论文,以及商业化产品。好比咱们熟悉的深度学习创始人之一Yann Lecun,他在90年代初,就用神经网络识别手写的邮政编码,被美国银行商用化了。

随着文字识别技术的发展,它的应用范围也变多了。除了印刷体、手写体以外,任何一张普通的包含了文字的图片,是否是均可以识别出来呢?

在下图中,中间一列的问题叫作born-digitial,也就是说文字是由电脑生成的,文字的字体、版式,相对比较固定。

第3列是天然场景的文字识别问题,称为STR,也就是在真实存在的文字,好比店铺名称、路牌,这种文字识别问题,由于拍照的角度问题、光照问题、图片质量问题,应该说难度是最大的。也是如今学术界研究比较多的一种类型。

固然,如今的STR技术,会面临不少的挑战:包括字体问题、排版问题、多语言问题,以及由拍摄带来的光照问题、模糊问题。

一个店铺门匾上的文字,比其余场景的会更复杂,由于它要表达本身的特色,要让你“过目不忘”,因此更容易出现各类艺术字、各类不一样的装饰效果。

并且,高德地图要维护全国的POI数据,在不一样城市上,它的地名、店铺名、品牌名,自己是一个很是大的词库。

STR技术发展:传统算法(before 2012)

先简单介绍一下STR技术。

天然场景文字识别(STR)的发展大体能够分为两个阶段,以2012年为分水岭,以前是以传统图像算法为主;以后,进入了深度学习算法的阶段。

2012年以前,文字识别的主流算法都依赖于传统图像处理技术和统计机器学习方法实现。分为文本行检测、文字识别两部分。

文本行检测,通常是先预处理,利用二值化、连通域分析、MSER显著性区域算子等算法,定位文字区域,提取文本行候选,而后经过分类,去除掉无效候选。

文字识别,通常是经过切割,找出字符/单词的候选,再经过机器学习分类器,对每一个字符/单词进行分类。

传统的文字识别方法,在简单的场景下能达到不错的效果,可是不一样场景下都须要独立设计各个模块的参数。遇到复杂的场景,很难调整参数,获得泛化性能好的模型。

STR技术发展:深度学习算法(after 2012)

大概从2012年开始,跟其余的计算机视觉问题同样,STR也进入了深度学习的阶段。

上面讲到的文本行检测、文字识别两个子问题,分别都有一些深度学习的模型来解决。下面列举几个比较典型的工做。

最左边,是一个文本行检测模型,华中科技大学的Textboxes++,它是在相似SSD的网络结构的基础上,对四边形的四个顶点的坐标分别作回归,以解决长宽比、旋转这类问题。

中间是一个序列识别模型。能够说这是在深度学习阶段之后,出现的一类新的解题方法。输入一个字符序列的图像,传统的方案是必需要切割成单个字符,或者单词,再对它们作分类,有了LSTM这种RNN模型,能够对先后特征序列作编码,再经过引入CTC loss,就能够训练一个完整的序列识别模型。

除了将文本行检测、识别两个环节改形成深度学习的方案之外,也有一些工做在试图把二者整合起来,造成一个end-to-end的方案。整合的目的是什么呢?不难想象,若是可以识别出文本的内容,理论上应该能够检测的更准。好比,若是能够识别出“深度学”这3个字,那是否是能够经过某种网络的反馈信号告诉检测器,后面应该还有一个“学习的习”字。

第三列是一个end-to-end的工做,他是把faster r-cnn和LSTM接到同一个网络里,在对每一个proposal作分类和坐标回归的同时,也作字符的识别。

高德的STR技术

高德在STR上的技术,其实也是分红文本行检测、字符识别两部分。

在实际工做中并无使用“端到端”的模型,由于这种分模块的模型,更容易优化局部的效果,好比为某一个模块增长样本,或者换一个模型。

在字符识别的环节,能够看到高德是平行使用了两种方案。上面的分支是单字符的检测和识别,下面的分支是整个文本序列的识别。

高德的STR技术——文本行检测

首先看文本行检测。在早期的时候,大概2017年以前,使用语义分割模型,好比FCN、deeplab来分割文本行。

到2017年Mask R-CNN出现以后,Instance segmentation技术愈来愈成熟,咱们发现实例分割在文本行检测这个问题上的效果,也超过了语义分割模型。最重要的是,由于要单独识别每一个文本行,实例分割很天然地就解决了这个问题。

而语义分割,还要作大量的后处理,才能把不一样的文本行区分开。

固然除了Mask R-CNN之外,咱们也会使用其余的实例分割模型。

在实际的业务问题上,高德的文本行检测的效果。无论是文本行密集、仍是模糊的状况下,检测的效果都达到了很高的水平。

高德的STR技术——文字识别

文字识别,高德其实是用了两个分支,单字符的检测识别,以及序列的识别。最终识别结果,是这两个分支的输出的融合。

为何要用两个分支?

能够看这个例子,对于“一二三四的一”,单字符是不容易准确地检测到的,由于它很容易和背景混淆。

可是由于它位于文本行中间,经过整个序列是能够识别出来的。

那只依靠序列识别,把单字符的分支去掉,是否能够?或者说会有什么问题?这个留给同窗们本身思考。

序列识别模型

早期的序列识别模型,主要是使用 LSTM + CTC loss,后来替换成了带有attention layer的LSTM。引入了attention,可使在每个timestep输出时,网络对特征输入更聚焦,预测的效果也更好。

经过这些方法,对于不一样的字体、不一样方向、甚至不一样语言,识别效果都是不错的。

Hard case的挖掘和生成

在实际的工做中,除了模型的设计和优化,也会面临不少其余的问题。

一个比较大的问题是,汉字的字符不少。经常使用汉字有大概3000-5000个,可是在POI中看到的字符,会远远超过这个数字。

高德地图有7000万个POI,你们能够想一想会是个什么数字。

针对这个问题,咱们有几个不一样的解决方案。好比能够从POI的名称里,找到感兴趣的字符,再找到采集图片,再交给人工去标注。也能够经过电脑的字库,加上一些渲染效果,合成一些样本。

高德是从2016年左右,开始研发文字识别技术,到如今还在持续优化。为了检验技术能力,高德视觉技术团队也参加过一些竞赛。OCR领域比较大的一个竞赛是 ICDAR,高德参加了2017年,2019年的文本行定位、字符识别的比赛,也有一些不错的成绩。

文本属性断定和结构化处理

在对场景中的文字进行检测和识别之后,须要判断哪些文字和POI名称有关。所以,须要判断每一个文本行的属性;同时,临近的多个文本行每每是有关系的,须要计算它们的关系,进行结构化的输出。

文本属性断定问题

这个问题是有挑战性的。一个文本行是否为POI名称,和它的文本内容、所处的位置,都有关系。以上图为例,仅看“会员上网,2元/小时”,基本能够猜出来,这不是一个POI名称。而一样都是“百世快递”,当它处在店铺上方的牌匾上时,它大几率是一个POI名称;当它处在快递车身上时,它不是咱们想制做的名称。

文本属性的断定,最直接的一个任务是降噪:将明显无效的POI文本排除掉。高德使用了图像和文本双通道的卷积神经网络,取得了比较明显的降噪效果。

既然能够将文本行断定成POI名称和噪声两个类别,扩展一下,还能够将POI名称相关的文本分红多个属性类别,包括主名称、分店名、营业范围、联系方式等。在制做POI名称时,人工会根据必定的工艺规范,选取其中一部分文本,也会根据这些文本的属性,自动选取或舍弃,以及排序,最终生成POI名称。

另外,高德也引入了牌匾的语义分割,肯定每一个牌匾独立的边界。有边界的状况下,主名称是惟一的。

名字自动生成

最后,看一下名称自动生成的问题,以及解法。

在文字识别、属性断定以后,怎样自动生成POI名称呢?人在掌握了做业工艺以后,能够根据挂牌推断出这个店的正确名称(这也是一个合格的挂牌的基本功能)。那么,机器可否学习和掌握命名规则,从而根据挂牌生成名称呢?

在现实世界中,这个问题的难度并不低。如下方的这个牌子为例,正确的POI名称是什么呢?

来看更多的例子:

名称自动生成模型

如上,输入的是多个文本行,输出是这些文本行的标签(是否被选择做为最终名称的一部分),以及顺序。若是不考虑图像信息,这是个NLP问题。能够采用BERT模型训练。把问题定义成一个双任务的学习问题,包括分类任务和回归任务。

把图像信息也加入到模型中。输入是全部文本行的bounding box,使用一个Graph Attention Network将其编码成特征,和BERT模型特征链接起来。最终提高了模型的学习能力。

进一步地,受到微软的工做的启发,高德也使用了VL-Bert模型。名称生成的质量,最终提高到了95%。

这是名称自动生成的一些效果。前3个例子,尽管排版各不相同,模型都可以比较好地学习到名称生成的规则。

固然,如图中的bad case,当挂牌的版式不常见时,模型的预测会出现问题。这也是后面的优化方向。

关于高德视觉团队

由分布在西雅图、硅谷、北京等地的杰出科学家和工程师组成,是高德地图视觉算法核心团队。为地图、导航和出行的新将来解决难题,探索创新技术。涵盖图像理解、视频分析、多源融合等技术,面向地图及高精地图制做、定位、交通及预测、AR导航、辅助驾驶以及信息娱乐等领域。是高德地图高精尖技术发展的核心引擎。