天天看點

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

作者丨paopaoslam

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

作者:Zachary Teed, Jis Deng

編譯:方川 阮建源

稽核:張海晗

大家好,今天給大家帶來的Princeton VL的SLAM工作: DROID-SLAM: Deep Visual SLAM for Monocular Stereo, and RGB-D Cameras. 這篇工作把Visual-SLAM問題使用深度神經網絡直接端到端地實作了,并且取得了比以往傳統SLAM方案更高的精度和魯棒性。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

摘要

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

    本文提出了DROID-SLAM, 一個全新的基于深度學習的SLAM系統. DROID-SLAM通過一個深度BA層來循環疊代的更新相機位姿和像素深度值. 實驗證明, DROID-SLAM比傳統SLAM取得了更高的精度和魯棒性, 在實驗場景中幾乎不會失敗. 盡管我們隻在單目視訊上訓練了我們的網絡, 但是在測試階段,這個網絡仍然可以在雙目和RGB-D視訊上取得很好的表現.代碼開源在https://github.com/princeton-vl/DROID-SLAM.

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

主要貢獻

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

1, High Accuracy: 在TartanAir、ETH-3D、EuRoc、TUM-RGBD資料集上處于領先地位, 并且極大地超越原先方法;

2, High Robustness: 非常穩定的跟蹤能力, 除了ETH-3D, 其他資料集上沒有出現fail情況;

3, Strong Generalization: 雖然本文隻使用單目視訊訓練, 但是在測試階段直接使用雙目視訊和RGB-D作為輸入, 仍然得到了很好的預測結果;

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

圖,DROID-SLAM可以在單目、立體和RGB-D相機上運作。它建構了一個環境的稠密3D地圖,同時在地圖中定位相機。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

算法流程

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

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:

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

Correlation Lookup: 根據像素坐标和查找半徑r, 查找算子L_r會在不同分辨率的correlation volume上查找對應的相關資訊張量,最後将他們拼接為一個feature vector;

3.更新算子

更新子產品是本文網絡的核心子產品, 整體結構如下圖所示:

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

圖2:更新操作的說明。算子作用于架構圖中的邊,預測流修正通過(DBA)層映射到深度和姿态更新。

C_ij是圖像I_i與I_j之間的相關資訊張量,h_ij是隐藏狀态. 每輪更新之後,  h_ij會被更新, 并且輸出位姿變化和深度變化d^k, 然後更新下一幀的位姿和深度:

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

Correspondece: 在每次更新之前, 根據目前的pose和depth, 對于圖像I_i中的每個網格, 網格中的像素坐标集合p_i , 那麼它在圖像 I_j上的對應網格像素集合p_ij可以表示為:

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

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層将更新子產品輸出的稠密光流場變化量轉換為相機位姿和稠密深度值: 這裡的相機位姿可以使用傳統方法計算得到, 深度值則是根據下面的目标函數和舒爾補公式, 疊代優化的方式得到的.

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

這裡仍然是使用Guass-Newton法計算位姿和深度的變化量, 利用舒爾補先計算位姿變化量d xi, 再計算深度變化量

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

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

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

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改為左右兩個相機的位姿重投影誤差.

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

圖3,DROID-SLAM可以推廣到新的資料集。是以,我們展示了Tanks&Temples [21], ScanNet [10], Sintel [3], ETH-3D [42];全部使用單目相機。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

主要結果

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

    本文提出的方法在多個資料集上進行了充分的實驗, 并且和其他深度學習方法以及經典的SLAM算法做了比較. 實驗部分着重比較了相機軌迹的絕對軌迹誤差ATE.

    本文中的網絡在合成的資料集TartanAir上面訓練了250k次, 圖像分辨率為384x512, 在4塊 RTX-3090上訓練了1周時間.

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

表1:TartanAir單目基準測試的結果。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

表2:TartanAir雙目基準測試的結果。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

表3:TartanAir測試集的結果,與ECCV 2020 SLAM競賽的前3名SLAM相比。使用歸一化相對姿态誤差計算所有可能的分數

長度為f5的序列;10;15...40g米,詳見比賽頁面。

    在EuRoc和TUM-RGB-D資料集上也做了充分的實驗, 實驗正面,本文網絡可以很好的泛化到Stereo和RGB-D上,同時取得很高的精度和魯棒性.

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

表4:基于EuRoC資料集的單目SLAM, ATE[m]。+表示視覺裡程計方法。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

表5:基于EuRoC資料集的雙目SLAM, ATE[m]。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

表6:TUM-RGBD基準上的ATE。所有方法都使用單目視訊,除了DeepTA 使用RGB-D和TartanVO使用地面真實來縮放相對姿态。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

圖4:RGB-D ETH3D-SLAM基準的總體結果。(左)我們的方法, 它隻在合成的TartanAir資料集上訓練,在訓練和測試分割中都排名第一。(右)将成功軌迹數作為ATE的函數繪制出來。我們的方法成功跟蹤30/32的圖像資料可用的資料集。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

圖5:關鍵幀圖像的可視化、深度、光流和置信度估計。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

圖6:(左)我們展示了不同輸入(單目和雙目)的系統性能以及是否在局部BA之外執行全局優化(局部vs.完全)。(右)跟蹤精度和關鍵幀數量的關系。我們在實驗中使用了5個關鍵幀(粗體)。

DROID-SLAM: 單目、雙目、RGBD相機的深度視覺SLAM

圖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.​