作者:韩信子@ShowMeAI,章鱼@高德
专栏:计算机视觉 http://www.showmeai.tech/tutorials/51
地址:ShowMeAI知识社区
声明:版权所有,转载请联系平台与作者并注明出处
收藏 ShowMeAI 查看更多精彩内容
做科研的很大一个目的或者说意义是为了实际生产应用,但实际情况是,很多时候我们的科研仅仅止步于科研,难以应用,或者一涉及到实际应用就垮了。实际环境下的应用往往较为复杂,涉及方面更全面,考虑的因素也更多。本文是showmeai上的一篇介绍高德地图中有关图像检索的应用『高德地图POI信息更新』,其中涉及到许多计算机视觉知识的应用,且往下看看,或能有所收获。
图像检索任务指的是,给定查询图像,从图像数据库中找到包含相同或相似实例的图像。本文研究的是高德地图POI信息更新,即根据自有图像源,将每个新增或调整的POI及时制作成数据。这是非常典型的图像检索垂直应用,整套方便背后也包含大量CV技术。本篇我们结合资深CV工程师章鱼的分享,一起研究『高德地图POI信息更新』这一业务背景中,应用到的计算机视觉技术。
本文应用到的技术是图像检索,应用场景为高德地图,应用点是高德地图的 POI信息更新(在高德图像数据中,POI牌匾和POI一一对应)。
POI:Point of Interest,在电子地图上,POI 代表餐厅、超市、政府机关、旅游景点、交通设施等。POI是电子地图的核心数据。
高德地图的业务场景,需要根据自有图像源,将每个新增或调整的 POI及时制作成数据。
一般来讲,短时间片(月度)内,同一地点的 POI 的变化量很低(如图,只有“汤火功夫”POI 是一个新增的挂牌)。因此,从技术实现的角度来看,不能采用『每次都处理全部 POI 』的方案,因为作业成本太高了。更好的实现方案是,将没有变化的 POI 自动化地过滤掉。这个场景任务是非常典型的图像检索任务,其中关键技术图像匹配。
图像检索问题定义:给定查询图像(Query),通过分析视觉内容,在大型图像库中(Gallery)中搜索出相似的图像。图像检索一直是计算机视觉领域的一个长期研究课题,在『行人重识别』、『人脸识别』、『视觉定位』等任务中均有广泛的应用。
图像检索的过程需要『图像特征抽取』+『比对检索』两个环节:
1)图像特征提取
通常包括:全局特征、局部特征、辅助特征等,主要是针对不同任务特点进行相应的优化。例如:行人重识别以及人脸识别具有很强的刚性约束,并且具备明显的关键特征(行人/人脸关键点),因此会将人体分割或关键点检测信息融合到模型特征提取中。
2)比对检索
核心技术是度量学习,其目标是在固定维度的特征空间中,约束模型将同类别样本拉近,不同类别样本推远。在深度学习时代,主要有几种经典的结构,均是通过正负样本定义以及损失函数设计上进行优化:
POI 牌匾的图像检索和学术上主流检索任务(如行人重识别)有着较大的区别,主要包括以下几点:
1)异质数据
异质数据指的是不同相机拍摄、不同环境、不同条件下的图像差异。比如,在 POI 牌匾检索场景中,有比较严重的异质数据问题。如下图所示,是不同拍摄条件下的异源图像。
由于拍摄相机的品质、拍摄视角的不同,POI 牌匾最终的亮度、形状、清晰度等都存在非常大的差异。如何在差异较大的异质数据中实现 POI 牌匾检索,则是一个非常具有挑战性的问题。
2)遮挡影响
在道路场景中,经常存在树木以及车辆等干扰信息,并且由于拍摄视角原因,拍摄到的 POI 牌匾经常会面临严重的遮挡问题。遮挡给 POI 牌匾检索带来巨大的挑战。
3)文本依赖性
POI 牌匾还有一个独有特性就是对文本强依赖,主要是对 POI 名称文本的依赖。
在该场景下,希望两个牌匾不要匹配。这就需要引入文本特征来增强特征区分性。遮挡问题也同样会影响文本特征的有效表达,因此需要结合图像特征进行权衡。但是文本特征和图像特征来自多个模态,如何将多模信息进行融合也是该业务特有的技术难点。
牌匾检索的技术方案主要包括『数据生成』和『模型优化』两块。整体技术框架如下图所示:
『数据生成』模块,分为了『冷启动自动生成数据』以及『模型迭代生成数据』两个步骤:
『模型优化』模块,考虑到牌匾的文本信息比较丰富,因此将视觉信息与文本信息进行融合,高德团队基于三元组损失(Triplet Los)的度量学习框架下设计了一个『多模态检索模型』:
为训练检索模型,通常需要进行实例级标注,即按照 POI 牌匾粒度进行标注。但是在不同资料中筛选同一 POI 牌匾是一件非常复杂的工作,如果进行人工标注的话,则会带来高昂的标注成本,并且无法大规模标注。因此,高德设计了一套简单高效的训练数据自动生成方式,用于模型冷启动,整个环节无需任何人工标注。
具体过程为:借鉴传统特征点匹配算法思想,利用 Sift特征点匹配算法 对两趟资料中的所有牌匾进行两两匹配,并通过内点数量对匹配结果进行筛选,即内点数量大于阈值的匹配牌匾视作同一牌匾。
传统特征点匹配算法会存在泛化性不足问题,由此生成的训练数据很可能导致模型无法很好学习,具体体现在:
【1】采用『多趟资料』匹配结果,提升同一类别下牌匾的多样性;
高德使用了『多趟资料』的匹配结果来生成训练数据。因为在不同资料中,同一牌匾存在多张来自不同视角的拍摄结果,这就保证了同一类别下牌匾的多样性,避免了自动生成的样本都为简单样本问题。
【2】采用『Batch 采样策略』以及『MDR Loss』,来降低模型对错误标签数据的敏感性。
Batch采样策略,即按类别进行采样,而数据中类别总数远远大于 Batch Size,因此可以缓解类别冲突的问题。
MDR Loss 是在 Triplet Loss 基础上设计了根据不同距离区间进行正则化约束的新的度量学习框架,从而减少模型对对噪声样本的过拟合。
下图是 Triplet Loss 和 MDR Loss 的对比示意图。
MDR Loss 距离正则约束,希望正样本(Positive)和 基准样本(Anchor)之间的距离不被拉到无限近,同时负样本(Negative)也不希望被推到无限远。
以类别错误噪声样本来说,不同牌匾被误分为同一类别,按照 Triplet Loss 的优化目标则会强制模型将两者距离学习到无限近。这样的话,模型会过拟合到噪声样本上,从而导致最终效果较差。
为了优化牌匾检索效果,高德的解决方案设计了多模态检索模型,对牌匾中的视觉信息与文本信息进行了融合。
通常对于检索任务来说,使用深度学习模型提取到的全局特征具有更高的鲁棒性,可以适应牌匾视角、颜色、光照变化等不同场景。为了进一步提升全局特征的鲁棒性,高德的解决方案主要从以下两方面进行了优化:
1)引入注意力机制
在高德实际业务场景中,存在一些外观相似而细节有一定差异的牌匾,在这种情况下,希望模型可以关注到牌匾中的细粒度信息,比如『牌匾中文字的字体』、『文字排版』或者是『文字内容』本身。
注意力机制,可以帮助模型在大量信息中准确地关注到能够区分不同牌匾更为关键的部分。因此,合理的想法是在网络中引入了注意力模块,让模型学习关键信息,以提升全局特征的辨别能力。
高德团队采用了『空间注意力机制(Spatial Group-wise Enhance,SGE)』。SGE 通过对特征图上的每个空间位置生成一个注意力因子,来调整每个空间位置处特征的重要性。SGE 模块如图所示:
2)改进网络 Backbone
为了减少局部特征的损失,可以对网络 Backbone 进行改进:
在针对全局特征进行优化以后,现有模型仍然在以下三个方面表现不够好:
针对以上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,可以考虑:
数据是非常重要的,模型本身是数据驱动的,补充数据对于模型有非常大的帮助,针对性补充数据能帮助模型处理极端的 Case。补充数据的关键是如何挖掘 Corner Case 并自动针对性标注,半监督学习以及主动学习是比较有前景的方法。
1)半监督学习
2)主动学习
Transformer 是近年来非常有效的模型结构,在 NLP 领域早就大放异彩,大部分预训练模型都采用了它的结构和设计思路。其在计算机视觉领域大量场景任务(分类、检测、分割、跟踪以及行人重识别)上也有优异的表现。
一个优化方向是,通过 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.