DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记

  这篇博客分享的是ECCV 2020最佳论文原班人马邓嘉团队的最新力作《DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras》。该深度学习SLAM框架具有高精度、高鲁棒性、强泛化能力等优点。

  • 论文地址:https://arxiv.org/abs/2108.10869
  • 论文代码:https://github.com/princeton-vl/droid-slam
      
    DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第1张图片
      

1 概述

  现代SLAM系统大都使用BA(bundle adjustment)来进行优化,它比传统的滤波方法具有更高的精度和实用性。它还有一个优点是,使得SLAM系统易于修改以利用不同的传感器。例如,ORB-SLAM3支持单目、立体、RGB-D和IMU传感器,现代系统可以支持多种相机型号。但是,现代SLAM系统仍然缺乏许多实际应用所需的鲁棒性。运行时的故障以多种形式出现,例如特征轨迹丢失、优化算法发散和漂移累积等。如今,对于这些遗留问题,深度学习已经成为一种重要的解决方案。

DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第2张图片
  论文提出了一种新的基于深度学习的SLAM系统:DROID-SLAM。它通过密集BA层反复迭代更新相机姿态和像素深度。大量的实验表明,该SLAM系统具有高精度、高鲁棒性、强通用性等优点。在具有挑战性的基准数据集上,该SLAM系统大大超越了现有的经典或基于学习的SLAM系统。
  DROID-SLAM的强大性能和通用性是由其“可微的循环优化启发设计”(Differentiable Recurrent Optimization-Inspired Design, DROID)实现的。DROID是一种端到端可微架构,结合了经典方法和深度网络的优点。它建立在RAFT光流的基础之上,引入了两项关键创新:

  1. RAFT迭代更新光流,DROID-SLAM迭代更新相机姿态和深度。RAFT在两个帧上运行,DROID-SLAM的更新可以应用于任意数量的帧上,从而实现所有相机姿态和深度图的联合全局优化,这对于最小化长轨迹和回环的漂移至关重要。
  2. DROID-SLAM中相机姿态和深度图的每次更新都由可微DBA(Dense Bundle Adjustment)层生成,该层计算相机姿态和逐像素深度的高斯-牛顿更新,以最大限度地提高其与当前光流估计的兼容性。该DBA层利用几何约束,提高精度和鲁棒性,并使单目系统能够处理stereo或RGB-D输入而无需再次进行训练。

  DROID-SLAM的设计新颖。在先前的工作中,与DROID-SLAM体系结构最接近的深度学习方法是DeepV2D和BA-Net,它们都专注于深度估计。DeepV2D没有使用BA,而是交替更新深度和相机姿态。BA-Net有一个BA层,但与DROID-SLAM的BA层有很大的不同:前者不是“密集”的,因为它优化的是用于线性组合基础深度图的少量系数,而后者直接优化逐像素深度,不受基础深度图的限制。此外,BA-Net优化的是光度重投影误差(在特征空间中),而后者利用了最先进的流(flow)估计来优化几何误差。
  

2 相关工作

  Visual SLAM:关注单目、stereo或RGB-D图像。这些方法通常可以分为直接法和间接法。间接法首先通过检测兴趣点和附加的特征描述子将图像处理为中间表示。然后在图像之间匹配特征。然后,通过最小化重投影误差来优化相机姿态和3D点云。直接法则对图像的形成过程进行建模,定义一个关于光度误差的目标函数。直接法的一个优点是,它可以模拟更多关于图像的信息,例如间接法不使用的线条和强度变化信息。然而,光度误差通常会使得优化问题变得更为困难,且直接法对几何失真的鲁棒性较差。这种方法需要更复杂的优化技术,比如由粗到细的图像金字塔,以避免陷入局部极小值。
  论文所提出的DROID-SLAM并不属于这两个类别之一。与直接法一样,它不需要预处理步骤来检测和匹配图像之间的特征,而是直接使用完整的图像,因而能够利用比间接法更广泛的信息。然而,与间接法类似,它也最小化重投影误差。这是一个更容易的优化问题,并且避免了对更复杂表示(如图像金字塔)的需要。从这个意义上说,论文所提出的方法借鉴了这两种方法的优点:间接法的目标函数更平滑,直接法的建模能力更强。

  Deep Learning:最近被应用于解决SLAM问题。许多工作集中于特定的子问题,如特征检测、特征匹配、异常值剔除和定位等。此外,也有许多工作致力于端到端训练SLAM系统。这些方法也不是完整的SLAM系统,而是专注于两帧到十几帧的小规模重建。它们缺乏现代SLAM系统的许多核心能力,如回环检测和全局BA,这抑制了它们执行大规模重建的能力。∇SLAM将几种现有的SLAM算法作为可微计算图实现,允许重建中的误差反向传播到测量值上。虽然这种方法是可微的,但它没有可训练的参数,这意味着系统的性能受到它们仿真的经典算法的精度限制。
  就目前来说,DeepFactors是最完整的深度SLAM系统,它建立在早期CodeSLAM的基础上。它执行姿态和深度变量的联合优化,并且能够进行短距离和长距离的回环检测。与BA-Net类似,DeepFactors在推理过程中优化了可学习的基础深度图的参数。相比之下,DROID-SLAM不依赖于可学习的basis,而是优化像素深度,从而能够将网络更好地推广到新的数据集,因为其深度表示与训练的数据集无关。
  

3 方法流程

  DROID-SLAM以视频作为输入,来估计相机的轨迹并构建周围环境的三维地图。其输入是有序的图像集合,对于每个图像,记录两个状态变量:相机姿态G和逆深度d。采用帧图 (V, E) 来表示帧之间的共视性。边 (i, j) ∈ E 表示图像 Ii 和 Ij 具有重叠的视野,这些视野存在共享点。帧图是在推理训练过程中动态生成的。在每次姿态或深度更新后,我们可以重新计算可见性以更新帧图。如果相机返回到先前已经到过的区域,将在帧图中添加long range connections以执行loop closure。

3.1 Feature Extraction and Correlation

  Feature Extraction:通过特征提取网络处理每个输入图像。该网络由6个残差块和3个下采样层组成,生成1/8输入图像分辨率的密集特征图。与RAFT一样,使用两个独立的网络:特征网络和上下文网络。特征网络用于构建correlation volumes,而上下文特征在每次执行更新操作期间被添加到网络中。

  Correlation Pyramid:对于帧图中的每条边,通过取所有特征向量对之间的点积来计算4D correlation volume。然后,在RAFT之后对correlation volume的最后两个维度进行平均池化,以形成一个4级的Correlation Pyramid。

  Correlation Lookup:定义一个lookup算子,该算子使用半径为r的网格对 correlation volume进行索引。lookup算子以H×W坐标网格作为输入,并使用双线性插值从correlation volume中检索对应值。该算子应用于金字塔中的每个correlation volume,并通过concatenate每个层级的结果来计算最终的特征向量。

3.2 Update Operator

DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第3张图片
  DROID-SLAM系统的核心组件是一个可学习的update算子,如图2所示。update算子是一个hidden state为h的3×3 convolutional GRU。每次使用该算子都会更新其hidden state,并更新相机姿态和深度。姿态和深度更新分别通过SE3 manifold上的retraction和向量加法应用于当前深度和姿态估计。update算子的迭代应用会生成一系列姿态和深度,并最终收敛到一个反映真实重建的固定点。

  Correspondence:在每次迭代开始时,使用当前的姿态和深度估计来估计correspondence。给定一个像素坐标网格,pi在第i帧中,计算其dense correspondence field pij。pij表示使用当前姿态和深度估计值将像素pi映射到第j帧的坐标。

  Inputs:使用correspondence field来索引correlation volumes。对于每条边,使用pij从correlation volumes Cij执行查找,以检索correlation features。此外,使用correspondence field导出由相机运动引起的光流差pij−pj作为差异。
  correlation features提供了pij附近的视觉相似性信息,允许网络学习对齐视觉相似的图像区域。然而,correspondence有时是模棱两可的。该flow提供了一个补充信息源,允许网络利用运动场中的平滑度来提升鲁棒性。

  Update:correlation features和flow features在注入GRU之前分别通过两个卷积层进行映射。此外,通过逐像素的加法将上下文网络提取的上下文特征注入GRU。
  ConvGRU是一种具有小感受野的局部算子。通过在图像的空间维度上平均hidden state来提取全局上下文信息,并使用该特征向量作为GRU的额外输入。全局上下文信息在SLAM中很重要,因为,例如由大型移动物体引起的不正确的correspondence会降低系统的精度。识别并剔除这些错误的correspondence对网络来说非常重要。
  GRU生成更新的hidden state h(k+1)。它不是直接预测深度或姿态的更新,而是预测dense flow fields空间中的更新。通过两个额外的卷积层映射hidden state以产生两个输出:一个revision flow field rij和一个associated confidence map wij。revision rij是由网络预测的修正项,用于修正密集correspondence field中的误差。
  然后,对共享相同源视图i的所有特征上的hidden state进行池化,并预测逐像素阻尼因子λ。这里,使用softplus运算符来确保阻尼项为正。此外,使用池化后的特征来预测8x8的mask,该mask可用于逆深度估计的上采样中。

  Dense Bundle Adjustment Layer (DBA):DBA将一组flow revisions映射为一组姿态和像素深度的更新。DBA层作为计算图的一部分进行实现,并在训练期间通过该层执行反向传播。

3.3 Training

  该SLAM系统是在PyTorch中实现的,并使用LieTorch扩展在所有组元素的切线空间中执行反向传播。

  Removing gauge freedom:在使用单目相机时,网络只能基于相似性变换恢复相机的轨迹。一种解决方案是定义对相似性变换不变的损失。然而,在训练过程中仍然存在gauge-freedom,这对线性系统的调节和梯度的稳定性影响很小。在这里,通过将前两个姿态固定到每个训练序列的姿态真值来解决这个问题。固定第一个姿态将可以解决6自由度的gauge freedom。固定第二个姿态则可以解决scale freedom。

  Constructing training video:每个训练示例由7帧视频序列组成。对视频进行采样,来保证稳定的训练和良好的后续表现。
  训练集由一组视频组成。对于长度为Ni的每个视频i,预先计算Ni×Ni的距离矩阵,用于存储每对帧之间的平均光流幅度。然而,并非所有帧都是共视的,因此,将重叠度小于50%的帧对的距离定义为无穷远。在训练过程中,通过距离矩阵中的采样路径动态生成视频,使得相邻视频帧之间的平均flow在8px到96px之间。

  Supervision:使用姿态损失和flow损失相结合的方法来监督网络的训练。flow损失应用于相邻帧对之间。计算了由预测深度和姿态引起的光流以及由深度和姿态真值引起的光流。损失被认为是两个flow fields之间的平均L2距离。给定一组姿态真值T和姿态预测值G,姿态损失被定义为姿态真值和姿态预测值之间的距离Lpose。

3.4 SLAM System

  在推理过程中,将网络组成一个完整的SLAM系统。SLAM系统以视频流为输入,实时进行重建和定位。该系统包含两个异步运行的线程。前端线程接收新帧、提取特征、选择关键帧并执行局部BA。后端线程在关键帧的整个历史上同时执行全局BA。

  Initialization:DROID-SLAM的初始化非常简单。初始时只需要收集一组12帧的图像序列即可。在累积帧时,如果光流大于16px(通过应用一次更新迭代进行估计),则只保留前一帧。累积12帧后,通过在相隔3个时间步的关键帧之间创建边来初始化帧图,然后运行10次更新算子的迭代。

  Frontend:前端直接对传入的视频流进行操作。它维护一组关键帧和一个帧图,该帧图存储可共视的关键帧之间的边。关键帧姿态和深度则在动态优化中。首先从传入帧中提取特征,然后将新帧添加到帧图中,并添加其3个最近邻的边(通过平均光流测量)。使用线性运动模型初始化姿态。然后,多次迭代更新算子来更新关键帧的姿态和深度。固定前两个姿态以消除gauge freedom,但将所有深度视为自由变量。
  跟踪新帧后,选择要删除的一个关键帧。通过计算平均光流大小来计算帧对之间的距离,并去除冗余帧。如果没有帧是很好的删除候选,则将删除最旧的关键帧。

  Backend:后端在关键帧的整个历史上执行全局BA。在每次迭代期间,使用所有关键帧对之间的flow重建帧图,用大小为N×N的距离矩阵来表示。首先,在时间上相邻的关键帧之间添加边。然后,从距离矩阵中按flow增加的顺序采样新边。对于每个选定边,在大小为2的距离内抑制相邻边,这里的距离定义为索引对之间的切比雪夫距离。
  然后,将更新算子应用于整个帧图,通常由数千帧和边组成。然而,存储所有的correlation volumes将很快超过视频内存。因此,作者使用RAFT中提出的高效内存来实现。
  在训练时,使用PyTorch的自动求导功能来进行密集BA。在推理时,使用一个定制的CUDA内核,该内核利用了BA问题的块稀疏结构特性,对简化后的相机块执行稀疏Cholesky分解。
  在这里,只对关键帧图像执行完整的BA。非关键帧的姿态则通过迭代估计每个关键帧与其相邻非关键帧之间的flow来执行motion-only BA来恢复。在测试过程中,评估了所有相机的运动轨迹,而不仅仅是关键帧。

DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第4张图片
  Stereo and RGB-D:该系统可以很容易地修改为stereo和RGB-D视频。在RGB-D的情况下,仍然将深度视为一个变量,因为传感器深度可能会有噪声且缺少观测值,只需在优化目标中添加一个项,该项将penalize测量深度和预测深度之间的平方距离。对于stereo,使用与上述完全相同的系统,只需将帧加倍,并在DBA层中固定左右帧之间的相对姿态即可。图中的cross camera edges允许我们利用stereo信息。
  

4 实验

DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第5张图片
DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第6张图片
DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第7张图片
DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第8张图片
DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第9张图片
DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第10张图片
DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第11张图片
DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第12张图片
DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第13张图片
DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记_第14张图片

5 总结

  论文提出了DROID-SLAM,一种用于视觉SLAM的端到端神经网络结构。DROID-SLAM精确、鲁棒、通用,可用于单目、stereo和RGB-D视频。在具有挑战性的基准上,它比以前的工作有很大的优势。

  *部分翻译或理解可能会存在偏差,仅供参考,欢迎讨论。

你可能感兴趣的:(论文阅读笔记,自动驾驶,深度学习)