图像检索在高德地图POI数据生产中的应用

简介: 高德通过自有海量的图像源,来保证现实世界的每一个新增的POI及时制作成数据。在较短时间间隔内(小于月度),同一个地方的POI 的变化量是很低的。

image.png

作者 | 灵笼、怀迩
来源 | 阿里技术公众号

一 背景

POI 是 Point of Interest 的缩写。在电子地图上,POI 代表餐厅、超市、政府机关、旅游景点、交通设施等等 。POI是电子地图的核心数据。对普通用户而言,POI 数据包含的名称和位置信息,能够满足其使用电子地图“查找目的地”,进而唤起导航服务的基本需求;对电子地图而言,通过提供“搜索附近”、“点评”等操作,可提高用户的活跃时长。另外,POI数据是线上线下连接互动的一个纽带,是基于位置服务(Location Based Service)产业的一个重要组件。

高德通过自有海量的图像源,来保证现实世界的每一个新增的POI及时制作成数据。在较短时间间隔内(小于月度),同一个地方的POI 的变化量是很低的,如下图所示,只有“汤火功夫”POI是一个新增的挂牌。

image.png

图1. 同一地方上不同时间的POI牌匾对比

如果对全部POI进行处理的话,则会带来高昂的作业成本,因此需要对其中没有变化的POI进行自动化过滤,其中关键技术能力就是图像匹配,该场景是一个较为典型的图像检索任务。

1 技术定义

图像检索问题定义:给定查询图像(Query),通过分析视觉内容,在大型图像库中(Gallery)中搜索出相似的图像。该方向一直是计算机视觉领域的一个长期研究课题,在行人重识别、人脸识别、视觉定位等任务中均有广泛的研究。图像检索的核心技术是度量学习,其目标是在固定维度的特征空间中,约束模型将同类别样本拉近,不同类别样本推远。在深度学习时代,主要有几种经典的结构,包括:对比损失(contractive loss)、三元组损失(triplet loss)、中心损失(center loss)等,均是通过正负样本定义以及损失函数设计上进行优化。此外,图像检索还有一个必不可少的要素就是特征提取,通常包括:全局特征、局部特征、辅助特征等,主要是针对不同任务特点进行相应的优化,例如:行人重识别以及人脸识别具有很强的刚性约束,并且具备明显的关键特征(行人/人脸关键点),因此会将人体分割或关键点检测信息融合到模型特征提取中。

2 问题特点

POI牌匾的图像检索和学术上主流检索任务(如行人重识别)有着较大的区别,主要包括以下几点:异源数据、遮挡严重以及文本依赖性。

异源数据

行人重识别任务也存在异源数据问题,但是该任务的异源更多是不同相机拍摄以及不同场景的区别。而在POI牌匾检索场景中,存在更严重的异源数据问题,如下图所示:

image.png

图2. 不同拍摄条件下的异源图像

左图来自低质量相机,并且是前向拍摄;右图来自高质量相机,并且是侧向拍摄;因为相机拍摄质量以及拍摄视角不同,这就导致POI牌匾的亮度、形状、清晰度等都存在非常大的差异。而如何在差异较大的异源数据中实现POI牌匾检索,是一个非常具有挑战性的问题。

遮挡严重

在道路场景中,经常存在树木以及车辆等干扰信息,并且由于拍摄视角原因,拍摄到的POI牌匾经常会面临严重的遮挡问题,如下图所示:

image.png

图3. 遮挡严重的POI牌匾示例

而且该遮挡场景还是不规则的,导致很难对两个牌匾进行较好地特征对齐,这给POI牌匾检索带来巨大的挑战。

文本依赖性

POI牌匾还有一个独有特性就是对文本强依赖,主要是对POI名称文本的依赖。在下图场景中,两个牌匾的整体布局以及颜色都非常相似,但是其中POI名称发生了变化。而在该场景下,我们希望两个牌匾不要匹配,这就需要引入文本特征来增强特征区分性。不过,由于遮挡原因也会导致文本特征不同,因此需要结合图像特征进行权衡。而且,文本特征和图像特征来自多个模态,如何将多模信息进行融合也是该业务特有的技术难点。

image.png

图4. 仅文本变化的POI牌匾示例

二 技术方案

牌匾检索的技术方案主要包括数据迭代和模型优化两块。在数据生成部分,我们分为了冷启动自动生成数据以及模型迭代生成数据两个步骤。在模型优化部分,我们设计了一个多模态检索模型,包括视觉分支和文本分支两部分,主要是考虑到牌匾的文本信息比较丰富,因此将视觉信息与文本信息进行融合。针对视觉信息特征的提取,我们进一步设计了全局特征分支与局部特征分支,并分别进行了优化。整体技术框架如下图所示:

image.png

图5. 整体技术方案

首先利用传统匹配算法Sift自动生成模型所需的训练数据,完成模型的冷启动;并且在模型上线后,对线上人工作业结果进行自动挖掘,并组织成训练数据,以迭代模型优化。多模态检索模型是基于三元组损失(Triplet Los)的度量学习框架下进行设计的,输入包括了:1)POI牌匾的图像信息;2)POI牌匾的文本信息。图像信息使用双分支进行特征提取,文本信息使用BERT进行特征提取,最后再将文本特征与视觉特征进行融合。

1 数据

为训练检索模型,通常需要进行实例级标注,即按照POI牌匾粒度进行标注。而在不同资料中筛选同一POI牌匾是一件非常复杂的工作,如果进行人工标注的话,则会带来高昂的标注成本,并且无法大规模标注。因此,我们设计了一套简单高效的训练数据自动生成方式,可用于模型冷启动,整个环节无需任何人工标注。

我们借鉴了传统特征点匹配算法思想,利用Sift特征点匹配算法对两趟资料中的所有牌匾进行两两匹配,并通过内点数量对匹配结果进行筛选,即内点数量大于阈值的匹配牌匾视作同一牌匾。通常来说,传统特征点匹配算法会存在泛化性不足问题,由此生成的训练数据很可能导致模型无法很好学习,具体体现在:1)训练样本较为简单;2)类别冲突,即同一牌匾分为多个类别;3)类别错误,即不同牌匾分为同一类别。因此,我们针对该问题进行了相应优化:1)采用多趟资料匹配结果,提升同一类别下牌匾的多样性;2)采用Batch采样策略以及MDR loss[2]来降低模型对错误标签数据的敏感性。

具体来说,对于样本多样性问题,我们使用了多趟资料的匹配结果来生成训练数据,因为在不同资料中同一牌匾存在多张来自不同视角的拍摄结果,这就保证了同一类别下牌匾的多样性,避免了自动生成的样本都为简单样本问题。Batch采样策略即按类别进行采样,而数据中类别总数远远大于batch size,因此可以缓解类别冲突的问题。MDR loss是在Triplet loss基础上设计了根据不同距离区间进行正则化约束的新的度量学习框架,从而减少模型对对噪声样本的过拟合。

image.png

图6. MDR loss示意图,和Triplet loss相比增加了距离正则约束

图6 是Triplet loss和MDR loss的对比示意图。MDR loss希望正样本和anchor之间的距离不被拉到无限近,同时负样本也不希望被推到无限远。以类别错误噪声样本来说,不同牌匾被误分为同一类别,按照Triplet loss的优化目标则会强制模型将两者距离学习到无限近,这样的话,模型会过拟合到噪声样本上,从而导致最终效果较差。

2 模型

为了优化牌匾检索效果,我们融合了牌匾中的视觉信息与文本信息,设计了多模态检索模型。针对视觉信息,我们优化了模型全局特征和局部特征的提取能力。针对文本信息,我们使用BERT对牌匾的OCR结果进行编码,将其作为辅助特征,并与视觉特征融合后进行度量学习。

全局特征

通常对于检索任务来说,使用深度学习模型提取到的全局特征更为鲁棒,可以适应牌匾视角、颜色、光照变化等不同场景。为了进一步提升全局特征的鲁棒性,我们主要从以下两方面进行了优化:1)采用Attention机制,加强对重要特征的关注;2)网络backbone的改进,以关注到更多细粒度特征。

在我们的业务场景中,存在一些外观相似而细节有一定差异的牌匾,如图8 (c) 所示,在这种情况下,我们希望模型可以关注到牌匾中的细粒度信息,比如牌匾中文字的字体、文字排版或者是文字内容本身。而注意力机制则可以帮助模型在大量信息中准确地关注到能够区分不同牌匾更为关键的部分。因此,我们在网络中引入了注意力模块,让模型学习关键信息,以提升全局特征的辨别能力。我们采用了空间注意力机制SGE(Spatial Group-wise Enhance)[4],SGE通过对特征图上的每个空间位置生成一个注意力因子来调整每个空间位置处特征的重要性。SGE模块如图7所示。它首先对特征图进行了分组,然后对每组特征图计算语义特征向量,使用语义特征向量和特征图进行position-wise点乘,得到注意力图,然后将注意力图与特征图进行position-wise点乘,以此来增强特征,从而获得在空间上分布更好的语义特征。

image.png

图7. SGE示意图,引入了空间注意力机制

为了减少局部特征的损失,我们对网络backbone进行了改进,取消了ResNet网络最后一个block中的下采样,使得最终的特征图中包含更多的局部信息。除此之外,我们使用GeM[3]池化层替代了最后一个global average pooling,GeM是一种可学习的特征聚合方法,global max pooling和global average pooling都是它的特殊情况,使用GeM池化可以进一步提升全局特征鲁棒性。

局部特征

在针对全局特征进行优化以后,现有模型仍然在以下三个方面表现不够好:1)牌匾截断的情况,特征学习质量差,如图8(a);2)遮挡的牌匾,特征中引入一些无关的上下文信息,如图8(b);3)相似但不同的牌匾难以区分,如图8(c)。因此,我们进一步设计了局部特征分支[1],让模型更加关注牌匾的几何、纹理等局部信息,与全局特征共同做牌匾检索。

image.png

(a)

image.png

(b)

image.png

(c)

图8. 需局部特征优化的不同示例,(a)截断 (b)遮挡(c)文本变化

针对局部特征的提取,我们主要的思路是将牌匾垂直切分成几个部分,分别关注每个部分的局部特征[7],并对局部特征进行对齐后优化。对齐操作如下图9所示,首先将特征图进行垂直池化,得到分块的局部特征图,再计算两张图局部特征之间的相似度矩阵,然后根据公式1找到最短距离将两张图像进行对齐,其中,i,j分别表示两张图中的第i块特征和第j块特征,dij表示两张图中第i块和第j块特征的欧式距离。

image.png

公式1. 局部对齐计算公式

image.png

图9. POI牌匾局部对齐示意图

通过这种方式进行局部特征对齐,可以很好地提升牌匾在截断、遮挡、检测框不准等情况下的检索效果。

文本特征

POI牌匾对文本强依赖,可能存在仅牌匾名称文本发生变化的场景。我们设计的全局特征分支以及局部特征分支,虽然可一定程度上学习到文本特征,但是文本信息在整体信息中占比较小,并且监督信号仅为两张图是否相似,导致文本特征并没有被很好的学习到。因此,我们利用已有的文本OCR识别结果,并引入BERT对OCR结果进行编码得到文本特征,该特征作为辅助特征分支和视觉特征进行融合,融合后的特征用于最终的牌匾检索度量学习。值得注意的是,在对牌匾提取OCR结果时,为了减少单帧内识别结果不准的影响,我们利用了一趟资料内同一牌匾的多帧OCR结果,并且将所得到的OCR结果进行拼接,使用BERT对OCR结果特征编码时,对来自不同帧的OCR结果之间插入符号做区分。

3 模型效果

在新的技术方案下,POI牌匾图像检索取得了非常好的效果,准确率和召回率都大于95%,大幅提升了线上指标,并且模型速度也有了巨大的提升。我们随机选择了一些匹配结果,如图10所示。

image.png

图10. 评测集中随机抽取的POI牌匾检索结果

我们在优化过程中,有一些非常难的Case也在逐渐被解决,如下图11所示:

image.png

图11. 评测集中难例展示,(a)(b)(c)是优化前的错误检索结果,(d)(e)(f)是优化后的检索结果

图(a)、(b)、(c)展示的是优化前的Bad case(左图为query图像,右图为Rank1检索结果),从Bad case中我们不难发现,牌匾检索对细粒度特征提取要求非常高,因为这些case普遍特点是具备整体相似性,但是局部特征有区别。这些Bad case就是我们设计的多模态检索模型的初衷,并且也在优化过程逐渐得以解决,如图(d)、(e)、(f)所示。我们提出的多模态检索模型通过对全局特征优化以及引入局部特征对齐,使得模型更多关注到牌匾上更有区分性的局部特征,如文字信息,文字字体、板式,牌匾纹理等,因此我们的模型对于外观相似的不同牌匾具有更好的区分能力,如图(a)和图(d)效果对比。此外,由于不同视角牌匾存在遮挡、拍摄时的光照强度不同以及不同相机色彩差异大等因素,部分牌匾只利用视觉特征检索非常困难。因此,我们通过辅助特征分支加入了OCR信息,进一步增强了特征的鲁棒性,使得牌匾检索可以综合考虑牌匾的视觉信息和牌匾中的文本信息进行检索,如图(b)和图(e)效果对比。

三 未来发展和挑战

图像检索是在高德地图数据自动化生产中的一次尝试,取得了不错的效果,并且已在实际业务中使用。但是模型并不是完美的,仍会存在Corner case,为了解决这些case,我们未来将会从半监督学习/主动学习自动补充数据,以及引入Transformer[9,10]优化特征提取和融合两方面进行探讨。

1 数据:基于半监督学习/主动学习的数据挖掘

数据是非常重要的,因为模型很难做到完美,总是会存在Corner case,而解决Corner case的一个非常高效的手段就是针对性补充数据。补充数据的关键是如何挖掘Corner case以及如何自动标注,该方向也是目前学术的研究热点,即半监督学习以及主动学习。半监督学习利用有标签数据训练出的模型来对海量无标签数据产生伪标签,进一步标签数据和伪标签数据混合后再优化模型。主动学习是利用有标签数据训练出的模型对海量无标签数据进行数据挖掘,并人工标注挖掘出的有价值数据。两者区别在于是否需要部分人工标注,半监督学习是完全由模型自身产生标签,但是可能导致模型效果存在上限,而主动学习则可以一定程度可提高该上限,因此未来需要深入研究两者的结合,从而更好的补充训练数据,解决Corner case。

2 模型:基于Transformer的特征提取与融合

Transformer是目前学术的研究热点,大量的工作已证明其在分类、检测、分割、跟踪以及行人重识别等任务上的有效性。和CNN相比,Transformer具有全局感受野以及高阶相关性建模的特点,使其在特征提取上有着更好的表征能力。此外,Transformer的输入较为灵活,可以方便地将其他模态信息进行编码,并和图像特征一起输入到模型中,因此其在多模特征融合上也有较大的优势。综上来看,Transformer可以通过对图像Patch的相关性建模来解决POI牌匾在遮挡/截断场景下的匹配效果,并且可以通过对文本特征编码来实现多模特征的融合。

本文参考文献

[1] Zhang X, Luo H, Fan X, et al. Alignedreid: Surpassing human-level performance in person re-identification[J]. arXiv preprint arXiv:1711.08184, 2017.
[2]Kim, Yonghyun, and Wonpyo Park. "Multi-level Distance Regularization for Deep Metric Learning." arXiv preprint arXiv:2102.04223,2021.
[3]Radenović F, Tolias G, Chum O. Fine-tuning CNN image retrieval with no human annotation[J]. IEEE transactions on pattern analysis and machine intelligence, 2018, 41(7): 1655-1668.
[4]Li X, Hu X, Yang J. Spatial group-wise enhance: Improving semantic feature learning in convolutional networks[J]. arXiv preprint arXiv:1905.09646, 2019.

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis HyperLogLog 是什么?这些场景使用它~

作者 | 就是码哥呀来源 | 码哥字节在移动互联网的业务场景中,数据量很大,我们需要保存这样的信息:一个 key 关联了一个数据集合,同时对这个数据集合做统计。统计一个 APP 的日活、月活数;统计一个页面的每天被多少个不…

matlab三角形分割,MATLAB 2014b及以上版本中带有画家渲染器的三角形拆分补丁

在解决实际问题之前,这是一个值得怀疑的解决方法:对角线只是三角形之间的空白区域,所以我们看到的是补丁后面的白色空间.愚蠢的想法:让我们用匹配的颜色填充该空间而不是白色.为此,我们将复制所有对象,并通过一个tiiiiny位来抵消新对象.码:hi…

网易云音乐音视频算法的 Serverless 探索之路

简介: 网易云音乐最初的音视频技术大多都应用在曲库的数据处理上,基于音视频算法服务化的经验,云音乐曲库团队与音视频算法团队一起协作,一起共建了网易云音乐音视频算法处理平台,为整个云音乐提供统一的音视频算法处理…

小小的 likely 背后却大有玄机!

作者 | 张彦飞allen来源 | 开发内功修炼今天我给大家分享一个内核中常用的提升性能的小技巧。理解了它对你一定大有好处。在内核中很多地方都充斥着 likely、unlikely 这一对儿函数的使用。随便揪两处,比如在 TCP 连接建立的过程中的这两个函数。//file: net/ipv4/t…

阿里云马涛:因云进化的基础软件

简介: 基础软件的云原生化。 编者按:2021 年10 月20 日,在2021 云栖大会云计算产业升级峰会上,阿里云“因云而生”云原生心智大图正式发布,包含弹性计算、云网络、基础产品、基础设施、操作系统、云安全、开放平台等7个…

阿里云ECI如何6秒扩容3000容器实例?

简介: 2021年云栖大会现场,阿里云工程师演示了在6秒时间内成功启动3000个ECI,并全部进入到Running状态。本文将为你揭开阿里云ECI是如何做到极速扩容的。 引言 根据最新CNCF报告,有超过90%的用户在生产环境使用容器,…

巧用友盟+U-APM 实现移动端性能优化—启动速度

简介: 移动端性能对用户体验、留存有着至关重要的影响,作为开发者是不是被这样吐槽过,“这个 APP 怎么这么大?”、“怎么一直在 APP 封面图转悠,点不进去”、“进入详情效果有些卡”、“用 4G 使用你们的 APP&#xff…

第25版 OpenStack Yoga 已发布

OpenStack社区今日正式发布第25版-Yoga,该版本通过支持先进的硬件技术如SmartNIC DPUs,优化与云原生软件如Kubernetes、Prometheus等的集成以及减少技术债等方式来保持OpenStack内核的稳定性与可靠性。 OpenStack作为开源基础设施即服务(Iaa…

项目实战总结以及接入U-APM

简介: 导致 App 性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线、系统函数、编程范式、数据结构等导致的。即便是较有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”&#xf…

oracle redo 200mb,Oracle的redo log在各场景下的恢复

Oracle的redo log非常重要,redo log损坏将导致数据库开法开启或数据丢失,针对redo log在各种场景下如何打开或恢复数据库,特别模拟测试说明:各场景包括如下(共6个场景):场景一.非归档下inactive状态的redo 恢复场景二.非归档下act…

站在原地就是退步——除了死磕通道,云通讯服务商还该做些什么?

受访嘉宾:吴佳钊,杭州云片网络科技有限公司联合创始人、CTO 当前,全球通信云已经步入2.0时代,最大的变化在于通信形式的变革:传统短信语音的通信形式将逐步向包括即时通讯IM实时音视频RTC的互联网通信转变。尤其在5G时…

Cube 技术解读 | 详解「支付宝」全新的卡片技术栈

简介: 魔方卡片(Cube),让 App 首页实现敏捷更新。 CodeHub#7 正式落幕,来自蚂蚁集团的技术专家「京君」与掘金社区的开发者们分享了「支付宝」全新的卡片技术栈——魔方卡片(Cube)。 京君围绕 C…

庖丁解InnoDB之REDO LOG

简介: 数据库故障恢复机制的前世今生一文中提到,今生磁盘数据库为了在保证数据库的原子性(A, Atomic) 和持久性(D, Durability)的同时,还能以灵活的刷盘策略来充分利用磁盘顺序写的性能,会记录REDO和UNDO日志,即ARIES方…

Web 自动化神器,批量下载美图,可直接导入使用

‍‍作者 | 小碗汤来源 | 进击云原生今天为大家分享一款前端自动化操作神器: Automa。Automa介绍它是一款 Chrome 插件,即使你不会写代码,也能按照自己的需求,完成一系列自动化操作。利用它,你可以将一些重复性的任务实现自动化、…

RocketMQ 5.0 POP 消费模式探秘

简介: POP Consumer—使客户端无状态,更轻量! 作者:凯易&耘田 前言:随着 RocketMQ 5.0 preview 的发布,5.0 的重大特性逐步与大家见面。POP Consumer 作为 5.0 的一大特性,POP 消费模式展现…

【ESSD技术解读-01】 云原生时代,阿里云块存储 ESSD 快照服务如何被企业级数据保护所集成?

简介: 本文描述了阿里云块存储快照服务基于高性能 ESSD 云盘提升快照服务性能,提供轻量、实时的用户体验及揭秘背后的技术原理。依据行业发展及云上数据保护场景,为企业用户及备份厂商提供基于快照高级特性的数据保护的技术方案,满…

一把王者的时间,我就学会了Nginx

作者 | 步尔斯特来源 | CSDN博客Nginx 简介Nginx("engine x")是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有&…

【ESSD技术解读-02】企业级利器,阿里云 NVMe 盘和共享存储

简介: 当前 NVMe 云盘结合了业界最先进的软硬件技术,在云存储市场,首创性同时实现了 NVMe 协议 共享访问 IO Fencing 技术。它在 ESSD 之上获得了高可靠、高可用、高性能,同时基于 NVMe 协议实现了丰富的企业特性,如…

php数组json函数,php数组转json的函数是什么

php数组转json的函数是json_encode()。json_encode()函数可以对变量进行JSON编码,将其转换为json字符串数据,语法格式“json_encode (value)”。本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑php数组如何转为json&#xff1…

使用友盟+的APM服务实现对移动端APP的性能监控

简介: 对于信息系统服务,一般我们的重点监控对象都是核心的后端服务,通常会采用一些主流的APM(Application Performance Management)框架进行监控、告警、分析。那么对于移动端的APP、小程序的运行时状态如何进行实时监控与分析呢&#xff1f…