zoukankan      html  css  js  c++  java
  • 视觉SLAM十四讲(第二版)第十一讲笔记

    第十一章 回环检测

    前端提供特征点的提取和轨迹,地图的初值,而后端负责对所有这些数据进行优化。如果如同VO那样仅考虑相邻时间上的关邻,那么之前的误差将不可避免地累积到下一时刻,这样整个SLAM会出现累积误差,长期的结果将不可靠。

     

    如上图,a表示真实轨迹,b中前端只给出相邻帧间的估计,优化后Pose Graph出现漂移 ,c添加回环检测后的Pose Graph在碰到相同特征点时可以借此消除累积误差。

     

    1. 方法

    a. 朴素类:最简单的方式就是对任意2副图像进行一遍特征匹配,根据正确匹配的数量确定哪2副图像存在关联。但盲目地假设“任意2副图像都可能存在回环”,使得检测的数量实在太大,对于N个可能的回环,我们要检测Cn2次。在大多数实时系统当中是不实用的。另一种是,随机抽取历史数据并进行回环检测,比如在n帧当中随机抽取5帧与当前帧比较,这种做法能够维持常数时间的运算量,但这种盲目试探方法在帧数N增长时,抽到回环的几率会大幅下降,使得检测效率不高。

    b. 基于外观(Appearance)的回环检测。它和前端,后端的估计无关,仅根据两副图像的相似性确定回环检测关系。目前基于外观的回环检测方式以成为视觉SLAM中主流的做法,并被应用于实际的系统中去。而其核心问题:如何计算图像间的相似性。设计一种方法,计算相似性评分:s(A, B),但其中使用到的像素灰度是个不稳定的值,故该函数不能很好的反映图像间的相似关系。

    c. 视觉slam一直是以人类视觉作为标准的,可目前尚未掌握人脑的工作原理。

     

    借用医学上的说法。假阳性(False Positive)又称感知偏差,而假阴性(False Negative)称为感知变异。而我们希望算法与人类的判断一致,所以希望TP, TN尽量高。则对某个特定的算法,我们统计它在某个数据集上的TP,TN,FP,FN的出现次数,并计算两个统计量:准确率和召回率(Precision & Recall)

    Precision=TP/(TP+FP),Recall=TP/(TP+FN)

    而这2个指标是评价一个算法的好标准。上述相似性评分的准确率和召回率都不高。

    2. 词袋模型(与机器学习有交叉)

    词袋(Bag-of-Words),目的是用“图像上哪几种特征”来描述一幅图像。例如,一个人,一辆车。另外一张图片是一辆车,2只狗。

    其中确定“人”,“车”,“狗”等概念对应BoW中的“单词”。许多单词放在一起,就组成了“字典”。

    确定一副图像中出现了哪些在字典中定义的概念-我们用单词出现的情况描述整张图像。这就把一副图像转换成了一个向量的描述。

    比较上一步中的描述的相似程度。

    a. 字典,字典由许多单词组成,而每一个单词代表一个概念。一个单词是某一类特征的组合,所以字典生成问题类似一个聚类问题。这其实与机器学习有交集,无监督机器学习中,用于让机器自行寻找数据中的规律。K-means(K均值)算法做的很好。

    b. K-means:简单来说,当有N个数据,想要归成k个类。

    1 随机选取k个中心点:c1,c2,…….ck

    2 对每一个样本,计算它与每个中心点之间的距离,取最小的作为它的归类。

    3 重新计算每个类的中心点

    4 如果每个中心点都变化很小,则算法收敛,退出;否则返回第2步。

    c.简单实用的树结构字典

    使用一种k叉树来表达字典。思路比较简单,类似与层次聚类,是k-means的直接扩展。假定我们有N个特征点,希望构建一个深度为d, 每次分叉为k的树。做法如下:

    1). 在根节点,用K-means把所有样本聚成k类(事实上,为了保证聚类均匀性会使用k-means++)。这样得到了第一层。

    2). 对第一层的每个节点,把属于该节点的样本再聚成K类,得到下一层。

    3).以此类推,最后得到叶子层。叶子层即为所谓的Words.

    这样我们在叶子层构建了单词,而树结构中的中间节点仅供快速查找时使用。2个优点,一是可容纳K指数d个单词。二是查找速度保证了对数级别的查找效率。

     

    3.相似度计算

    对单词的区分性或重要性加以评估,给它们不同的权值以起到更好的结果。在文本索引中,常用的一种做法称为TF-IDF(Term Frequency-Inverse Document Frequency),或译频率-逆文档频率。TF部分的思想是,某单词在一幅图像中经常出现,它的区分度就高。另一方面,IDF的思想是,某单词在字典中出现的频率越低,则分类图像时区分度越高。

    IDF = log(n/ni) 其中n为所有特征数量,ni是某个叶子节点wi中的特征数量。

    TFi = (ni/n) TF部分则是指某个特征在单幅图像中出现的频率。图像A中单词wi出现了ni次,而一共出现的单词次数为n.

    于是 wi的权重等于TF乘IDF之积

    n∗=TF×IDF

    4. 实验分析与评述

    在机器学习领域,代码无错而结果不满意,我们首先怀疑“网络结构是否够大,层次是否足够深,数据样本是否足够多”等,但仍处于“好模型敌不过烂数据”。在slam中,仍先从这一原则出发,

    a. 增加字典规模,往往可以显著提高图像评分。

    b. 关键帧的处理,如果关键帧选得太近,那么必将导致2个关键帧之间相似性过高,不容易检测出历史数据中的回环。故用于回环检测的帧最好是稀疏一些,彼此之间不太相同,又能涵盖整个环境。

    c. 词袋的回环检测之后有一个验证。其一是设立回环的缓存机制,时间上的一致性检测。单次检测到的回环并不足以构成良好的约束,而在一段时间中一直检测到的回环,才是正确的回环。另一方法是空间上的一致性检测,即对回环检测到的2个帧进行特征匹配,估计相机的运动。然后。再把运动放到之前的Pose Graph中,检查与之前的估计是否有很大的出入。

    d. 与机器学习的关系。

    从词袋模型来说,它本身是一个非监督的机器学习过程——构建词典相当于对特征描述子进行聚类,而树只是对所聚的类的一个快速查找的数据结构而已。词袋方法在物体识别问题上明显不如神经网络,故机器学习将来被深度学习打败很有看头。

     

    人家都说我们路很长,但是一段路一晃一晃很快就过去了 ——易建联
  • 相关阅读:
    [BZOJ3671][UOJ#6][NOI2014]随机数生成器
    [BZOJ3670][UOJ#5][NOI2014]动物园
    [UOJ#131][BZOJ4199][NOI2015]品酒大会
    [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
    有趣的题目名称,有趣的题目
    [BZOJ2959]长跑——新技能:LCT+缩圈
    贴一下WC总结里提到的那道裸题吧。。。
    System and method for assigning a message
    http请求
    jQuery 语法
  • 原文地址:https://www.cnblogs.com/Lei-HongweiNO11/p/11615861.html
Copyright © 2011-2022 走看看