讲完了前端后端,这一讲讲的是回环检测。比起之前的内容要容易理解多了=-=
其思路是:
- 回环检测是做什么的?如何检测回环?->通过图像相似性。
- 要如何检验两个图像的相似性?->词袋模型。
- 如何建立词袋模型?->构建词典和单词。
- 如何构建和查找词典?->K-means和k叉树。
- 如何提取单词?->K-means。
- 如何评价两个词袋的相似性?->TF-IDF和范数。
一、 回环检测概述
1. 一些概念
1.1. 回环检测的意义
回环检测的作用:消除累积误差。
累积误差是怎么来的呢?前端根据局部(相邻或相近)帧给出位姿估计,后端也是根据前端已有的结果进行优化(比如 p ( x k ∣ x k − 1 ) p(x_k|x_{k-1}) p(xk∣xk−1)),这样,当前端每一帧都存在误差时,基于误差的估计就会更加不准确。一段时间后就会出现累积误差。
回环检测所做的,是不依赖于前一帧的信息,直接比较当前帧和之前的任意帧,跳过其中的误差。如果检测出当前帧和之前某一帧相似,就可以用这个信息矫正累积误差。(那么,是根据之前的帧矫正,还是根据当前帧矫正呢,怎么矫正?)
1.2. 方法
要做回环检测,面临的问题是:怎么知道这个地方之前有没有来过,即怎么判断帧间的相似性。
两种思路:
- 基于里程计的几何关系:运动到某个位置后,根据位置信息检测,但是这个位置是否来过本身就是未知的。
- 基于外观:根据两帧图像的相似性检测,也是主流方法。
那么问题转变成:如何计算图像相似性?
1.3. 准确率和召回率
这里引入两个概念:
-
假阳性(FP):感知偏差。把不是回环的检测成了回环。即误检。
-
假阴性(FN):感知变异。是回环却检测成不是回环。即漏检。
-
准确率:检测出的回环中,真的是回环的概率。
-
召回率:所有回环中,被检测出的概率。
正常来讲,判定是回环的阈值提高,会使得准确率提高,同时时召回率下降。
SLAM中,要求回环检测的高准确率。
二. 词袋模型
现在的问题是,如何衡量两张图像的相似性。
前段中使用了特征点匹配,但存在费时、受光照影响的问题。因此,这里把特征点进行聚合抽象,使用词袋模型进行匹配检测。
一些概念:
- 词袋(Bag-of-Words/BoG) ,是一组特征的集合。
- 单词:特征聚合的结果,具有更抽象高层意义的特征。
- 字典:单词的集合。要查找单词是否在字典中,字典中的单词有没有出现。字典中单词的出现情况,用0/n向量描述。
字典的特性:只描述特征有没有出现,或出现的程度(次数、频率等),不