DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras适用于单目、立体和 RGB-D 相机的深度视觉系统论文阅读记录

一、前言

        要准确理解DROID-SLAM就不得不先将RAFT光流估计法(基于深度学习的光流估计法)弄清楚,因为基本上DROID-SLAM就是在RAFT的基础框架上稍加修改再整合进传统的SLAM框架中。在开始阅读本文之前请务必先基本了解RAFT。推荐文章如下:

http://t.csdnimg.cn/wlK2z

http://t.csdnimg.cn/5ERoz(RAFT代码解析)

http://t.csdnimg.cn/DHVJk(这是一个专栏,需要解锁文章)

原文地址:[2108.10869] DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras (arxiv.org)

二、核心内容

1.DROID-SLAM的基础元素——帧、帧图

        DROID-SLAM是以帧为单位运行的(有点废话,大部分SLAM都是如此),每一帧不仅要有rgb信息,还需要维护这一帧的空间位姿和深度图。也就是说我们需要创建这样一个结构体,在这个结构体中维护了3个变量,分别是rgb图、帧位姿Gt∈SE(3)和逆深度图(逆深度图是对深度图每一像素的值取倒数),当然rgb图和逆深度图是二位数组(用opencv的话就是cv::Mat),这个结构体就是DROID-SLAM的基础元素——帧。

         DROID-SLAM在RAFT的基础上动态维护了“帧图”(就是类似于数据结构中的“图”这种结构,有顶点和边),主要是为了同时优化多组帧对(“帧对”就是有共视关系的一对帧)。“帧图”的顶点是帧,若两顶点之间有边则表示这两帧有共视关系。“帧图”是动态的,当一个帧的位姿优化后,由此导致的共视关系的出现或消失都会使得“帧图”中的边添加或者删除。

2.对每一帧进行特征提取并对每一帧对进行特征融合

        每当有新的一帧进入系统,DROID-SLAM就会用特征提取器来提取特征,但是注意对于一帧并不是只提取一个特征,而是用同一结构不同参数的网络分别提取两个特征,其中一个称为feature,另一个称为context(也就是在上述用下划线描述的“帧”这一结构体中在加两个变量——从rgb图中提取的特征上下文)。DROID-SLAM特征提取器基本上和RAFT的特征提取器一模一样,就是由 6 个残差块和 3 个下采样层组成,输出1/8 输入图像分辨率大小的特征图。特征提取器的具体结构如下图:

注意:feature和context的维度是一样的,都是HxWx256维,其中H是原帧高度的1/8、W是原帧宽度的1/8。

        也就是RAFT中的这一块:

        每一帧有了自己的feature和context之后,就可以来构建相关金字塔了。对于有共视关系的两帧(之后简称为F1和F2),分别将他们的feature拿出来,用F2中的每一位置上的特征向量与F1的每一位置的特征向量作内积最后得到HxWxHxW维的相关特征(这就是特征融合的过程,将F1特征和F2特征融合)。具体如下图:

注意:这里只展示了F1中(1,1)位置的特征向量与F2所有位置的特征向量的内积结果,其他位置是一样的操作。

        相关金字塔就是对相关特征进行下采样,这里有一个细节,只对红框框中的每一小块单独下采样(把每一小块进行单独的下采样,小块之间没有关联):

        最后,相关金字塔就长这样,每一层的小块数量是一样的,不同层的小块的大小不同:

        DROID-SLAM采取了和RAFT一样的查询策略,之所以需要这个查询的操作,就是为了找到与第一帧某一像素相关的第二帧的像素位置。假设我们有了L1中的每一像素到L2中每一像素的映射关系(L1、L2分别为两帧),即x' = <u',v'> = F(x) = <u+f(u), v+f(v)>,这里x'是L2的像素坐标,x是L1的像素坐标。设置一个查询半径r,将x'附近的(r+1)^2内的点都作为被查询到的点。

        为了更详细的说明查询操作,我这样具体的说。现在我们有了一个相关金字塔,在L1上有一个像素位置(u,v),和L2上的坐标(u’,v‘),假设这两坐标对应于世界坐标系下同一点,只是他们在不同的帧上。那么查询操作就是,找到(u’,v‘)的r领域

        并从相关金字塔的每一层的每一小块上抽取特征(我随手画的,正确应该是每一个红框都在差不多的位置)

        虽然不同层的不同小块是不一样大的,但是应用在不同大小的块上的r领域的大小是不变的,最后将这些抽取出来的特征拼在一起就完成了查询操作

3.更新操作(DROID-SLAM的核心)

        我们直接从图上来理解,Cij就是两个有共视关系的两帧得到的相关金字塔,hij是隐特征(如果看不懂请先看懂RNN、LSTM和GRN再回头来看,这些都是时序神经网络),Gij是两帧之间的位姿变换,di就是逆深度图上pi位置上的逆深度,pi是L1上的一个像素位置,pij是对应于pi的L2上的像素位置,rij是对pij的修正量,wij是ConvGRU预测的不确定性,Πc是将点云映射为像素坐标,那么它的逆就是将像素映射为点云的操作,Lr就是前面说过的查询操作,|E|就是“帧图”中边的数量。

        按照我的理解,整个更新的流程是这样的:确定两帧有共视关系后,计算两帧的相关金字塔Cij,初始化hij(应该是可以直接设为全零),初始化的G、d,将d的每一个像素点投影成点云,再根据Gij作坐标变换,再将变换后的点云反投影成L2中的像素位置,用这个位置对Cij进行查询索引,将抽取出来的特征于hij一起送入ConvGRU中,得到偏差矫正rij和不确定性估计wij,计算pij*=pij+rij,最后把pij*和wij送入DBA,最后得到G、d的更新值。

        DBA(Dense Bundle Adjustment Layer)和传统的BA操作差不多,只是它BA得更稠密一点,即对于每个逆深度图上的位置都有一个BA损失,而且还要根据wij进行加权,除此之外没什么特殊的。

4.一些训练策略

        消除一些自由度:都知道单目测距或单目轨迹都是缺乏尺度和固定位置的,也就是说,如果不固定尺度和位置,DROID-SLAM是可以有无数解的,这对监督式的神经网络是不可取的。DROID-SLAM通过固定第一帧和第二帧的G来消除尺度不确定性和位置不确定性

        构建训练视频:这部分略,可以查看原文

        位姿损失:简单理解为如果Ti与Gi接近,那么Ti逆与Gi相乘应该是接近于单位矩阵的,log(1)是等于0的,所以如果Ti与Gi越接近Lpose应该是越接近于0 的。

5.系统搭建

        感兴趣的朋友可以去看原文,或者跑DROID-SLAM时去结合代码去理解,这部分不是DROID-SLAM这篇论文的重点,大部分是SLAM领域老生常谈的内容。

三、运行效果

1.作者DROID-SLAM的运行效果是这样描述的:

        高准确度:DROID-SLAM在多个数据集多种输入模式(单目、双目和RGB-D)上取得了巨大的进步(相较于之前的工作)。在 TartanAir SLAM 比赛中,DROID-SLAM在单目这一比赛项目(可能意思是,TartanAir SLAM 比赛包含单目、双目和RGB-D等多种比赛项目)上相较于之前最好的结果减少了 62% 的误差,在双目这一项目上减少了 60% 的误差。在ETH-3D RGB-D SLAM排行榜上暂列第一(在同时考虑错误率和灾难性故障率的 AUC 指标下,表现优于第二名 35%)。

        高鲁棒性:与以前的SLAM系统相比,DROID-SLAM的灾难性故障要少得多。在ETH-3D上,DROID-SLAM成功跟踪了32个RGB-D 数据集中的30个,而第二名仅成功跟踪了 19/32。在 TartanAir、EuRoC和TUM-RGBD上,DROID-SLAM都实现了零故障

        强泛化性:DROID-SLAM仅使用单目输入进行训练,也可以直接使用双目或 RGB-D 输入来提高准确性,而无需任何重新训练。DROID-SLAM只在人工合成的TartanAir数据集上仅使用单目输入进行一次训练,就可以在4 个数据集和 3 种输入模式下通过单个模型实现不错的效果。

2.运行效果展示:

图片底部文字翻译:DROID-SLAM可以泛化到新的数据集(想表达DROID-SLAM在没训练过的数据集上也可以取得不错的效果)。按照顺序,图上分别展示了DROID-SLAM在Tanks & Temples、ScanNet、Sintel、和ETH-3D数据集上的结果(都是用单目相机实现的)。

四、总结

1.主要创新点:

        这篇论文是将RAFT光流估计法的主要框架用于估计相机位姿和深度图。为此作者专门设计了一个Dense Bundle Adjustment Layer (DBA)——稠密光束法平差层,DBA主要就是为了将ConvGRU预测的投影调整转换为相机的位姿和深度图,就是因为设计了DBA层,才将RAFT对光流的估计改成了对姿态和逆深度图的估计。为了能进行大规模的多帧同时优化而设计了“帧图”

2.DROID-SLAM系统要实现的效果:

        以一组有序帧为输入,最后要得到相机的运动轨迹和场景的稠密点云图。如下图所示:

图片底部文字翻译:DROID-SLAM可以在单目、双目和RGB-D的视频输入下运行。该系统可以构建周围环境的稠密3D点云图(相机的实时定位也在点云图上显示出来了)。

  • 33
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值