Paper Share_ NID-SLAM_ Robust Monocular SLAM using Normalised Information Distance

【写在前面】
   一直都有写博客的意愿,但是一直都没有实际行动。尝试了几次也都没有坚持下来。这次打算逼自己一下,坚持下去。

  这次决心坚持写博客也是出于记录平时自己日常所学的考虑。平时有时间或者需要会去看论文,但是一篇论文当时看的时候似乎是懂了,但是过几天就没什么印象了。感觉这样效果很不好。所以打算写博客记录自己所看的论文。其一是加深自己的理解,其二是记录分析的内容和过程,方便日后查看与巩固。也希望能与广大博友分享知识,相互交流学习。博客小白,深感表达能力不足。如有不足之处,还望大家多多指点。


NID-SLAM: Robust Monocular SLAM using Normalised Information Distance

   熟悉视觉SLAM的朋友都知道从图像的处理方式来分,目前主流V-SLAM系统主要有两种:间接法与直接法。

  • 间接法:从图像中提取稀疏特征点,然后为每一个特征点计算一个描述子用于特征点匹配。描述子一般具有尺度、旋转不变的特性。(具体有哪些描述子可以上网搜索一下)。典型的例子是ORB-SLAM。

  • 直接法:利用图像像素的光度信息直接进行匹配,主要用到的方式是最小化光度误差的方法。一般分为稠密和半稠密法。半稠密法主要是使用图像中梯度明显的像素,而不是所有像素。典型的例子是LSD-SLAM。

   在这篇NID-SLAM中,作者分析了目前直接法与间接法的缺点和局限性,即直接法与间接法在室内这种静态场景或者室外短时间的场景下才能正常工作,而对与室外长时间的环境变化,天气变化,甚至是季节气候的变化则表现较差。而互信息(Mutual Information- MI) 是一种对环境变化具有一定鲁棒性的metric。因此本文采用与MI如出一辙的方法NID,将其应用到直接法当中替代光度信息,从而提高SLAM的鲁棒性。

   因此 【Abstract】本文提出了一种基于归一化信息距离(Normalized Infomation Distance - NID)匹配方法的直接单目slam算法。归一化信息距离的匹配方法是一种基于信息论的匹配方法(information-theoretic)(提到信息论肯定第一时间就会想到熵,没错NID就是利用信息熵来计算的, MI也是利用信息熵)。与当前最好的基于光度误差最小化的直接法相比,在面对光照变化,天气变化,环境结构变化等条件,NID匹配方式能够提供更强的鲁棒性。实验中在人工合成的有光照变化的室内场景与存在天气变化的室外真实场景下本文算法都能成功进行定位与建图。该算法使用OpenGL运行在消费级的GPU上,最终实现的定位精度与当前最好的光度误差最小化法(应该是LSD-SLAM)相当,但是面对场景变化时的鲁棒性要比直接法语基于特征的方法高很多。

本文的主要工作有以下3点:

  • 使用NID进行鲁棒的直接跟踪。
  • 采用直方图金字塔进行多分辨率的跟踪 。
  • 直接采用NID对深度图进行修正。

   先来看一下NID-SLAM的整体流程图:
Paper Share_ NID-SLAM_ Robust Monocular SLAM using Normalised Information Distance

上图中粉色方块是本文采用的NID匹配跟踪算法,替代了绿色方块的光度误差跟踪方法。其他部分还是与经典框架比较类似。

   接下来介绍一下NID Tracking。 tracking的思路与SLD-SLAM中类似。利用参考帧与当前帧之间的相对pose,将参考帧上的像素点变换到当前帧下。从而计算两帧上对应点的intensity的误差。

qi=w(pi,Dr(pi),ξ)

上式中pi 是参考帧中的像素点坐标,Dr(pi) 是像素点pi 对应的逆深度, ξ 是两帧之间的相对pose. ξ 的求取是一个最小二乘问题:
argminξpiΩDwi(ξ)||(Ir(pi)Ic(qi))2||

式中 采样函数I(.) 返回亚像素位置的intensity的标量值。权重函数w(i) 是与深度不确定性相关的一个加权系数, 鲁棒核函数||.||δ 是降低外点的影响。(例如Huber 范数)。

以上公式是采用的光度残差。本文的是采用NID。所以在本文中最小二乘问题是两帧图像对应点的NID最小化。即

argminξNIDpiΩD(Ir(pi),Ic(qi))

其中
NID(Ir,Ic)=2H(Ir,Ic)H(Ir)H(Ic)H(Ir,Ic)

H(Ir,Ic) 是图像IrIc中对应采样点的联合熵。熵H(Ic)的计算如下:

H(Ic)=a=1npc(a)log(pc(a))

联合熵:
H(Ir,Ic)=a=1nb=1npr,c(a,b)log(pr,c(a,b))

H(Ir) 的计算与H(Ic) 的计算类似。边缘概率分布pcRn 和联合概率分布pr,c 是采用n-bins的直方图来表示。a,b 分别表示直方图bin的索引。由于pc,pr都可以由pr,c计算得来,因此NID-SLAM中主要是计算pr,c 以及相应的微分。
文中采用采样的方法计算联合概率分布pr,c。 与之前的基于NID的定位方法不同,文中将depth map的不确定度引入pose的估计当中,以逆深度方差的形式体现。融合每一次采样的联合概率分布如下:
pr,c(a,b)pr,c(a,b)+β(qi,N(j)(qi))kVr(pi)

文中对当前帧每一个匹配点的计算都不是直接计算一个像素,而是计算匹配像素的4x4的临域像素。临域中的像素权重计算是基于临域像素与匹配像素的距离利用B样条函数计算。上式中β(qi,N(j)(qi)) 是一个2D的3次B样条函数。权重需要归一化,因此满足iβ(qi,N(j)(qi))=1。文中特意强调临域像素的intensity不必计算亚像素的值,因此不需要插值。3次的B-spline函数使得直方图函数是二阶连续可导,因此可以使用基于梯度的优化框架计算。
前面说到pr,c 是采用直方图来表示,因此每一个采样点的intensity都会对应直方图的一个bin。直方图bin 索引(a, b)使用下式表示:
a=B(Ir(pi)),b=B(Ic(N(j)(qi)))

这里pr,c的更新示意图如下所示:
Paper Share_ NID-SLAM_ Robust Monocular SLAM using Normalised Information Distance

之前没有想明白这里直方图的表示方法(本人基础比较弱,对于SLAM也是小白,刚刚接触不久),思考了一阵之后,大概明白一些,这里说一下我自己的理解:对参考帧Ir与当前帧Ic统计成n-bins的直方图,每个bin对应一个intensity的区间,相当于H(Ir),H(Ic)是两个n维的向量。所以联合概率分布pr,c是一个nxn的矩阵。 当Ir中的Pi确定时,对应Ir的直方图中的一个bin。此时pi投影到Ic中找到qi,考虑pose的误差造成的重投影误差,因此在Ic中计qi的4x4临域内的所有像素。将临域内每一个像素的intensity加权统计到 pr,c 中,权重大小根据像素到 qi 的距离计算。由于Ir 中的点 pi 的intensity是一个固定值,对应到直方图中是一个bin。而在Ic中由于选取的临域,所以可能最多对应到直方图中的多个bin。因此参考帧中的一个采样点会影响pr,c中最多一列的元素。所有采样点计算完成后,pr,c更新完成。公式中的常量k用于归一化每个采样点的贡献:

k=1|ΩD|piΩD1Vr(pi)

计算完pr,c之后,再计算出pr,pc,H(Ir),H(Ic),H(Ir,Ic), 接着就可以确定loss-function。然后利用BFGS方法优化。ξ的迭代公式如下:
ξk+1=ξkαkkδNID(Ir(pi),Ic(N(qi)))δξ|piΩD

上述Tracking方法具有比光度误差法更高的精度与鲁棒性。除了使用随机深度初始化的第一帧。
以上便是NID-SLAM中Robust Direct NID Tracking的算法。个人粗浅理解,肯定有不足之处。如果哪位朋友发现其中的谬误,还请不吝赐教。谢谢!

   下一篇继续记录接下来Multi-resolution NID-SLAM 和NID Dpeth Map Update 部分。


如果觉得读英文原文没有理解太清晰的话,推荐一位朋友的博客,对这篇论文进行了完整的翻译。
https://blog.csdn.net/zf19921020/article/details/77488785