泡泡图灵智库,带你精读机器人顶级会议文章
标题:DROID-SLAM: Deep Visual SLAM for Monocular Stereo, and RGB-D Cameras
作者:Zachary Teed, Jis Deng
来源:arXiv 2021
编译:方川 阮建源
审核:张海晗
这是泡泡图灵智库推送的第693篇文章,欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权
大家好,今天给大家带来的Princeton VL的SLAM工作: DROID-SLAM: Deep Visual SLAM for Monocular Stereo, and RGB-D Cameras. 这篇工作把Visual-SLAM问题使用深度神经网络直接端到端地实现了,并且取得了比以往传统SLAM方案更高的精度和鲁棒性。
摘要
    本文提出了DROID-SLAM, 一个全新的基于深度学习的SLAM系统. DROID-SLAM通过一个深度BA层来循环迭代的更新相机位姿和像素深度值. 实验证明, DROID-SLAM比传统SLAM取得了更高的精度和鲁棒性, 在实验场景中几乎不会失败. 尽管我们只在单目视频上训练了我们的网络, 但是在测试阶段,这个网络仍然可以在双目和RGB-D视频上取得很好的表现.代码开源在https://github.com/princeton-vl/DROID-SLAM.
主要贡献
1, High Accuracy: 在TartanAir、ETH-3D、EuRoc、TUM-RGBD数据集上处于领先地位, 并且极大地超越原先方法;
2, High Robustness: 非常稳定的跟踪能力, 除了ETH-3D, 其他数据集上没有出现fail情况;
3, Strong Generalization: 虽然本文只使用单目视频训练, 但是在测试阶段直接使用双目视频和RGB-D作为输入, 仍然得到了很好的预测结果;
图,DROID-SLAM可以在单目、立体和RGB-D相机上运行。它构建了一个环境的稠密3D地图,同时在地图中定位相机。
算法流程
1. Notation
  算法的输入是一个视频或者图像序列I_t {t=0~N}每一张图像, 算法的目标是求解相机位姿 G_t和 逆深度d_t.  相机位姿序列 G_t {t=0~N}和逆深度序列d_t {t=0~N}是未知的的系统状态变量, 在输入的图像序列中迭代的更新最终收敛. 同时, 本文设计了一个frame-graph (V, E)结构表示图像之间的共视关系, 边(i,j) 表示 I_i 和 I_j之间存在共视关系. frame-graph随着位姿和深度的更新也会动态更新, 对于回环检测, 我们在frame-graph中添加长的回环边.
2.特征提取和关联
    特征提取和关联这一部分与RAFT中的特征网络和相关信息张量correlation volume 完全一致.
特征提取网络: feature network由6个残差模块和3个下采样层组成, 生成输入图像1/8分辨率的feature map; context network提取图像全局信息, 作为下文更新算子的一个输入;
Correlation Pyramid: 对于frame-graph中的每条边(i,j), 本文使用点积计算一个4D的correlation volume:
Correlation Lookup: 根据像素坐标和查找半径r, 查找算子L_r会在不同分辨率的correlation volume上查找对应的相关信息张量,最后将他们拼接为一个feature vector;
3.更新算子
更新模块是本文网络的核心模块, 整体结构如下图所示:
图2:更新操作的说明。算子作用于框架图中的边,预测流修正通过(DBA)层映射到深度和姿态更新。
C_ij是图像I_i与I_j之间的相关信息张量,h_ij是隐藏状态. 每轮更新之后,  h_ij会被更新, 并且输出位姿变化和深度变化d^k, 然后更新下一帧的位姿和深度:
Correspondece: 在每次更新之前, 根据当前的pose和depth, 对于图像I_i中的每个网格, 网格中的像素坐标集合p_i , 那么它在图像 I_j上的对应网格像素集合p_ij可以表示为:
Input: 根据上一步计算得到的grid correspondence, 查找两张图像的相关信息feature map C_ij;同时可以根据p_i和p_ij计算两张图像之间的光流场flow fileds. C_ij表征的是两张图像之间的视觉一致程度, 更新模块的目标是计算相对位姿来对齐两张图像使之一致性最大化. 但是因为视觉一致性会存在奇异, 因此我们同时利用光流场来提供位姿估计的鲁棒性.
Update:与RAFT网络一样, correlation features 和 flow features经过两层卷积之后, 与context feature一同送入GRU模块. 在GRU模块中, 本文对隐藏状态h_ij作average pooling来提取global context, global context对于提高剧烈运动物体的光流估计鲁棒性有帮助.
GRU模块同时更新隐藏状态得到 h^(k+1), 我们利用这个隐藏状态张量得到光流场的变化量 r_ij和对应的置信度 w_ij, 则修正后的网格p*_ij =  r_ij + p_ij. 再利用h^(k+1)得到pixel-wise的阻尼系数矩阵和 用于深度估计过程中的8x8的上采样mask;
Dense Bundle Adjustment Layer:首先, DBA层将更新模块输出的稠密光流场变化量转换为相机位姿和稠密深度值: 这里的相机位姿可以使用传统方法计算得到, 深度值则是根据下面的目标函数和舒尔补公式, 迭代优化的方式得到的.
这里仍然是使用Guass-Newton法计算位姿和深度的变化量, 利用舒尔补先计算位姿变化量d xi, 再计算深度变化量
v, w分别代表相机位姿和深度的梯度方向.
DBA 层的实现和反向传播是基于LieTorch的, 是一个李群李代数的pytorch实现的package.
4,训练过程
单目尺度问题: 为了解决单目SLAM尺度问题, 我们把前两帧图像位姿固定为ground truth.
采样视频/图像序列: 为了是我们的网络泛化能力更好, 我们通过计算图像序列中任意两张图像之间的光流场距离, 对这样的N_i * N_i flow distance matrix进行采样,得到采样后的心得图像序列形成的视频来输入网络进行训练.
监督和loss: 监督信息是ground truth pose和ground truth flow. 光流程loss是 网络预测的flow fileds与ground truth flow fileds的L_2 loss. 图像位姿loss则是
5, SLAM system
    和以前的SLAM系统一样, 本文方法实现的SLAM系统也包括前端和后端两个线程. 前端线程提取特征、选取关键帧、局部优化. 后端线程对所有关键帧进行全局优化.

初始化:  选择视频中前部的12帧图像来完成初始化, 相邻两帧图像之间的光流必须大雨16px, 12帧图像集齐后, 我们建立起一个frame-graph, 并且运行10次更新算子的迭代.
视觉前端: 前端部分选取并维护着关键帧序列. 新的图像到来时, 进行特征提取、计算光流场, 并根据光流场计算3个与之共视程度最大的关键帧, 然后根据共视关系来迭代更新当前关键帧的pose和depth. 同时, 前端部分也负责边缘化操作.
后端优化: 后端部分将所有关键帧进行BA优化. 每次进行更新迭代时,都会对所有关键帧重新构建frame-graph, 这是根据所有关键帧之间的光流场距离矩阵N * N来构建的. 接着在frame-graph上运行更新算子, 在BA缓解我们使用的是LieTorch. 后端网络只在关键帧上运行BA优化, 对于视频中的普通帧, 只优化相机pose.
Stereo and RGB-D:为了使我们设计的这个SLAM系统能够很好的应用到双目和RGB-D的场景中, 我们会在Stereo和RGB-D的情景中对公式(4)做一些修改. 比如在RGB-D场景中, 公式4添加一个残差项: 估计的depth map与测量的depth map之间的距离平方和. 在Stereo场景中, 公式4改为左右两个相机的位姿重投影误差.
图3,DROID-SLAM可以推广到新的数据集。因此,我们展示了Tanks&Temples [21], ScanNet [10], Sintel [3], ETH-3D [42];全部使用单目相机。
主要结果
    本文提出的方法在多个数据集上进行了充分的实验, 并且和其他深度学习方法以及经典的SLAM算法做了比较. 实验部分着重比较了相机轨迹的绝对轨迹误差ATE.
    本文中的网络在合成的数据集TartanAir上面训练了250k次, 图像分辨率为384x512, 在4块 RTX-3090上训练了1周时间.
表1:TartanAir单目基准测试的结果。
表2:TartanAir双目基准测试的结果。
表3:TartanAir测试集的结果,与ECCV 2020 SLAM竞赛的前3名SLAM相比。使用归一化相对姿态误差计算所有可能的分数
长度为f5的序列;10;15...40g米,详见比赛页面。
    在EuRoc和TUM-RGB-D数据集上也做了充分的实验, 实验正面,本文网络可以很好的泛化到Stereo和RGB-D上,同时取得很高的精度和鲁棒性.
表4:基于EuRoC数据集的单目SLAM, ATE[m]。+表示视觉里程计方法。
表5:基于EuRoC数据集的双目SLAM, ATE[m]。
表6:TUM-RGBD基准上的ATE。所有方法都使用单目视频,除了DeepTA 使用RGB-D和TartanVO使用地面真实来缩放相对姿态。
图4:RGB-D ETH3D-SLAM基准的总体结果。(左)我们的方法, 它只在合成的TartanAir数据集上训练,在训练和测试分割中都排名第一。(右)将成功轨迹数作为ATE的函数绘制出来。我们的方法成功跟踪30/32的图像数据可用的数据集。
图5:关键帧图像的可视化、深度、光流和置信度估计。
图6:(左)我们展示了不同输入(单目和双目)的系统性能以及是否在局部BA之外执行全局优化(局部vs.完全)。(右)跟踪精度和关键帧数量的关系。我们在实验中使用了5个关键帧(粗体)。
图7:(左)更新操作对全局上下文的影响。(右)使用BA的影响在训练时使用BA层vs直接在管流上训练,然后在测试时使用BA
Abstract 
We introduce DROID-SLAM, a new deep learning based SLAM system. DROIDSLAM consists of recurrent iterative updates of camera pose and pixelwise depththrough a Dense Bundle Adjustment layer. DROID-SLAM is accurate, achievinglarge improvements over prior work, and robust, suffering from substantially fewercatastrophic failures. Despite training on monocular video, it can leverage stereoor RGB-D video to achieve improved performance at test time. The URL to ouropen source code is https://github.com/princeton-vl/DROID-SLAM.

如果你对本文感兴趣,想要下载完整文章进行阅读,可以关注【泡泡机器人SLAM】公众号
点击阅读原文,即可获取本文下载链接。提取码:n575
欢迎来到泡泡论坛,这里有大牛为你解答关于SLAM的任何疑惑。
有想问的问题,或者想刷帖回答问题,泡泡论坛欢迎你!
泡泡网站:www.paopaorobot.org
泡泡论坛:http://paopaorobot.org/bbs/
泡泡机器人SLAM的原创内容均由泡泡机器人的成员花费大量心血制作而成,希望大家珍惜我们的劳动成果,转载请务必注明出自【泡泡机器人SLAM】微信公众号,否则侵权必究!同时,我们也欢迎各位转载到自己的朋友圈,让更多的人能进入到SLAM这个领域中,让我们共同为推进中国的SLAM事业而努力!
商业合作及转载请联系[email protected]
继续阅读
阅读原文