DROIDSLAM 论文阅读笔记

Introduction

DROID是"Differentiable Recurrent Optimization-Inspired Design"的简称。DROID-SLAM结合了传统方法和深度学习,具有准确率高,鲁棒性强,普遍性好的优点。

Approach

特征提取

采用RAFT(待看)的特征网络和语境网络。分别提取特征生成原图1/8分辨率的密度特征图和提取上下文信息。

相关金字塔

对于有共视的两帧计算相关体(correlation volume) \(C_{u_1,v_1,u_2,v_2} ^{i,j}\in R^{H \times W \times H \times W}\),表示图像\(i\)\((u_1,v_1)\)位置与图像\(j\)\((u_2,v_2)\)位置特征的相关性。相关体的计算使用特征图两个位置特征向量的点积。并使用平均池化形成4层相关金字塔。

相关查找

定义查找运算(lookup operator) \(L_r : R^{H \times W \times H \times W} \times R^{H \times W \times 2} \rightarrow R^{H \times W \times (r+1)^2}\),用一个\(H \times W\)的坐标矩阵在\(C^{i,j}\)中查询得到一个\(H \times W\)的特征向量矩阵。假设矩阵中\((u_1,v_1)\)位置坐标为\((x,y)\)就把\(C_{u_1,v_1,x,y}^{i,j}\)附近半径为\(r\)的区域的值作为相关特征,相关金字塔每一层查找的相关特征拼接起来(个人理解)。

更新运算

本文的核心就是结合了神经网络和BA(Bundle Adjustment)进行后端优化。

image

本文的BA指的是将相机的位姿\(G\)和图片的深度\(d\)(采用逆深度即深度的倒数)捆绑起来优化。更新操作是一个迭代的过程,对应的网络结构是循环神经网络RNN,使用的是ConvGRU(Gated Recurrent Unit),如上图所示。考虑有共视的两帧\(i,j\)计算\(p_{i,j} \in R^{H\times W \times 2}\)表示在当前对相机位姿和图像深度的情况下,图像\(i\)\((u_1,v_1)\)在图像\(j\)应该处于什么位置。

\[p_{i,j} = \Pi_c(G_{i,j} \circ \Pi_c^{-1}(p_i,d_i)) \]

\(\Pi_c\)是针孔相机模型,\(G_{i,j}\)是相机位姿坐标变换。每一论迭代,对\(p_{i,j}\)使用查找运算获取相关特征输入ConvGRU,同时输入的还有光流信息\(p_{i,j}-p_{j}\)。此外还将隐藏状态在图像空间维度的平均作为额外的输入。ConvGRU会产生两个输出\(r_{i,j}\)\(w_{i,j}\)\(r_{i,j}\)是对\(p_{i,j}\)的修正,\(w_{i,j}\)用于代价函数的计算,如下图所示。

image

之后在DBA(Dense Bundle Adjustment Layer)用高斯牛顿法来做BA,优化的目标是t调整相机位姿和图像深度最小化以下代价函数。

\[E(G^{'}, d^{'}) =\sum_{(i,j) \in \xi} \Vert p_{i,j}^* - \Pi_c(G_{i,j}^{'} \circ \Pi_c^{-1}(p_i,d_i^{'})) \Vert_{\Sigma_{i,j}}^{2} \]

其中\(p_{i,j}^* = r_{i,j} + p_{i,j}\),表示ConvGRU修正后的\(p_{i,j}\)\(\Sigma_{i,j} = \mathrm{diag}\ w_{i,j}\)用于计算马氏距离。

高斯牛顿法优化的过程雅克比矩阵推导见论文[1],我还不太会。求解\(H\Delta x = g\)可以利用H矩阵的稀疏性质进行Shur消元[2]。

参考资料

[1]DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras
[2]视觉SLAM十四讲:从理论到实践(第二版)第9章

原文地址:https://www.cnblogs.com/zhanggengchen/p/15664428.html