3D Vision、SLAM求职宝典 | SLAM知识篇(D2)

D2篇——

 

目录

1.  视差与深度的关系

2.  闭环检测常用方法

3.  给一个二值图,求出最大连通区域(可以用深度优先和广度优先算法,现场手写代码)

4.  说一说梯度下降法、牛顿法、高斯-牛顿法区别

5.  边缘检测算子

6.  SVO中的深度滤波器原理

7.  说一说某个SLAM的工作原理(orb,lsd,svo,ptam)及其优缺点,如何改进

 

注: 本篇所涉及的几个问题实际上都不是小问题,我尽量较深入地去阐述,但是在实际面试过程中,你需要用更简短的语言来总结凝练一下。如有不当处,请指正。   


1.  视差与深度的关系

即双目相机模型,这一部分较简单,十四讲上的图已经具有了很强的解释性,因此转自《视觉slam十四讲》——

 

上面的这段话已经做了很好的概括。 注意其中计算视差的时候uR为负数,所以d = uL - uR, 也就是两段偏离相机光心的水平距离之和。公式你可以用 z等于fb除d 这样来记忆。d就是disparity,左减右。

   

2.  闭环检测常用方法

在D1篇的时候简单列了orbslam和lsdslam的论文翻译以及其闭环检测,在这里我查阅了一些资料,对闭环检测再做较详细的阐述—— 

闭环检测目前较常见的方法就是基于视觉词袋(或者叫视觉字典)DBoW来构建。如果你看下面这篇关于闭环检测方法的综述文献,你就会发现其实闭环检测方法还是有很多的: 

来自2019《机器人》期刊: 《复杂环境下视觉 SLAM 闭环检测方法综述》。 这篇文献对闭环检测讲的很全面了!在知网上可以下载。  先来看对闭环检测的简介:     

闭环检测是指在给定当前观测信息和地图信息时,确认机器人是否回到了地图中已经存在的某一位置.典型的基于视觉的闭环检测系统结构如图 2 所示.图像数据库、地图点的拓扑信息和度量信息、路标点的几何信息一起构成了对地图的描述.拓扑信息是指机器人运动的连续性,相邻的图像代表着地图上邻近的地方;度量信息是指场景之间的相对位置和方向信息;几何信息是指图像特征的 3 维信息及其数据关联.当新的观测信息到来时,先将其转化为对场景的描述,然后和地图信息进行比对,最后通过决策模型来对闭环进行识别.在知道机器人的状态转移方程的情况下,同样可以将其加入到决策模型中,但并不是系统必须的(故在图中用虚线箭头表示).此外,如果闭环识别成功,则对地图信息进行 1 次更新.”


  

如果你不觉得啰嗦或者没有时间看文献,那么我在这里简述一下: 

闭环检测涉及到的三个主要问题是:场景描述、决策模型、性能评价。

  • 性能检测:常用的标准就是准确率和召回率,Tp表示检测出的真闭环,Fp表示检测出的假闭环,FN表示未被检测出的真闭环。   性能好的闭环系统应该兼具高的准确率和召回率,但实际上很难满足,一般用准确率召回率曲线来评价其综合性能。目前大多数闭环检测系统仍然将准确率作为主要的优化指标。   
  • 决策模型: 指的是如何根据当前场景描述和地图信息识别出闭环。 三种:第一基于拓扑信息和图像信息;第二种,利用度量信息;第三种,利用几何信息。   其中第一种最常见,有概率模型,以及序列匹配模型。 具体的你可以再看文献。 
  • 场景描述: 可能一般讲闭环检测,给人直观的区别度还是在于场景描述上面。较全面场景描述方法分类可以分为: (1) 局部特征描述子; (2) 全局描述子; (3) 局部区域的全局描述子; (4) 结合深度信息的场景描述; (5) 场景的时变描述.            其中的局部特征描述子主要讲词袋模型,ORBSALM属于这一种。  ||    全局描述子是指把整个图像看做整体,有一些全局描述子,但是近年来更多的是基于深度学习。全局描述子比局部特征描述子对外观变化的鲁棒性稍好,但其对视角变化很敏感。那么基于深度学习来做闭环检测又有很多内容可讲了,这里简单说一下。现有的网络框架有一个问题是他们大多是为分类设计的,比如Alexnet,对闭环检测任务不是很在行,闭环检测更关注静态场景的表达。所有要么在现在深度网络上调节,要么重新设计网络。   深度方法在面对新的环境其泛华能力有待加强。有些方法还可以用深度来进行分割然后再计算描述子。 略。  ||    局部区域的全局描述子可以理解为介于上述两者之间。    ||    后两者方法顾名思义,可以理解或者你可以看论文。              

 

3.  给一个二值图,求出最大连通区域(可以用深度优先和广度优先算法,现场手写代码)

这个课题不小,都可以做一个专题了。 在这里我尽量以简短的语言来讲明白算法以及代码实现,包括为什么说是两种方法(广度优先搜索BFS & 深度优先搜索DFS) 。  

(1)二值图 

 

(2)求最大连通区域的算法 

 

(3)代码实现,以及DFS & BFS   

 

4.  说一说梯度下降法、牛顿法、高斯-牛顿法区别

《slam十四讲》中第六章的非线性优化内容对解答这个问题已经足够了。 主要讲,在非线性最小二乘这个问题框架下,这三种优化方法的引出—— 

最小二乘问题: 

对于不方便直接求解的最小二乘问题,我们可以用迭代的方式,从一个初始值出发,不断地更新当前的优化变量,使目标函数下降: 

(1)  梯度下降法可以分为两种:

一阶梯度法,二阶梯度法。 将目标函数在x附近进行泰勒展开:

      

如果只保留一阶项,增量为 也就是梯度的反方向,这种方法也可以叫最速下降法,在机器学习领域就叫梯度下降法( 比如说反向传播算法,一般还会在前面加一个学习率,但是学习率不能过大,过大的话你可以想象就会在函数最低点的两侧来回振荡 )。  

如果我们保留的二阶项,因为目的是求令上式最小的deltaX,所以直接对其求倒数令为零,得到                     注意这里都是以分母布局来求导,如果你对矩阵求导不熟悉,可以看我的另一篇博客。 那么这种方法也称为牛顿法 。        

区别: 最速下降法过于贪心,容易走出锯齿路线,反而增加了迭代次数。而牛顿法则需要计算目标函数的 H 矩阵,这在问题规模较大时非常困难。   

(2) 高斯牛顿法 

    不是对整体二次函数进行泰勒展开,而是先对f(x)进行 一阶泰勒展开(就是一阶近似),然后再求其平方。

求导过程略,很简单,得到方程: 

    即   

(3)Levenberg-Marquadt方法 

由于 Gauss-Newton 方法中采用的近似二阶泰勒展开只能在展开点附近有较好的近似效果,所以我们很自然地想到应该给 ∆x 添加一个信赖区域(Trust Region),不能让它太大而使得近似不准确。衡量线性近似的好坏。算法:  

接下来,转化为拉格朗日乘子法: 

上面这个式子是slam十四讲书上的,但是我觉得有误。根据KKT条件,最右侧的那一项应该还要减μ。  

(关于拉格朗日和KKT,经常在机器学习中见到,你可以参考https://www.cnblogs.com/ooon/p/5721119.html

 

5.  边缘检测算子

《计算机视觉算法与应用》里有但是不系统,我们还是参考博客为宜—— 

边缘检测算子总结  https://blog.csdn.net/u013270326/article/details/81412566

python数字图像处理之边缘检测常用算子 https://www.cnblogs.com/lynsyklate/p/7881300.html

如果没时间,只看三种边缘检测算子,那就看这篇—— 

数字图像 - 边缘检测原理 - Sobel, Laplace, Canny算子   https://www.jianshu.com/p/2334bee37de5

 

6.  SVO中的深度滤波器原理

7.  说一说某个SLAM的工作原理(orb,lsd,svo,ptam)及其优缺点,如何改进

这里我们将第6和第7问合在一起,都来讨论SVO的工作。 在解读SVO的大致原理后,我们再来谈SVO中的深度滤波器。  第7问和D1篇的一个问题重复,D1篇中大概阐述了orbslam框架, 所以现在我们以SVO为目标,努力弄明白这一经典、快速、优秀的VO方案。

 




写博不易,您的支持让知识之花绽放得更美丽  ~_~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值