共计 4867 个字符,预计需要花费 13 分钟才能阅读完成。
前言:又到春招季!作为国民级出行服务平台,高德业务疾速倒退,大量校招 / 社招名额凋谢,欢送大家投递简历,详情见文末。为帮忙大家更理解高德技术,咱们策动了 # 春招专栏 # 的系列文章,组织各业务团队的高年级同学以 业务科普 + 技术利用实际 为次要内容为大家做相干介绍。
本文是 #春招专栏# 系列的第 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 导航、辅助驾驶以及信息娱乐等畛域。是高德地图高精尖技术倒退的外围引擎。