1. 程式人生 > >深度學習結合SLAM 研究現狀總結 Co-Fusion MaskFusion

深度學習結合SLAM 研究現狀總結 Co-Fusion MaskFusion

深度學習結合SLAM 研究現狀總結

深度學習結合SLAM 語義slam 語義分割 端到端SLAM CNN-SLAM DenseSLAM orbslam2 + ssd LSD-SLAM + CNN SemanticFusion Mask

1. 用深度學習方法替換傳統slam中的一個/幾個模組:

            特徵提取,特徵匹配,提高特徵點穩定性,提取點線面等不同層級的特徵點。
            深度估計
            位姿估計
            重定位
            其他
    目前還不能達到超越傳統方法的效果,
    相較傳統SLAM並沒有很明顯的優勢(標註的資料集少且不全,使用視訊做訓練資料的非常少。
    SLAM中很多問題都是數學問題,深度學習並不擅長等等原因)。

2. 在傳統SLAM之上加入語義資訊

            影象語義分割
            語義地圖構建
    語義SLAM算是在擴充套件了傳統SLAM問題的研究內容,現在出現了一些將語義資訊整合到SLAM的研究,
    比如說用SLAM系統中得到的影象之間的幾何一致性促進影象語義分割,
    也可以用語義分割/建圖的結果促進SLAM的定位/閉環等,前者已經有了一些研究,
    不過還是集中於室內場景,後者貌似還沒有什麼相關研究。
    如果SLAM和語義分割能夠相互促進相輔相成,應該能達到好的效果。
    另:使用SLAM幫助構建大規模的影象之間有對應關係的資料集,
    可以降低深度學習資料集的標註難度吧,應該也是一個SLAM助力深度學習的思路。

3. 端到端SLAM

    其實端到端就不能算是SLAM問題了吧,SLAM是同步定位與地圖構建,端到端是輸入image輸出action,沒有定位和建圖。 
    - 機器人自主導航(深度強化學習)等

1. 用深度學習方法替換傳統slam中的一個/幾個模組:

A. CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction

論文

基於CNN的單張圖深度估計,語義SLAM,半稠密的直接法SLAM.
將LSD-SLAM裡的深度估計和影象匹配都替換成基於CNN的方法,取得了更為robust的結果,並可以融合語義資訊.

鑑於卷積神經網路(CNN)深度預測的最新進展,
本文研究了深度神經網路的預測深度圖,可以部署用於精確和密集的單目重建。
我們提出了一種方法,其中CNN預測的稠密深度圖與通過直接單目SLAM獲得的深度測量自然地融合在一起。
我們的融合方案在影象定位中優於單目SLAM方法,例如沿低紋理區域,反之亦然。
我們展示了使用深度預測來估計重建的絕對尺度,從而克服了單眼SLAM的主要侷限性之一。
最後,我們提出一個框架,從單個幀獲得的語義標籤有效地融合了密集的SLAM,從單個檢視產生語義相干的場景重構。
兩個基準資料集的評估結果顯示了我們的方法的魯棒性和準確性。

B. DenseSLAM 使用CNN+DeCNN+RNN

它接受當前RGB影象 It,以及來自遷移級的隱藏狀態 h(t-1),通過LSTM單元進行內部轉移。
網路的輸出是稠密地圖 Zt, 以及相機的姿態 Rt, Tt.

網路結構:

網路結構的另一個引數是時間視窗的大小N=10.

2. Vision Semantic SLAM 視覺分割SLAM 語義SLAM

    SLAM的另一個大方向就是和深度學習技術結合。
    到目前為止,SLAM的方案都處於特徵點或者畫素的層級。
    關於這些特徵點或畫素到底來自於什麼東西,我們一無所知。
    這使得計算機視覺中的SLAM與我們人類的做法不怎麼相似,
    至少我們自己從來看不到特徵點,也不會去根據特徵點判斷自身的運動方向。
    我們看到的是一個個物體,通過左右眼判斷它們的遠近,
    然後基於它們在影象當中的運動推測相機的移動。

    很久之前,研究者就試圖將物體資訊結合到SLAM中。
    例如文獻[135-138]中就曾把物體識別與視覺SLAM結合起來,構建帶物體標籤的地圖。
    另一方面,把標籤資訊引入到BA或優化端的目標函式和約束中,
    我們可以結合特徵點的位置與標籤資訊進行優化。
    這些工作都可以稱為語義SLAM。

    語義和SLAM看似是兩個獨立的模組,實則不然。
    在很多應用中,二者相輔相成。
    一方面,語義資訊可以幫助SLAM提高建圖和定位的精度,特別是對於複雜的動態場景。
    傳統SLAM的建圖和定位多是基於畫素級別的幾何匹配。
    藉助語義資訊,我們可以將資料關聯從傳統的畫素級別升級到物體級別,提升複雜場景下的精度。
    
    另一方面,藉助SLAM技術計算出物體之間的位置約束,
    可以對同一物體在不同角度,
    不同時刻的識別結果進行一致性約束,從而提高語義理解的精度。

    綜合來說,SLAM和語義的結合點主要有兩個方面:

    1、 語義幫助SLAM。
      傳統的物體識別、分割演算法往往只考慮一幅圖,
      而在SLAM中我們擁有一臺移動的相機。
      如果我們把運動過程中的圖片都帶上物體標籤,就能得到一個帶有標籤的地圖。
      另外,物體資訊亦可為迴環檢測、BA優化帶來更多的條件。
      
    2、 SLAM幫助語義。
      物體識別和分割都需要大量的訓練資料。
      要讓分類器識別各個角度的物體,需要從不同視角採集該物體的資料,然後進行人工標定,非常辛苦。
      而SLAM中,由於我們可以估計相機的運動,可以自動地計算物體在影象中的位置,節省人工標定的成本。
      如果有自動生成的帶高質量標註的樣本資料,能夠很大程度上加速分類器的訓練過程。

    在深度學習廣泛應用之前,我們只能利用支援向量機、條件隨機場等傳統工具對物體或場景進行分割和識別
    或者直接將觀測資料與資料庫中的樣本進行比較[108,140],嘗試構建語義地圖[138,141-143]。
    由於這些工具本身在分類正確率上存在限制,所以效果也往往不盡如人意。
    隨著深度學習的發展,我們開始使用網路,越來越準確地對影象進行識別、檢測和分割[144-149]。
    這為構建準確的語義地圖打下了更好的基礎[150]。我們正看到,逐漸開始有學者將神經網路方法引入到SLAM中的物體識別和分割,
    甚至SLAM本身的位姿估計與迴環檢測中[151-153]。
    雖然這些方法目前還沒有成為主流,但將SLAM與深度學習結合來處理影象,亦是一個很有前景的研究方向。

    語義slam應用:

    首先,目前理解的語義的定義的先明確下:
      1)影象的標註,即特定目標的識別定位與三維重建,
         並將定位資訊與識別標籤與SLAM的位置資訊結合,
         實現基於SLAM的三維空間的場景物體打標與模型構建,即影象的內容結構化;
      2)標註影象與場景其他物體之間的關係,即所說的場景理解,
         將整個場景的影象內容以故事描述的方式串聯起來,
         構成完成的影象場景資訊,及影象內容的語義化。
    第二部分基本屬於純粹的語法語義理解的範疇,脫離影象資訊的研究內容,目前工作涉及不多,
    
    暫就第一部分及受邀內容涉及的結合點簡單講述下:

      1)SLAM對應的是3維點雲資訊;

      2)影象語義資訊的低層級資訊,即為特定物件的目標識別定位;

      3)特定物件的分割、識別定位資訊與3DSLAM點雲資訊的結合,實現3D模型跟蹤與重建;

      4)將3D目標物件插入到SLAM得到的空間位置序列中。

A. orbslam2 + ssd物體檢測實現3d物體分割

場景對映 semantic Mapping :  SLAM定位和建圖
目標檢測和場景分割 bject Detection and Semantic Segmentation : RCNN\YOLO\SSD


    基本框架圖如下: 
            輸入RGB-D影象 -> ORB-SLAM2應用於每一幀->
            SSD(Single Shot MultiBox Detector)用於每一個關鍵幀進行目標檢測,3D無監督分割方法對於每一個檢測結果生成一個3D點雲分割 ->
            使用類似ICP的匹配值方法進行資料關聯,以決定是否在地圖中建立新的物件或者跟已有物件建立檢測上的關聯 -> 
            地圖物件的3D模型(3D點雲分割,指向ORB-SLAM2中位姿圖的指標,對每個類別的累計置信度)
   

    利用現在檢測速度很快的SSD,以及基本上可以達到實時定位的ORB-SLAM2相互促進。
    然後通過把深度圖進行劃分,物體檢測,最終輸出帶有語義資訊的語義地圖。
    個人覺得,本文的難點在資料的融合,也就是流程圖的第三部分,兩者之間怎麼去相互配合。

    其次本文作者比較謙虛的承認:
    為什麼沒有取名為語義SLAM,是因為該工作只是用SLAM促進分割,並沒有用語義分割去促進定位。
    實際上兩者應該是相輔相成的,只不過貌似後者還沒有人做罷了。

    本文在實時性和計算量應該算是比較合理的,一般GPU應該能跑起來;缺點是地圖可讀性比較差。
    
    由於需要非常精確的影象分割,所以本文利用Depth圖來幫助分割。
    所以需要對Depth進行分割的演算法,本文采用了文章@[email protected]等人的演算法。
    也是涉及到基於圖的分割的過程。
    
    資料關聯 Data Association
      當完成了把3D Point投影到識別的物體後,資料關聯要做的事:
      判斷檢測到的物體是否已經在已經構建的地圖中存在了呢,
      如果不存在的話,就需要新增這個物體。
      
    通過一個二階的流程來實現:
      對於每一個檢測到的Object,根據點雲的歐式距離,來選擇一系列的Landmarks(已經檢測到並在地圖裡面已經有的Object)
      對Object和Point Cloud of landmark進行最近鄰搜尋,使用了k-d tree來提高效率,
      其實這一步也就是判斷當前影象檢測到的Object與已有的地圖中的Landmark(Object)是否相匹配。
      
      在第二步中,如果多餘50 % 的Points的都距離小於2cm的話,就說明這個檢測到的Object已經存在了。
      這個也就是把CNN的分割結果與地圖中的Object進行關聯起來,並用顏色表示Map中Object的類別。
    
      在上一篇SematicFusion中,採用的Recursive Bayesian 的更新規則來完成地圖更新的!
      看來,這個是CNN與傳統的SLAM框架結合的時候的一個需要解決的問題,
      那就是如何把新來的物體與已有的地圖中的物體相互關聯起來,並更新!

B. 單目 LSD-SLAM + CNN卷積網路物體分割

    基本框架圖如下: 
    輸入RGB影象->選擇關鍵幀並refine->2D語義分割->3D重建,語義優化 

    東南大學的一個同學做的,算是參考文獻就6頁的神文,CVPR2016最佳論文之一。

論文

    大致思路:
            利用LSD-SLAM作為框架,結合CNN進行有機融合,
            選擇關鍵幀進行做深度學習實現語義分割,之後選擇相鄰的幾幀做增強。

C. 資料聯合RNN語義分割+ KinectFusion跟蹤(rgbdslam) =3d Semantic Scene

  看得出來,RNN在幫助建立相鄰幀之間的一致性方面具有很大的優勢。

  本文利用可以實現Data Associate的RNN產生Semantic Label。然後作用於KinectFusion,來插入語義資訊。

  所以本文利用了RNN與KinectFusion來實現語義地圖的構建!

論文

高層特徵具備更好的區分性 , 同時幫助機器人更好完成資料關聯 . DARNN [66] 引入資料聯合
(Data association, DA) 下的 RNN (Recurrent neural network), 
同時對 RGBD 影象進行語義標註和場景重建 . 
將 RGB 影象 和 深度影象 分別輸入全卷積網路 , 在反捲積層加入 資料聯合 RNN 層 , 
將不同幀影象的特徵進行融合 , 同時能夠融合 RGBD 影象和深度影象 . 
該文章使用 KinectFusion [67] 完成相機的跟蹤 , 估計當前相機的 6DOF 位姿 , 
將 3D 場景表示為 3D 體素 , 保存於 TSDF (Truncated signed distance function).

本文利用可以實現Data Associate的RNN產生Semantic Label。然後作用於KinectFusion,來插入語義資訊。
所以本文利用了RNN與KinectFusion來實現語義地圖的構建!

本文采用了DA-RNN與KinectFusion合作的方式來產生最終的Semantic Mapping,
而文章採用的則是ORB-SLAM與CNN結合,他們有一些共同的結構,如Data Associate,雖然我現在還不明白這個DA具體得怎麼實現!?

D. SLAM++

語義地圖表示為一個圖網路 , 其中節點有兩種 : 
  1) 相機在世界座標系的位姿 ; 
  2) 物體在世界座標系的位姿 . 
物體在相機座標系的位姿作為網路中的一個約束 , 連線相機節點和物體節點 . 
另外網路中還加入了平面結構等約束提高定位的精度 .

E. MO-SLAM (Multi object SLAM)

對於場景中重複出現的物體進行檢測 , 該方法不需要離線訓練以及預製物體資料庫 . 
系統將重建的路標點分類 , 標記該點所屬的物體類別 . 
一個物體表示為一個路標點集合 , 相同的物體的不同例項的路標點之間存在如下關係:
P2 = E * P1
系統對於生成的關鍵幀建立 ORB 描述子的單詞樹 , 在新的關鍵幀和候選關鍵幀之間進行漢明距離匹配 . 
如果匹配點的數量不夠 , 那麼識別執行緒停止處理當前幀 , 等待下一個關鍵幀 . 
使用 RANSAC (Random sample consensus, 隨機取樣序列一致性) 框架初始化一個位姿變換 ,

F. SemanticFusion: 卷積-反捲積語義分割cnn(基於caffe) + ElasticFusion(稠密SLAM) + CRF融合

主要框架,用到了ElasticFusion和CNN來產生稠密的Semantic Mapping.

偏重怎樣結合CNN搭建一套稠密語義SLAM的系統。SemanticFusion架構上主要分為三部分:

1) 前面提到過的ElasticFusion這種稠密SLAM來計算位姿並建出稠密地圖;
     稠密SLAM重建目前也相對比較成熟,
     從最開始的KinectFusion(TSDF資料結構 + ICP),
     到後來的InfiniTAM(用雜湊表來索引很稀疏的voxel), 
     ElasticFusion(用surfel點表示模型並用非剛性的圖結構),
     DynamicFusion(引入了體翹曲場這樣深度資料通過體翹曲場的變換後,
         才能融入到TSDF資料結構中,完成有非剛性物體的動態場景重建)都做的比較成熟。
     工業界實現非常好的是微軟的HoloLens,在臺積電的24核DSP上把mesh simplification這些操作都搞了上去。

2) CNN用RGB或RGBD圖來生成一個概率圖,每個畫素都對應著識別出來的物體類別;

3)通過貝葉斯更新(CRF,條件隨機場)來把識別的結果和SLAM生成的關聯資訊整合進統一的稠密語義地圖中。

本文的演算法,利用SLAM來實現2D Frame與3D Map之間的匹配(Corresponding)。
通過這種方式,可以實現把CNN的語義預測以概率的方式融合到Dense semantically annotated map.

為什麼選擇ElasticFusion呢,是因為這種演算法是surfel-based surface representation,可以支援每一幀的語義融合。

比較重要的一點是,通過實驗說明,引入SLAM甚至可以提高單幀影象的語義分割效果。
尤其在存在wide viewpoint variation,可以幫助解決單目2D Semantic中的一些Ambiguations.

之前存在方法使用Dense CRF來獲得語義地圖。

本文的主要不同是:利用CNN來產生語義分割,然後是線上以 Incremental 的方式生成Semantic Map。即新來一幀就生成一幀的語義地圖。

G. Pop-up SLAM: Semantic Monocular Plane SLAM for Low-texture Environments

論文

程式碼

概述

好像用LSD SLAM的雙目影象 得到深度資訊 然後直接構建三維環境(反正是低紋理地區 很好建)

在低紋理條件下(這裡可能已經是3D圖了?)提取邊界線,然後選擇地線(這個例子裡面分割出地面和門 ) ,
然後構建三維建模 感覺只適用於室內的沒什麼雜物的環境內,規格化場景可以使用。

H. ros_object_analytics 單幀點雲(pcl模型平面分割+歐氏距離聚類物體分割) + Yolo_v2(GPU) / MobileNet_SSD(VPU NCS加速棒) 物體檢測

程式碼

使用pcl演算法提供的點雲 多平面模型分割 和 多目標歐氏距離聚類分割演算法 對單幀 RGBD相機捕獲的點雲 進行分割, 得到3d分割
使用 Yolo_v2(GPU) / MobileNet_SSD(VPU NCS加速棒) 物體檢測演算法對 RGB影象進行物體檢測, 得到2d檢測框
兩者根據位置資訊進行融合,得到物體的 3d標註框

I. Co-Fusion CRF影象分割 + ElasticFusion(RGBD-SLAM)

程式碼

J. MaskFusion ElasticFusion(RGBD-SLAM) + 語義分割mask-rcnn

本文提出的MaskFusion演算法可以解決這兩個問題,首先,可以從Object-level理解環境,
在準確分割運動目標的同時,可以識別、檢測、跟蹤以及重建目標。

分割演算法由兩部分組成:
 1. 2d語義分割: Mask RCNN:提供多達80類的目標識別等
 2. 利用Depth以及Surface Normal等資訊向Mask RCNN提供更精確的目標邊緣分割。
 
上述演算法的結果輸入到本文的Dynamic SLAM框架中。
   使用Instance-aware semantic segmentation比使用pixel-level semantic segmentation更好。
   目標Mask更精確,並且可以把不同的object instance分配到同一object category。
 
本文的作者又提到了現在SLAM所面臨的另一個大問題:Dynamic的問題。
作者提到,本文提出的演算法在兩個方面具有優勢:
    相比於這些演算法,本文的演算法可以解決Dynamic Scene的問題。
    本文提出的演算法具有Object-level Semantic的能力。
    
    
所以總的來說,作者就是與那些Semantic Mapping的方法比Dynamic Scene的處理能力,
與那些Dynamic Scene SLAM的方法比Semantic能力,在或者就是比速度。
確實,前面的作者都只關注Static Scene, 現在看來,
實際的SLAM中還需要解決Dynamic Scene(Moving Objects存在)的問題。}

每新來一幀資料,整個演算法包括以下幾個流程:

1. 跟蹤 Tracking
    通過 分割獲取 獨立的 模型物件
   每一個Object的6 DoF通過最小化一個能量函式來確定,這個能量函式由兩部分組成:
      a. 幾何的ICP Error;  3d-3d匹配點對誤差
      b. Photometric cost。2d-2d 畫素點 直接法 匹配誤差
   此外,作者僅對那些Non-static Model進行Track。
   僅僅對運動的模型進行跟蹤,怎麼 判斷 模型 是否運動 ???
   光流?? 跟蹤??
   最後,作者比較了兩種確定Object是否運動的方法:
      a. Based on Motioin Incosistency
      b. Treating objects which are being touched by a person as dynamic
      
3. 分割 Segmentation
   使用了Mask RCNN和一個基於Depth Discontinuities and surface normals 的分割演算法。
   前者有兩個缺點:物體邊界不精確、執行不實時。
   後者可以彌補這兩個缺點, 但可能會Oversegment objects。
   
4. 融合 Fusion
   就是把Object的幾何結構與labels結合起來。

K. DeLS-3D 全深度卷積 語言SLAM CNN+RNN 預測相機位姿態 + CNN+DECNN(卷積+反捲積)2d語義分割

DeLS-3D: Deep Localization and Segmentation with a 2D Semantic

在Localization中,傳統的做法是基於特徵匹配來做,但這樣的壞處是,如果紋理資訊較少,那麼系統就不穩定,會出錯。
一種改進辦法是利用深度神經網路提取特徵。實際道路中包含大量的相似場景以及重複結構,所以前者實用性較差。

相機的姿態資訊可以幫助3D語義地圖與2D標籤地圖之間的畫素對應。反過來,場景語義又會幫助姿態估計。 

總的工作流程:

從圖中可以看出,RGB Images 以及 根據GPS/IMU獲得的semantic label map被輸入到Pose CNN,
然後輸出的Pose資訊輸入到 Pose RNN來對Pose進一步提高,這裡用RNN來獲得前後幀的一致性!
然後在利用新得到的Pose來獲取更精確的Semantic Label Map,
最後,這個label Map以及RGB影象輸入到Segment CNN來進一步提高語義地圖的精度。
這裡標籤地圖被用於提高語義地圖的空間精度以及時間一致性。

網路的訓練是基於非常精確地相機姿態以及語義分割,所以可以採用監督學習。

Pose Network包含一個Pose CNN以及一個Pose GRU-RNN。
其中Pose CNN的輸入是RGB影象I以及一個標籤地圖L。
輸出是一個7維的向量,表示輸入影象I與輸入標籤地圖L之間的位姿關係,從而得到一個在3D Map中更精確的姿態.

分割網路結構:

首先基於RGB影象對該網路訓練,然後加入標籤地圖資料進行微調(Fine Tune).
需要注意的是,當標籤地圖加入框架時,需要經過編碼,即每一個畫素經One-hot操作得到一個32維的Feature Representation。
然後得到的32維特徵加入到RGB影象的第一層卷積輸出中,且該層的Kernel數也是32個,從而平衡了兩種資料的通道數(Channel Number)。

3. 端到端SLAM 結合深度增強學習 DRL

A. 使用DRL深度加強學習實現機器人自主導航

深度強化學習中有兩個較少被提及的問題:
  1. 對於新的目標泛化能力不足,
  2. 資料低效,比如說,模型需要幾個(通常開銷較大)試驗和誤差集合,使得其應用於真實世界場景時並不實用。 
在這篇文章中,解決了這兩個問題,並將我們的模型應用於目標驅動的視覺導航中。
為了解決第一個問題,我們提出了一個actor-critic演員評論家模型,它的策略是目標函式以及當前狀態,能夠更好地泛化。
為了解決第二個問題,我們提出了 AI2-THOR框架,它提供了一個有高質量的3D場景和物理引擎的環境。
我們的框架使得agent智慧體能夠採取行動並和物件之間進行互動。因此,我們可以高效地收集大量訓練樣本。
我們提出的方法 
  1)比state-of-the-art的深度強化學習方法收斂地更快,
  2)可以跨目標跨場景泛化,
  3)通過少許微調就可以泛化到真實機器人場景中(儘管模型是在模擬中訓練的)
  4)不需要特徵工程,幀間的特徵匹配和對於環境的特徵重建,是可以端到端訓練的。

B. 用於視覺導航的感知建圖和規劃

部落格筆記

  我們提出了一個用於在陌生環境中導航的神經網路結構。
  我們提出的這個結構以第一視角進行建圖,並面向環境中的目標進行路徑規劃。
  The Cognitive Mapper and Planner (CMP)主要依託於兩個觀點:
    1.一個用於建圖和規劃的統一的聯合架構中,建圖由規劃的需求所驅動的。
    2. 引入空間記憶,使得能夠在一個並不完整的觀察集合的基礎之上進行規劃。
  CMP構建了一個自上而下的belief map置信地圖,
  並且應用了一個可微的神經網路規劃器,在每一個時間步驟中決策下一步的行動。
  對環境積累的置信度使得可以追蹤已被觀察到的區域。
  我們的實驗表明CMP的效能優於reactive strategies反應性策略 和standard memory-based architectures 
  標準的基於記憶的體系結構 兩種方法,
  並且在陌生環境中表現良好。另外,CMP也可以完成特定的語義目標,
  比如說“go to a chair”到椅子那兒去。 

C. DeepVO:基於深度迴圈卷積神經網路的端到端視覺里程計 CNN+RNN

本文使用深度遞迴卷積神經網路(RCNNs),提出了一種新穎的端到端單目VO的框架。
由於它是以端到端的方式進行訓練和配置的,
因此它可以直接從一系列原始的RGB影象(視訊)中計算得到姿態,而無需採用任何傳統VO框架中的模組。

基於RCNN,一方面它可以通過卷積神經網路(Convolutional Neural Network)自動學習VO問題的有效特徵表示,
另一方面可以通過遞迴神經網路(Recurrent Neural Network)對時序模型(運動模型)、資料關聯模型(影象序列)進行隱式建模。