图像检索任务指的是,给定查询图像,从图像数据库中找到包含相同或相似实例的图像。本文研究的是高德地图POI信息更新,即根据自有图像源,将每个新增或调整的POI及时制作成数据。这是非常典型的图像检索垂直应用,整套方便背后也包含大量CV技术。本篇我们结合资深CV工程师章鱼的分享,一起研究『高德地图POI信息更新』这一业务背景中,应用到的计算机视觉技术。
⛵ 作者:韩信子@ShowMeAI,章鱼@高德 ⛵ 大厂解决方案系列教程:https://www.showmeai.tech/tutorials/50 ⛵ 本文地址:https://www.showmeai.tech/article-detail/93
一图看懂全文
ShowMeAI社区的技术专家小伙伴们对图像检索的典型算法做了实现,构建了相关应用 ⛵『基于CNN与三元组的图像检索实现』,对细节感兴趣的话,请前往 这里 查看实现代码参考。代码的整理花费了很多心思,欢迎大家 PR 和 Star!
⭐ ShowMeAI官方GitHub:https://github.com/ShowMeAI-Hub/
一、高德图像检索的业务背景
本文应用到的技术是图像检索,应用场景为高德地图,应用点是高德地图的 POI信息更新(在高德图像数据中,POI牌匾和POI一一对应)。
POI:Point of Interest,在电子地图上,POI 代表餐厅、超市、政府机关、旅游景点、交通设施等。POI是电子地图的核心数据。
- POI 数据包含的名称信息、位置信息等,能满足用户的基本需求——使用电子地图“查找目的地”,进而唤起导航服务。
- POI 数据可以支持电子地图提供“搜索附近”、“点评”等功能,这些操作可以提高用户的使用和活跃时长。
- POI 数据还是线上线下连接互动的一个纽带,是基于位置服务(Location Based Service)产业的一个重要组件。
高德地图的业务场景,需要根据自有图像源,将每个新增或调整的 POI及时制作成数据。
一般来讲,短时间片(月度)内,同一地点的 POI 的变化量很低(如图,只有“汤火功夫”POI 是一个新增的挂牌)。因此,从技术实现的角度来看,不能采用『每次都处理全部 POI 』的方案,因为作业成本太高了。更好的实现方案是,将没有变化的 POI 自动化地过滤掉。这个场景任务是非常典型的图像检索任务,其中关键技术图像匹配。
1.1 图像检索的任务定义
图像检索问题定义:给定查询图像(Query),通过分析视觉内容,在大型图像库中(Gallery)中搜索出相似的图像。图像检索一直是计算机视觉领域的一个长期研究课题,在『行人重识别』、『人脸识别』、『视觉定位』等任务中均有广泛的应用。
图像检索的过程需要『图像特征抽取』 『比对检索』两个环节:
1)图像特征提取
通常包括:全局特征、局部特征、辅助特征等,主要是针对不同任务特点进行相应的优化。例如:行人重识别以及人脸识别具有很强的刚性约束,并且具备明显的关键特征(行人/人脸关键点),因此会将人体分割或关键点检测信息融合到模型特征提取中。
2)比对检索
核心技术是度量学习,其目标是在固定维度的特征空间中,约束模型将同类别样本拉近,不同类别样本推远。在深度学习时代,主要有几种经典的结构,均是通过正负样本定义以及损失函数设计上进行优化:
- 对比损失(Contractive Loss)
- 三元组损失(Triplet Loss)
- 中心损失(Center Loss)
1.2 高德业务问题与难点
POI 牌匾的图像检索和学术上主流检索任务(如行人重识别)有着较大的区别,主要包括以下几点:
- 异质数据
- 遮挡影响
- 文本依赖性
1)异质数据
异质数据指的是不同相机拍摄、不同环境、不同条件下的图像差异。比如,在 POI 牌匾检索场景中,有比较严重的异质数据问题。如下图所示,是不同拍摄条件下的异源图像。
由于拍摄相机的品质、拍摄视角的不同,POI 牌匾最终的亮度、形状、清晰度等都存在非常大的差异。如何在差异较大的异质数据中实现 POI 牌匾检索,则是一个非常具有挑战性的问题。
2)遮挡影响
在道路场景中,经常存在树木以及车辆等干扰信息,并且由于拍摄视角原因,拍摄到的 POI 牌匾经常会面临严重的遮挡问题。遮挡给 POI 牌匾检索带来巨大的挑战。
3)文本依赖性
POI 牌匾还有一个独有特性就是对文本强依赖,主要是对 POI 名称文本的依赖。
在该场景下,希望两个牌匾不要匹配。这就需要引入文本特征来增强特征区分性。遮挡问题也同样会影响文本特征的有效表达,因此需要结合图像特征进行权衡。但是文本特征和图像特征来自多个模态,如何将多模信息进行融合也是该业务特有的技术难点。
二、技术实现总体方案
牌匾检索的技术方案主要包括『数据生成』和『模型优化』两块。整体技术框架如下图所示:
2.1 数据生成模块
『数据生成』模块,分为了『冷启动自动生成数据』以及『模型迭代生成数据』两个步骤:
- 【1】利用传统匹配算法 Sift 自动生成模型所需的训练数据,完成模型的冷启动;
- 【2】模型上线后,对线上人工作业结果进行自动挖掘,并组织成训练数据,以迭代模型优化。
2.2 模型优化模块
『模型优化』模块,考虑到牌匾的文本信息比较丰富,因此将视觉信息与文本信息进行融合,高德团队基于三元组损失(Triplet Los)的度量学习框架下设计了一个『多模态检索模型』:
- 设计了『视觉分支』和『文本分支』两部分。『视觉分支』的输入是 POI 牌匾的图像信息,使用双分支进行特征提取;『文本分支』的输入是 POI 牌匾的文本信息,使用BERT进行特征提取。
- 针对视觉信息特征的提取,进一步设计了『全局特征分支』与『局部特征』分支,并分别进行了优化。
三、数据生成模块
为训练检索模型,通常需要进行实例级标注,即按照 POI 牌匾粒度进行标注。但是在不同资料中筛选同一 POI 牌匾是一件非常复杂的工作,如果进行人工标注的话,则会带来高昂的标注成本,并且无法大规模标注。因此,高德设计了一套简单高效的训练数据自动生成方式,用于模型冷启动,整个环节无需任何人工标注。
具体过程为:借鉴传统特征点匹配算法思想,利用 Sift特征点匹配算法 对两趟资料中的所有牌匾进行两两匹配,并通过内点数量对匹配结果进行筛选,即内点数量大于阈值的匹配牌匾视作同一牌匾。
3.1 传统特征点匹配算法存在的问题
传统特征点匹配算法会存在泛化性不足问题,由此生成的训练数据很可能导致模型无法很好学习,具体体现在:
- 【1】训练样本较为简单。
- 【2】类别冲突,即同一牌匾分为多个类别。
- 【3】类别错误,即不同牌匾分为同一类别。
3.2 高德团队的优化方式
【1】采用『多趟资料』匹配结果,提升同一类别下牌匾的多样性;
高德使用了『多趟资料』的匹配结果来生成训练数据。因为在不同资料中,同一牌匾存在多张来自不同视角的拍摄结果,这就保证了同一类别下牌匾的多样性,避免了自动生成的样本都为简单样本问题。
【2】采用『Batch 采样策略』以及『MDR Loss』,来降低模型对错误标签数据的敏感性。
Batch采样策略,即按类别进行采样,而数据中类别总数远远大于 Batch Size,因此可以缓解类别冲突的问题。
MDR Loss 是在 Triplet Loss 基础上设计了根据不同距离区间进行正则化约束的新的度量学习框架,从而减少模型对对噪声样本的过拟合。
下图是 Triplet Loss 和 MDR Loss 的对比示意图。
MDR Loss 距离正则约束,希望正样本(Positive)和 基准样本(Anchor)之间的距离不被拉到无限近,同时负样本(Negative)也不希望被推到无限远。
以类别错误噪声样本来说,不同牌匾被误分为同一类别,按照 Triplet Loss 的优化目标则会强制模型将两者距离学习到无限近。这样的话,模型会过拟合到噪声样本上,从而导致最终效果较差。
四、模型优化模块
为了优化牌匾检索效果,高德的解决方案设计了多模态检索模型,对牌匾中的视觉信息与文本信息进行了融合。
- 针对视觉信息,优化模型全局(Global)特征和局部(Local)特征的提取能力。
- 针对文本信息,使用BERT对牌匾的 OCR 结果进行编码,将其作为辅助特征,并与视觉特征融合后进行度量学习。
4.1 全局特征
通常对于检索任务来说,使用深度学习模型提取到的全局特征具有更高的鲁棒性,可以适应牌匾视角、颜色、光照变化等不同场景。为了进一步提升全局特征的鲁棒性,高德的解决方案主要从以下两方面进行了优化:
- 采用『注意力(Attention)机制』,加强对重要特征的关注。
- 网络 Backbone 的改进,以关注到更多细粒度特征。
1)引入注意力机制
在高德实际业务场景中,存在一些外观相似而细节有一定差异的牌匾,在这种情况下,希望模型可以关注到牌匾中的细粒度信息,比如『牌匾中文字的字体』、『文字排版』或者是『文字内容』本身。
注意力机制,可以帮助模型在大量信息中准确地关注到能够区分不同牌匾更为关键的部分。因此,合理的想法是在网络中引入了注意力模块,让模型学习关键信息,以提升全局特征的辨别能力。
高德团队采用了『空间注意力机制(Spatial Group-wise Enhance,SGE)』。SGE 通过对特征图上的每个空间位置生成一个注意力因子,来调整每个空间位置处特征的重要性。SGE 模块如图所示:
- 首先对特征图进行分组。
- 对每组特征图计算语义特征向量。
- 使用语义特征向量和特征图进行 position-wise 点乘,得到注意力图。
- 将注意力图与特征图进行 position-wise 点乘,以此来增强特征,从而获得在空间上分布更好的语义特征。
2)改进网络 Backbone
为了减少局部特征的损失,可以对网络 Backbone 进行改进:
- 取消 ResNet 网络最后一个 block 中的下采样,使得最终的特征图中包含更多的局部信息。
- 使用 GeM 池化层替代最后一个 Global Average Pooling:GeM是一种可学习的特征聚合方法,Global Max Pooling 和 Global Average Pooling 都是它的特殊情况,使用GeM池化可以进一步提升全局特征鲁棒性。
4.2 局部特征
在针对全局特征进行优化以后,现有模型仍然在以下三个方面表现不够好:
- 截断的牌匾,特征学习质量差,如上图 (a)。
- 遮挡的牌匾,特征中引入一些无关的上下文信息,如上图 (b)。
- 相似但不同的牌匾,难以区分,如上图 ( c)。
针对以上3点,高德的解决方案进一步设计了局部特征分支,让模型更加关注牌匾的『几何』、『纹理』等『局部信息』,与『全局特征』共同做牌匾检索。
针对『局部特征』的提取,主要思路是将牌匾垂直切分成几个部分,分别关注每个部分的局部特征,并对局部特征进行对齐后优化。
对齐操作如上图所示:
- 将特征图进行垂直池化,得到分块的局部特征图。
- 计算两张图局部特征之间的相似度矩阵,然后根据公式1找到最短距离将两张图像进行对齐。
`$displaystyle
S_{i, j}=left{begin{array}{ll}
d_{i, j} & i=1, j=1
S{i-1, j} d{i, j} & i neq 1, j=1
S{i, j-1} d{i, j} & i=1, j neq 1
min (S{i-1, j}, S{i, j-1}) d_{i, j} & i neq 1, j neq 1
end{array}right.$`
- i,j 分别表示两张图中的第i块特征和第j块特征。
- d_{i,j} 表示两张图中第 i 块和第 j 块特征的欧式距离。
通过这种方式进行局部特征对齐,可以很好地提升牌匾在截断、遮挡、检测框不准等情况下的检索效果。
4.3 文本特征
POI 牌匾对文本强依赖,可能存在『仅牌匾名称文本发生变化』的场景。在上述设计的全局特征分支以及局部特征分支,可一定程度上学习到文本特征,但是文本信息在整体信息中占比较小,并且监督信号仅为两张图是否相似,导致文本特征并没有被很好的学习到。
解决的方法是,利用已有的文本 OCR 识别结果,引入 BERT 对 OCR 结果进行编码得到文本特征,作为辅助特征分支和视觉特征进行融合,融合后的特征用于最终的牌匾检索度量学习。
解决方案中的一个细节点:在对牌匾提取 OCR 结果时,为了减少单帧内识别结果不准的影响,利用了一趟资料内同一牌匾的多帧 OCR 结果,并且将所得到的 OCR 结果进行拼接,使用 BERT 对 OCR 结果特征编码时,对来自不同帧的 OCR 结果之间插入 SEP 符号做区分。
五、业务效果
在新的技术方案下,高德 POI 牌匾图像检索取得了非常好的效果。准确率和召回率都大于95%,大幅提升了线上指标,并且模型速度也有了巨大的提升。在优化过程中,有一些非常难的 Case 也在逐渐被解决,如图所示。
(a)、(b)、(c)展示的是此方案之前的 Bad Case(左图为 query 图像,右图为 Rank1 检索结果)。 从 Bad Case 中不难发现,牌匾检索对细粒度特征提取要求非常高,因为这些 Case 普遍特点是具备整体相似性,但是局部特征有区别。这些 Bad Case 也是设计多模态检索模型的初衷,并且也在优化过程逐渐得以解决,如图(d)、(e)、(f)所示。
- 多模态检索模型通过对全局特征优化以及引入局部特征对齐,使得模型更多关注到牌匾上更有区分性的局部特征,如文字信息,文字字体、板式,牌匾纹理等,因此模型对于外观相似的不同牌匾具有更好的区分能力,如图(a) 和图(d)效果对比。
- 此外,由于不同视角牌匾存在遮挡、拍摄时的光照强度不同以及不同相机色彩差异大等因素,部分牌匾只利用视觉特征检索非常困难。因此,通过辅助特征分支加入了 OCR 信息,进一步增强了特征的鲁棒性,使得牌匾检索可以综合考虑牌匾的视觉信息和牌匾中的文本信息进行检索,如图(b) 和图(e)效果对比。
六、总结与下一步优化方向
上述图像检索方案在高德实际业务中应用,帮助完成一定的数据自动化生产。但是模型并不是完美的,仍会存在 Bad Case,可以考虑:
- 半监督学习/主动学习自动补充数据。
- 引入 Transformer 结构。
6.1 半监督学习/主动学习数据挖掘
数据是非常重要的,模型本身是数据驱动的,补充数据对于模型有非常大的帮助,针对性补充数据能帮助模型处理极端的 Case。补充数据的关键是如何挖掘 Corner Case 并自动针对性标注,半监督学习以及主动学习是比较有前景的方法。
1)半监督学习
- 利用有标签数据训练出的模型来对海量无标签数据产生伪标签,进一步标签数据和伪标签数据混合后再优化模型。
- 半监督学习是完全由模型自身产生标签,但是可能导致模型效果存在上限。
2)主动学习
- 利用有标签数据训练出的模型对海量无标签数据进行数据挖掘,并人工标注挖掘出的有价值数据。
- 主动学习则可以一定程度提高半监督学习能达到的上限。
- 有效地结合两者,可以更好地补充训练数据,解决 Corner Case。
6.2 Transformer特征提取与融合
Transformer 是近年来非常有效的模型结构,在 NLP 领域早就大放异彩,大部分预训练模型都采用了它的结构和设计思路。其在计算机视觉领域大量场景任务(分类、检测、分割、跟踪以及行人重识别)上也有优异的表现。
- Transformer 相比于 CNN,具有全局感受野,并且能进行高阶相关性建模,在很多任务的特征提取上有着更好的表征能力。
- Transformer 的输入也很灵活,可以方便地将其他模态信息进行编码,并和图像特征一起输入到模型中,因此其在多模特征融合上也有较大的优势。
一个优化方向是,通过 Transformer 对图像 Patch 的相关性建模来解决 POI 牌匾在遮挡/截断场景下的匹配效果,并通过对文本特征编码来实现多模特征的融合。
参考文献
1 Zhang X, Luo H, Fan X, et al. Alignedreid: Surpassing human-level performance in person re-identificationJ. 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 annotationJ. 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 networksJ. arXiv preprint arXiv:1905.09646, 2019.
ShowMeAI 大厂技术实现方案推荐
- 大厂解决方案系列 | 数据集&代码集(持续更新中):https://www.showmeai.tech/tutorials/50
- ShowMeAI官方GitHub(实现代码):https://github.com/ShowMeAI-Hub/
- 『推荐与广告』大厂解决方案
- 大厂技术实现 | 多目标优化及应用(含代码实现)@推荐与广告计算系列
- 大厂技术实现 | 爱奇艺短视频推荐业务中的多目标优化实践@推荐与计算广告系列
- 大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列
- 『计算机视觉 CV』大厂解决方案
- 大厂技术实现 | 图像检索及其在淘宝的应用@计算机视觉系列
- 大厂技术实现 | 图像检索及其在高德的应用@计算机视觉系列
- 『自然语言处理 NLP』大厂解决方案
- 大厂技术实现 | 详解知识图谱的构建全流程@自然语言处理系列
- 大厂技术实现 | 爱奇艺文娱知识图谱的构建与应用实践@自然语言处理系列
- 『金融科技』大厂解决方案
- 『生物医疗』大厂解决方案
- 『智能制造』大厂解决方案
- 『其他AI垂直领域』大厂解决方案