前言:又到春招季!作为国民级出行服务平台,高德业务快速发展,大量校招/社招名额开放,欢迎大家投递简历,详情见文末。为帮助大家更了解高德技术,我们策划了#春招专栏#的系列文章,组织各业务团队的高年级同学以业务科普+技术应用实践为主要内容为大家做相关介绍。
本文是#春招专栏#系列的第 3 篇,根据 高德视觉技术中心基础研发部 负责人郝志会在AT技术讲坛分享的《视觉技术在POI名称自动化生成的实践》内容整理而成,在不影响原意的情况下略作删节。
春招系列回顾
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、文字之间关系、如何命名(定名)…
以下图为例,从原始图像,到自动生成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导航、辅助驾驶以及信息娱乐等领域。是高德地图高精尖技术发展的核心引擎。
春招火热进行中,2022届毕业生看过来!
电子书免费下载
《高德技术2020年刊合辑》
高德技术重磅发布《高德技术2020年刊合辑》电子书,覆盖了大前端、算法、架构、汽车工程、质量等多个领域,以及数篇高德入选顶会论文的解读,分享高德在智慧出行上的最佳技术实践和总结。