在ORB-SLAM和Kintinuous中都使用到了一种闭环检测算法DBoW2,下面结合论文对该算法做详细介绍。
DBow2算法主要用于重定位或者称作闭环检测,英文叫loop closure或者place recognition。DBoW2算法中使用的特征点是ORB特征,这是一种结合了FAST特征和BRIEF描述子的特征(值得注意的是ORB-SLAM中使用的是ORB结合DBoW2回环检测,Kintinuous使用的是SURF特征结合DBoW回环检测)。作者将特征点的描述子(description)空间离散化,构建了词树(vocabulary tree)。然后用这种树为几何验证(geometric verification)阶段快速寻找点的对应。
本文下面将分为三个部分对该算法进行介绍:
1.二值特征(binary feature)
ORB特征是一种结合了FAST特征和BRIEF描述的一种特征,FAST关键点是一种角点,它通过在一个半径为3的Bresenham圆中比较一些像素的灰度来获得,然后在每一个FAST特征点的周围都选取一个方形的patch计算BRIEF描述子。BRIEF描述子是用一个二值向量来表示的,向量中的每一位都是patch中灰度值进行比较的结果,patch大小和向量的长度都是事先给定好的,可以根据实际需要选择合适的值。
上图中的Lb表示向量的长度,ai和bi表示在patch中随机选取的两个坐标,这两个坐标的选取是服从正态分布的。
使用BRIEF描述子最主要的优势是由于它的描述子是二值的,因此可以利用异或(xor)快速计算和比较。
2.图像数据的建立(image database)
image database由一个多级的词包(hierarchical bag of words)(实际上是一棵词树vocabulary tree)以及直接索引(direct index)和逆向索引(inverse index)构成。下面上图:
bag-of-words使用视觉词表(visual vocabulary)将图像转化为一个稀疏的数值向量,visual vocabulary可以离线生成,将训练集图像(training)的描述空间(descriptor space)离散成W个视觉词汇(visual words)。
建立这个vocabulary tree可以分为三步:
- 从训练图像中离线提取desciptor
- 对提取到的descriptors进行聚类,聚类方法是k-means生成种子后的k-medians聚类,得到了vocabulary tree的第一层,共k个节点
- 接下来的每一层都进行与第一步相同的操作,最终得到W个叶节点。
每一个word都会根据其在训练集中的关联性得到一个权重值。但是那些出现频率非常高的words,显然它们的辨识度很低,因此会相应降低它们的权重。加权方法使用的是tf-idf(term frequency - inverse document frequency)。
顺便说一下这tf-idf,这是一种标准的计算权重的方法,它的计算方法为
t = (word在当前文档出现的次数/当前文档的总词数)*log(整个数据集中的文档数/数据集中出现该word的文档数)
。应用在视觉领域中,将文档换成图像即可。
每一幅图像都被转换成一个词包向量v(bag-of-words vector),其特征点的描述子被从根节点到叶节点以最小化Hamming距离的方式传递下去。
两个bag-of-words相似性可以用score来表示,score的计算方式如下图:
伴随着bag-of-words,还会维持一个inverse index,它为每一个word存储一个图像列表,表明它都在哪些图像中出现过。这方便了我们对image database的访问,只比较那些有相同word的图像即可。除此之外,这篇文章还使用了direct index,它为每一幅图像的特征都存储了与该特征相关联的第l层的节点(l的值预先给出)。这会为后面的geometric verification带来好处。
3.闭环检测算法
A.Database的访问
根据上文的相似度score,计算出一个归一化相似度score。
从式中可以看出,使用当前帧与前一帧的相似度作为期望score,当两帧之间的相似度非常小的时候,会错误地得到一个很高的值。为了排除这种影响,作者为其设置了阈值,也就是说当前后两帧相差很大时不做回环检测。
B.群组匹配(match grouping)
为了避免短时间内的多帧图像访问database,要将一定时间间隔的图像划为一组(island),将当前帧图像与这组图像相似度的和作为群组相似度,选择相似度最高的组作为匹配,然后进行后续的暂时一致性验证(temporal consistency)。
这样的island也有助于正确的匹配,因为一旦当前帧与某一帧形成闭环,那么必然与其前后帧都有很高的相似度,这样就会形成一个很长的island,群组相似度也会有助于匹配长island。
C.暂时一致性(Temporal consistency)
如果某帧图像匹配到了一个组,那么一定和这个组前k个组相似度也很高,因为这k+1个组是相互覆盖的。
D.几何验证(geometric verification)
验证几何一致性的关键在于利用RANSAC,通过在两帧图像上的12个点对应,找到一个基本矩阵。
建立点对应就需要寻找特征点的最近邻点,这时候就需要用到我们前面提到的direct index。要查找图像上的一个特征点,只需要在l层上该特征点所对应节点上寻找即可。l的值需要预先设定,l值设为零,那么就只能去叶节点找,找到的对应点很少。如果l值设置为根节点,相当于在所有节点中寻找,没有做任何优化。
以上就是DBoW2算法的全部内容。
持续更新,欢迎提出质疑或与作者就相关问题进行讨论。
参考文献:
Bags of Binary Words for Fast Place Recognition in Image Sequences