视觉位置识别(VPR)
**视觉位置识别(Visual Place Recognition)**回答一个问题:相机是否曾经到过这里? 给定当前图像和一个由此前访问过的地点组成的数据库,VPR检索出最可能的匹配项——这是回环检测中感知的那一半。它必须在视角变化、光照变化、天气变化以及适度场景变化的情况下依然成功,同时不能对看起来相似但实际上是不同地点的场景产生误判(感知混叠——第二条看起来一样的走廊是VPR的经典克星)。
经典方法是视觉词袋(Bag of Visual Words, BoVW):
- 离线阶段,使用k-means对大量局部描述子(例如ORB)进行聚类,构建一个包含 个单词的视觉词汇表。
- 将每张图像表示为在各视觉单词上的直方图,并用TF-IDF加权,使得普遍存在、信息量低的单词权重降低。
- 通过倒排索引(单词到包含它的图像的映射)检索候选项,即使有数千个关键帧,查找速度依然很快。
TF-IDF加权值得明确展示。若单词 在 个数据库图像中的 个中出现,则其逆文档频率为 :一个出现在每张走廊图像中的单词的 ,对相似度没有任何贡献,而一个稀有单词(一张独特的海报、一个不寻常的角落结构)则会主导得分。每张图像的加权直方图会被归一化,并用L1/L2或余弦相似度进行比较;由于有倒排索引,只有与查询图像至少共享一个单词的图像才会被处理。DBoW2/DBoW3通过分层词汇树(借助粗到细的下降过程以 而非 的线性搜索完成单词分配)实现了这一思路,并被ORB-SLAM、VINS-Mono及许多其他系统所使用。FAB-MAP则是同一检索思想的经典概率化表述。
现代方法用学习得到的全局描述子取代了手工设计的直方图。NetVLAD的核心是对上述量化步骤的一种可微推广:它不再将每个局部特征 硬性分配给最近的聚类中心,而是用权重 进行软分配,并针对每个聚类中心 累加残差:
由此产生一个固定大小的描述子,经过归一化后,用带GPS标签的街景图像(“同一地点、不同外观”作为正样本)通过三元组损失进行端到端训练。Patch-NetVLAD增加了patch级别的重排序;HF-Net在一个网络中同时预测全局和局部特征,形成完整的识别加定位层级结构;而当前系统越来越多地使用基础模型特征(例如基于DINO的描述子)以获得对极端外观变化的鲁棒性。对于同一路线的重复穿越场景(配送机器人、轨道交通),基于序列的匹配——对描述子的短序列而非单张图像进行打分——可以免费获得巨大的鲁棒性提升。
无论是由什么方法产生候选项,SLAM系统都不会仅仅信任检索结果。标准流程是:检索出前k个候选项,然后进行几何验证——将局部特征与候选项进行匹配,在本质矩阵/PnP模型上运行RANSAC,并要求足够多的内点(ORB-SLAM还额外要求在共视关键帧之间保持一致性)。只有经过验证的匹配才会成为回环检测的边,因为一次误检就可能使地图折叠变形。
评估VPR:精确率优先于召回率
对于回环检测而言,这两类错误的代价极不对称。漏检回环(假阴性)只会造成一定的漂移校正损失——地图保持略微弯曲。而通过验证的错误回环(假阳性)则可能摧毁整个地图。因此用于SLAM的VPR被调优为几乎不惜任何召回率代价换取精确率:通常的做法是,系统只对一小部分真实的重访地点做出响应,但几乎从不对错误的地点做出响应,正因如此,论文中经常报告”100%精确率下的召回率”这一指标。这也是为什么多层防御机制(检索分数阈值 → 连续多次匹配上的时间/共视一致性 → 几何验证 → 鲁棒后端)不是过度谨慎,而是标准架构。
常见陷阱
- 词汇表领域不匹配:在室外图像上训练的BoVW词汇表对室内ORB描述子的量化效果不佳,会降低检索质量;应使用(或训练)与你的特征类型及大致领域相匹配的词汇表。
- 结构化环境中的感知混叠:办公室、仓库、停车场和走廊中包含真正近乎相同的视图;检索无法区分它们,因此一致性和验证层必须承担这一任务——在这类环境中,切勿为了”获得更多回环”而降低几何阈值。
- 忽略时间维度:与非常近期的关键帧进行匹配会轻易成功(它们看起来相似,因为只相隔几秒钟),但这毫无意义;系统会将查询周围的一段时间邻域从数据库中排除。
- 视角鲁棒性与外观鲁棒性的权衡:总结整幅图像布局的全局描述子对光照变化鲁棒,但对大幅视角变化较为脆弱;局部特征验证则恰恰相反。检索后验证的流程之所以有效,正是因为这两层以不同的方式失败。
- 数据库增长:朴素的逐关键帧描述子会使检索成本随轨迹长度增长;倒排索引和关键帧剔除机制使长期运行变得可行。
对SLAM的意义
VPR是将视觉里程计升级为完整SLAM的关键:如果不能识别此前访问过的地点,漂移就永远无法被校正。同样的机制还提供了跟踪丢失后的重定位、“绑架机器人”问题的恢复、多会话地图融合,以及协作SLAM中机器人间的回环检测——SLAM系统几乎所有的”全局”能力都依赖于位置识别的可靠工作。