DROID-SLAM: 单目、双目、RGBD相机的深度视觉SLAM

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

f361c3a82803e309c29d055efe6ccac6.png

作者丨paopaoslam

来源丨泡泡机器人SLAM

标题:DROID-SLAM: Deep Visual SLAM for Monocular Stereo, and RGB-D Cameras

作者:Zachary Teed, Jis Deng

来源:arXiv 2021

编译:方川 阮建源

审核:张海晗

大家好,今天给大家带来的Princeton VL的SLAM工作: DROID-SLAM: Deep Visual SLAM for Monocular Stereo, and RGB-D Cameras. 这篇工作把Visual-SLAM问题使用深度神经网络直接端到端地实现了,并且取得了比以往传统SLAM方案更高的精度和鲁棒性。

d7a7bbef29fef4b5617d3b7d0390ade5.png

摘要

9161910d95ee599ba5b3727850dfeef5.png

    本文提出了DROID-SLAM, 一个全新的基于深度学习的SLAM系统. DROID-SLAM通过一个深度BA层来循环迭代的更新相机位姿和像素深度值. 实验证明, DROID-SLAM比传统SLAM取得了更高的精度和鲁棒性, 在实验场景中几乎不会失败. 尽管我们只在单目视频上训练了我们的网络, 但是在测试阶段,这个网络仍然可以在双目和RGB-D视频上取得很好的表现.代码开源在https://github.com/princeton-vl/DROID-SLAM.

0911dab8bc912f01a7f7bb1705b801aa.png

主要贡献

fd4e6c213d862b9e102f12ac54c3adf9.png

1, High Accuracy: 在TartanAir、ETH-3D、EuRoc、TUM-RGBD数据集上处于领先地位, 并且极大地超越原先方法;

2, High Robustness: 非常稳定的跟踪能力, 除了ETH-3D, 其他数据集上没有出现fail情况;

3, Strong Generalization: 虽然本文只使用单目视频训练, 但是在测试阶段直接使用双目视频和RGB-D作为输入, 仍然得到了很好的预测结果;

9d0dcc496d48b20f1bae165ea7fdd5a6.png

图,DROID-SLAM可以在单目、立体和RGB-D相机上运行。它构建了一个环境的稠密3D地图,同时在地图中定位相机。

a782ff3ebbe4b703d81d1c164eaa9020.png

算法流程

e0a43a80a625f3346c2fa51e5f50cec6.png

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:

9753614b69a12d5e886877b5dcceee35.png

Correlation Lookup: 根据像素坐标和查找半径r, 查找算子L_r会在不同分辨率的correlation volume上查找对应的相关信息张量,最后将他们拼接为一个feature vector;

3.更新算子

更新模块是本文网络的核心模块, 整体结构如下图所示:

8bc300af2e46215f6be75aeb5700a1a9.png

图2:更新操作的说明。算子作用于框架图中的边,预测流修正通过(DBA)层映射到深度和姿态更新。

C_ij是图像I_i与I_j之间的相关信息张量,h_ij是隐藏状态. 每轮更新之后,  h_ij会被更新, 并且输出位姿变化和深度变化d^k, 然后更新下一帧的位姿和深度:

d914c7d8905c7156958ff75636edfe23.png

Correspondece: 在每次更新之前, 根据当前的pose和depth, 对于图像I_i中的每个网格, 网格中的像素坐标集合p_i , 那么它在图像 I_j上的对应网格像素集合p_ij可以表示为:

59ee3aee968972bc4eeac73a97a15512.png

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层将更新模块输出的稠密光流场变化量转换为相机位姿和稠密深度值: 这里的相机位姿可以使用传统方法计算得到, 深度值则是根据下面的目标函数和舒尔补公式, 迭代优化的方式得到的.

36fec634ce559b9c214feaebf729109b.png

这里仍然是使用Guass-Newton法计算位姿和深度的变化量, 利用舒尔补先计算位姿变化量d xi, 再计算深度变化量

70bc43411ba7d3c51717abdebdada068.png

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则是

73bdfe3bfb5c088d6a987cd743d33537.png

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改为左右两个相机的位姿重投影误差.

e54728781f6618ba7f7f78c8da6cf45f.png

图3,DROID-SLAM可以推广到新的数据集。因此,我们展示了Tanks&Temples [21], ScanNet [10], Sintel [3], ETH-3D [42];全部使用单目相机。

bd43d55e9721157b5e90a04936cee2ac.png

主要结果

3e6cafe77d1313ea745c505dbfc10fde.png

    本文提出的方法在多个数据集上进行了充分的实验, 并且和其他深度学习方法以及经典的SLAM算法做了比较. 实验部分着重比较了相机轨迹的绝对轨迹误差ATE.

    本文中的网络在合成的数据集TartanAir上面训练了250k次, 图像分辨率为384x512, 在4块 RTX-3090上训练了1周时间.

7f078e04af7264fa2731c44f7343b702.png

表1:TartanAir单目基准测试的结果。

05dc4847f99524da225581ebbbd3c36f.png

表2:TartanAir双目基准测试的结果。

fb5ce3fe4f02595ae47117eb4ebf83de.png

表3:TartanAir测试集的结果,与ECCV 2020 SLAM竞赛的前3名SLAM相比。使用归一化相对姿态误差计算所有可能的分数

长度为f5的序列;10;15...40g米,详见比赛页面。

    在EuRoc和TUM-RGB-D数据集上也做了充分的实验, 实验正面,本文网络可以很好的泛化到Stereo和RGB-D上,同时取得很高的精度和鲁棒性.

5b03f6b91ba7bee63c8fabbbea29f58a.png

表4:基于EuRoC数据集的单目SLAM, ATE[m]。+表示视觉里程计方法。

b3138a79c422c25a0757a1b814115c7f.png

表5:基于EuRoC数据集的双目SLAM, ATE[m]。

5575836e196d7896a719753fe2c2ff8f.png

表6:TUM-RGBD基准上的ATE。所有方法都使用单目视频,除了DeepTA 使用RGB-D和TartanVO使用地面真实来缩放相对姿态。

74c60bca50956825e8ac26452deb08b5.png

图4:RGB-D ETH3D-SLAM基准的总体结果。(左)我们的方法, 它只在合成的TartanAir数据集上训练,在训练和测试分割中都排名第一。(右)将成功轨迹数作为ATE的函数绘制出来。我们的方法成功跟踪30/32的图像数据可用的数据集。

bf6959533ca680ae0b2ff64c8fd995bc.png

图5:关键帧图像的可视化、深度、光流和置信度估计。

c538ba9d2e99569c41af87bf9bf3498d.png

图6:(左)我们展示了不同输入(单目和双目)的系统性能以及是否在局部BA之外执行全局优化(局部vs.完全)。(右)跟踪精度和关键帧数量的关系。我们在实验中使用了5个关键帧(粗体)。

5cdd8e31c65d1455551ceb150cf10ab7.png

图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.

点击阅读原文,即可获取本文下载链接。提取码:n575

本文仅做学术分享,如有侵权,请联系删文。

3D视觉精品课程推荐:

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

b3c9cc93f5436be0bc6afdcebdd710c5.png

▲长按加微信群或投稿

d711c77fbeec0d154f83eda04a5eebf1.png

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

51ed91f375010ac4ba58b3034d5ce0f3.png

 圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值