CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction

时间:2016年

关键字:单目、稠密、实时

本质:LSD-SLAM + CNN

优点:

  • 估计绝对尺度
  • 应付纯旋转运动
  • 获得低纹理区域的深度

为什么单目slam无法估计绝对尺度(尺度不确定性)?

  • 常识:

对轨迹和地图同时缩放一定的倍数,我们看到的图像是一样的。原因是透视投影,近大远小。一个很大但很远的物体,跟一个很小但很近的物体,看起来可能是一样的。

  • 公式:

对极约束恒等于0,t的尺度不确定

本文如何确定绝对尺度?

单帧图片的能获得绝对深度,估计帧间pose时等效于双目相机,t的尺度是明确的。


为什么单目slam处理不了纯旋转?

相机发生纯旋转,t等于0,E和F也将等于0,无法通过对极约束计算出R。即使可以通过单应矩阵H计算出R,但是仅仅依靠旋转无法完成三角化,无法确定三维点的位置。

本文如何应付纯旋转运动?

本文直接通过CNN估计单帧深度,不需要通过三角化。


Pipeline

  1. 输入普通帧,与最近关键帧计算相对pose
  2. 如果距离最近的关键帧太远,就建立一个新的关键帧
  3. CNN在关键帧上做深度估计以及语义分割
  4. 新的关键帧加入pose-graph,进行global optimization

GPU上运行CNN,包括深度估计和语义分割

CPU上运行两个线程:

第一个线程处理普通帧,包括pose估计和深度值微调

第二个线程处理关键帧,包括关键帧初始化、pose-graph、更新global-map、融合语义featrure


创新点:

  • 如果slam用的相机和CNN采集训练数据用的相机内参不一样,那么实际使用的时候,深度估计会不准。本文不直接回归CNN的深度预测结果,而是回归深度值与相机焦距的比值
  • 每个深度值都有对应的置信度,即不确定性,整个深度估计是一个高斯分布。置信度初始化不是给一个很大的固定值,而是用当前关键帧的深度值与最近关键帧的深度值做差。表征深度传播的连续性。
  • CNN直接预测的深度值不确定性较高,本文没有直接使用。而是在slam过程中,通过帧间视差计算出一些深度,并对前一个关键帧的深度值不断进行微调。这个过程就是两个高斯分布融合的过程,减少不确定性。经过微调后的上一个关键帧的深度,又会传播到当前关键帧,对当前帧进行微调。

实验:

本框架与另外四个框架进行了对比,在多个数据集上的实验表明,本文的CNN-SLAM框架,比ORB和LSD等在轨迹精度和场景深度正确性,以及稠密程度上,表现都要好。

在应对纯旋转动作上,本文完胜LSD,而ORB压根初始化不了

解释:

ORB和LSD是稀疏或半稠密的,跟它们比稠密,没有意义。

Laina是本文CNN的基础,但是它的深度图没有经过refine,所以效果比不过本文

Remode虽然是稠密的,但是深度估计并不是用深度学习做的,所以在低纹理区域表现很差


思考:

为什么本文的轨迹精度要比LSD和ORB都要好?

因为更稠密,观测更多,更准。使得轨迹也能优化的更准确。

能够应付纯旋转,鲁棒性更好。


评价:

本文阅读难度并不大,但是实现细节解释得很少。

 

 

 

 

 

 

 

你可能感兴趣的:(paper)