论文笔记 DXSLAM: A Robust and Efficient Visual SLAM System with Deep Features

论文链接:https://arxiv.org/pdf/2008.05416.pdf
代码链接:https://github.com/ivipsourcecode/dxslam

主要内容

本文的主要工作为使用CNN(Convolutional Neural Network,卷积神经网络)提取特征,然后将所提取的特征整合到现代的SLAM(ORB SLAM2)框架中。其中,作者选择了性能优异的HF-Net,提取每帧图像的局部特征以及整幅图像的全局特征,使得所整合的SLAM系统,相比使用手工特征点的SLAM系统,在环境变化、视角变化情况下拥有更好的鲁棒性。ORB SLAM2中使用BoW(Bag of Words,词袋模型)来加速特征点的匹配,本文中作者使用了FBoW(Fast Bag of Words)来进一步加速词袋的训练以及通过词袋模型进行的特征点匹配过程。并且本系统可以在依赖GPU,在CPU上运行(不愧是和Intel合作的论文)。

论文的主要贡献

1、通过CNN提取的特征,相比于手工设计的特征,使得整合后的SLAM系统在环境和视角变化的情况下有更好的鲁棒性。
2、通过全局特征的辅助,使得SLAM系统中的重定位方法更加鲁邦;同时,FBoW相比于传统的BoW,有更高的成功率和更小的计算量。
3、基于全局和局部特征,提出了一种可靠的闭环检测方法,同时一种新型的词袋被训练,用来整合局部特征。
4、第一款基于深度学习特征点法并且可以在无GPU的情况下运行的SLAM系统。

整个框架如下图所示

在这里插入图片描述

总览

整个框架类似于ORB SLAM2,不同点主要在于特征点提取部分,作者使用了HF-Net来提供局部以及全局特征。局部特征主要用于定位和制图流程。基于全局特征,一个高效的重定位模块被建立,用于系统初始化或者跟踪失败时快速重定位,同时,一个鲁邦的回环方法被提出,用来减少累计定位误差并获得全局一致地图。这个方法使用了HF-Net提取的全局特征,以及事前训练好的词袋模型进行局部特征匹配。进一步,为了降低系统初始化时间,提升系统效率,采用了FBoW代替传统的BoW。Open VINO工具包的使用,使得系统可以通过CPU完成实时的特征提取。

特征提取

使用HF-Net,从每个图像帧提取特征。图像首先经过一个共享的编码器,然后通过三个并行的解码器,分别预测关键点的检测得分、稠密的局部描述子和全局描述子。前两个解码器拥有和SuperPoint一样的结构,全局描述子则由NetVLAD层通过聚类得到。

词袋训练

传统的BoW采用训练K-D树的方式来加速搜索过程,但是如果K-D树的层和节点数在词袋训练的过程中没有得到合理安排,单词就难以很好地区分出特征。为了解决这个问题,在充分考虑了所训练的图像序列之间的关系后,采用了一种增量式的方法训练词袋。在训练过程中,首先运用HF-Net提取连续图像序列中的关键点和局部描述子。对每一对临近的图像,使用暴力匹配的方式进行图像匹配。匹配成功的局部描述子应该属于相同的并且已经存在的叶子节点中,即视觉单词;未匹配成功的特征会被分配到新的叶子节点。为了保证所提取特征的可靠性,作者通过关键点的检测得分进行排序,选择得分最高的300个成功匹配的描述子,将他们当做单词进行训练。在所有的训练图片被处理后,可以得到一系列的视觉单词,并将这些单词打散到父节点中。文中运用FBoW代替传统的BoW训练词袋,极大程度上提升了系统效率。以初始化过程为例,DXSLAM只需要40毫秒,ORB SLAM2则需要6秒。

使用全局特征进行重定位

ORB SLAM2使用一个两阶段的流程实现重定位,首先使用BoW进行特征匹配,来检索近似于当前的候选帧,然后通过匹配当前帧和每个候选帧的局部特征点,来估计当前帧的位姿,直到全部候选帧遍历完或者当前帧的位姿被成功估计。失败往往有两种可能性:
1、BoW未能检索到任何候选帧。
2、在第二阶段,没有足够的匹配点来实现位姿估计。
解决第一个问题的方法是:通过学习得到的全局描述子,实现一种粗的图像检索,,这种方法被广泛证明,在针对环境和视角变化时,比BoW方法拥有更好的鲁棒性。被检索的候选帧随后被用来做群体匹配。通过匹配当前帧的和群体中的全部关键点,第二个问题可以得到很好地缓解。当有足够的匹配的特征点时,会对每个群体执行RANSAC和PnP过程。

使用多层次特征来实现闭环检测

相比于重定位重视召回率,闭环检测更加重视准确率,因为一个错误的闭环检测会损坏整个地图。在DXSLAM中,作者使用局部和全局描述子来检测回环。对每一个新的关键帧,通过和训练好的的词袋节点进行匹配,将局部描述子量化为单词,然后关键帧可以使用一个向量进行表示。通过计算不同向量(关键帧)之间的距离得到相似度得分,并且挑选得分最高的K个关键帧。向量 v 1 v_1 v1和向量 v 2 v_2 v2之间的相似度的定义为:
s ( v 1 , v 2 ) = ∑ i = 1 N ∣ v 1 , i ∣ + ∣ v 2 , i ∣ − ∣ v 1 , i − v 2 , i ∣ s(v_1,v_2)=\sum_{i=1}^N|v_{1,i}|+|v_{2,i}|-|v_{1,i}-v_{2,i}| s(v1,v2)=i=1Nv1,i+v2,iv1,iv2,i
因为词袋只整合了局部描述子的的分布而忽视了他们的空间关系,所以会有误匹配的发生。在这里,作者使用全局描述子作为补充标准处理这个问题。在闭环检测的第二阶段,通过当前帧和每一个上一步挑选出来的K个关键帧做内积运算,作为它们之间的距离。距离当中的最小值,如果小于预先定义的阈值,就被检测为回环。

评价

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值