解读《视觉SLAM十四讲》,带你一步一步入门视觉SLAM—— 第 12 讲 回环检测

在开始讲回环检测之前,我们先看下我们面临的问题!

在视觉里程计(VO)中,我们说到因为误差的累计效应,所以会导致我们的因为轨迹累计,误差越来越大,这个是视觉里程计没法避免的,即使我们采用了效果显著的后端优化,也依然不能彻底解决误差累计的问题。

试想一下,如果我们的轨迹是一个环状,那么我们一定会再次出现在当初经过的地方,那么我们的轨迹一定就会形成闭环,但是如果不闭环那就说明,轨迹出现了累计误差,当我们发现回到原地时就可以直接修正这个累计误差。
  
  如果你学过控制相关的课程,这其实就是一个最典型的负反馈控制!
  
  另外一方面,我们VO失败的时候,也可以使用回环检测进行重定位。
  
  所以回环检测对于一个完整SLAM系统必不可少,不过回环检测的原理还是非常容易的,理论知识也是很简单的。所以这一讲的解读,我只需要给大家总结一些重点内容就行了。

解读

回环检测的大致思路

回环检测的方法主要是基于图像的外观判定相似性。

我们可以想到最简单的方法就是,不断地将输入SLAM系统中的图片和以往的图片进行相似性判断,那么当相似性达到一定阈值的时候,我们就认为他们是同一个场景,至于怎么判断他们是相似的,这样的方法很多。

我们书中介绍的判断相似性的方法是词袋模型,它的处理方式和两两图片求相似性的方法不同。

词袋模型是将很多类型特征存成字典,如果图片上有字典中的某些特征,那么就给这张图片一些特定的表示,另外的图片也采用的这样的方式,如果两张图片最终的表示结果很相近,那么这两张图片就可能是一个场景。

在细致学习词袋模型之前,我们还需要一些铺垫工作。

准确率和召回率

真阳性:实际为真,检测出来也是真;
  假阳性:实际为假,检测出来是真;
  假阴性:实际为真,检测出来是假;
  真阴性:实际为假,检测出来也是假;
  
  
准 确 率 = 真 阳 性 真 阳 性 + 假 阳 性 准确率 = \frac{真阳性}{真阳性+假阳性} =+
召 回 率 = 真 阳 性 真 阳 性 + 假 阴 性 召回率 = \frac{真阳性}{真阳性+假阴性} =+

准确率描述的是,算法提取的所有回环中确实是真实回环的概率;
召回率描述的是,在所有真实回环中,被正确检测出来的概率。

而在我们的SLAM中,我们可以容忍真实回环被检测到概率低一点儿,我们要追求的是检测为回环的准确率要高一点。

词袋模型

关于词袋的原理,作者书中解释的很清楚了,我觉得很容易理解,我就不再赘述了。

字典

如果你先前了解过机器学习,那么对于聚类问题,你再熟悉不过了,因为机器学习很大的篇章都是在讲分类聚类等问题。

字典的结构和原理,大家直接看书即可。如果你对聚类算法不熟悉,可以了解一下下面这篇帖子:
《机器学习sklearn19.0聚类算法——Kmeans算法》

对于k叉树的意思就是,我们先将图片的特征点的描述子,进行k-means聚类得到k个分类,然后对于每一个分类,再进一步进行k-means聚类,然后再继续,直到分类深度得到d层。

相似度计算

获得了图片对应的单词向量之后,如果计算两张图片之间的相似性呢?

为了让结果更加优异,我们在对单词的相似性就行评判的之前,我们还希望将单词的区分性和重要性加以评估,给每一个单词一个权值,以获得更好的效果。

IDF思想:某单词如果在字典中的概率越低那么区分度越高;

TF思想:某一个单词在一副图像中经常出现,它的区分度就高。

图片相似度计算公式:
s ( v A , v B ) = 2 ∑ ∣ v A i ∣ + ∣ v B i ∣ − ∣ v A i − v B i ∣ s(v_A,v_B)=2 \sum|v_{A_i}|+|v_{B_i}|-|v_{A_i}-v_{B_i}| s(vA,vB)=2vAi+vBivAivBi其中: A , B = { ( w 1 , η 1 ) , ⋯   , ( w N , η N ) } A,B=\{ (w_1,\eta_1),\cdots,(w_N,\eta _N) \} A,B={(w1,η1),,(wN,ηN)},表示的是单词向量以及单词的权重。权重 η i = T F i × I D F i \eta_i=TF_i \times IDF_i ηi=TFi×IDFi.

温馨提示,嘻嘻

关于回环检测,感觉也没啥可说的,原理非常的符合我们的认知,所以很简单,但是对于回环检测实际在SLAM中的应用,还是很需要技巧的,我建议大家看一下ORB-SLAM2回环检测算法的设计。
  另外如果你自己想训练回环检测的词袋,一定要根据自己的场景训练,如果你用在室内,那就都选用室内图训练,如果你想训练一个通用的词袋,那就必然会导致的你的词袋很大,那么加载的时候务必会耗更多的时间。
  我觉得SLAM可以和深度学习结合的地方不多,回环检测至少是一个非常不错的与深度学习结合的应用,如果你对SLAM的深度学习结合感兴趣,你可以仔细研究一下回环检测的方法。

伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。

你可能感兴趣的:(视觉SLAM十四讲,全书解读)