本文目录导读:

闭环检测词袋(Bag of Words,BoW)是视觉SLAM(同步定位与地图构建)和图像检索领域中一种核心方法,主要用于判断机器人是否回到了一个之前已经访问过的位置。
下面为你详细解释这个概念,包括其原理、关键技术和相关应用。
什么是闭环检测?为什么需要它?
- 定义:闭环检测,也称为回环检测,是指机器人或自动驾驶车辆在移动过程中,能够识别出“我之前来过这里”的能力,它要判断当前传感器(通常是摄像头)看到的场景,与之前某个时刻看到的场景是同一个地方。
- 重要性:
- 消除累积误差:SLAM中的里程计(基于运动估计)会随时间推移产生漂移误差,导致地图变形,闭环检测能提供一个强约束,将这些误差“拉回”到正确的位置。
- 全局一致性:它能保证最终构建的地图是全局连贯的,而不是局部正确但全局扭曲的。
- 重定位:当机器人被移动或丢失定位时,可以通过闭环检测快速找到自己在地图中的位置。
什么是“词袋”(Bag of Words)?
词袋模型最初来源于文本检索,它的核心思想是:将一段文本(或一幅图像)表示为一个由“单词”构成的“包”,忽略其顺序和语法,只关注每个单词出现的频率。
类比到图像:
- 单词:不再是字母,而是图像中的局部特征(如SIFT、SURF、ORB特征),更准确地说,是将大量图像中提取的特征通过聚类算法(如K-means)生成的“视觉词汇”。
- 字典:由所有这些“视觉词汇”组成的集合。
- 词袋向量:对于一张新图像,提取其特征,然后在字典中查找每个特征对应的“单词”,统计每个单词出现的次数,形成一个高维的稀疏向量,这个向量就被称为该图像的 “词袋” 表示。
基于词袋的闭环检测步骤
一个典型的基于词袋的闭环检测系统通常包含以下步骤:
第一步:构建视觉词典(离线阶段)
- 特征提取:从大量训练图像中提取特征点及其描述子(如ORB)。
- 词汇聚类:使用K-means等聚类算法,将所有描述子聚类成
K个簇,每个簇的中心就是一个“视觉词汇”。 - 构建层次树状词典:为了提高检索效率,通常不会只用一层聚类,而是构建一个层次化的树(常称为 K-D树),树的分支因子为
k,深度为L,那么词典能表达的最大词汇数为k^L,这能实现很快速的搜索和匹配。
第二步:图像表示(在线阶段)
- 提取特征:对于当前图像,提取其特征点及其描述子。
- 计算词袋向量:将每个特征的描述子输入到词典树中,通过逐层比较距离,最终找到其所属的叶子节点(视觉词汇)。
- 统计频率:统计图像中每个视觉词汇出现的次数,形成词频向量,通常会使用 TF-IDF(词频-逆文档频率) 加权,让常见词权重更低,罕见词权重更高。
第三步:闭环检测与验证(在线阶段)
- 查询历史图像:将当前图像的词袋向量,与之前所有关键帧的词袋向量进行快速比较,使用 余弦相似度 或 L1距离 等度量方法。
- 候选筛选:找到相似度最高的几个历史帧作为闭环候选。
- 时间一致性检验:闭环检测的成功不能只靠一帧,通常要求连续多帧(例如3帧)都与同一个历史帧相匹配,以排除误报。
- 空间几何验证:这一步最关键,也是剔除误报的“终极武器”,对当前帧和候选帧的特征点进行几何匹配(如利用对极几何求解基础矩阵或单应矩阵),并计算内点数量,这一步能有效过滤掉“像但不同”的场景(例如两个房间看起来很像,但家具布局不同)。
优点与缺点
| 方面 | 优点 | 缺点 |
|---|---|---|
| 速度 | 非常快,词袋向量是稀疏的,检索和比较计算量很小,适合实时应用。 | 检索速度依赖于词典的大小和索引结构。 |
| 鲁棒性 | 对光照变化、视角变化、部分遮挡具有一定的鲁棒性,因为词袋关注的是特征的“有无”和“多少”,而不是精确匹配。 | 对剧烈的光照变化、季节变化、动态物体干扰仍然敏感。 |
| 普适性 | 不需要预先知道环境的结构,完全基于视觉特征,适用于各种场景(室内、室外)。 | 依赖于训练词典的数据集,如果场景与训练数据差异过大,效果会下降。 |
| 分辨率 | 能够区分相似但不同的场景(通过几何验证)。 | 在某些高度重复的环境(如长廊、无数相同的房间)中容易产生误报。 |
经典框架与实现
- DBoW2 / DBoW3:这是目前SLAM领域最流行的词袋库之一(ORB-SLAM、VINS-Mono等系统都在使用),它支持ORB、SIFT、SURF等特征,实现了高效的层次化词典、TF-IDF加权和快速检索。
- FAB-MAP:一个更为复杂的概率框架,使用了贝叶斯滤波器来融合历史信息,并考虑了特征的出现和共现概率,以减少感知混淆。
在SLAM中的应用实例(以ORB-SLAM为例)
ORB-SLAM提供了一个完美的实践案例:
- 系统初始化:加载预训练好的ORB词典(DBoW2格式)。
- 生成关键帧词袋:每个新的关键帧,都将其ORB特征转换为一个词袋向量。
- 闭环候选搜索:当前关键帧通过其词袋向量,在关键帧数据库中快速检索出若干闭环候选。
- 候选验证:对每个候选帧,进行两个层面的验证:
- 词袋连续性:确认候选帧的相邻帧也与当前帧相似。
- 几何一致性:利用对极几何求解位姿,并检查匹配点是否满足约束。
- 优化图:一旦确认闭环,就在全局优化中增加这个闭环约束,从而纠正漂移误差。
新的发展趋势
- 基于学习的特征:使用深度学习(如SuperPoint、NetVLAD)提取更鲁棒、更压缩的特征,取代手工特征。
- 隐式表示:使用深度神经网络直接将图像编码成一个更紧凑的全局描述子(如NetVLAD输出),或者直接进行端到端的闭环检测。
- 语义辅助:利用语义信息(如识别出门、窗、标志等物体)来提高闭环检测的准确性和鲁棒性。
- 多模态融合:融合视觉、激光雷达、IMU(惯性测量单元)等多种传感器信息进行闭环检测。
闭环检测词袋是一种高效而经典的解决方案,它将图像转换为一个“词汇”频率的统计向量,从而实现了快速的场景检索,尽管面临着感知混淆和极端环境变化等挑战,但通过结合时间一致性和几何验证等手段,它依然是视觉SLAM系统中最核心、最可靠的组件之一,如果你正在研究SLAM或图像检索,深入理解词袋原理及其在ORB-SLAM等系统中的应用,会是一个很好的起点。