當前深度學習和slam結合有哪些比較好的論文,有沒有一些開源的代碼?
如題!
深度學習在SLAM上目前有不少文章了,簡單列一下最近的工作:
CNN-SLAM[1]為今年CVPR的文章,是比較完整的pipeline,將LSD-SLAM里的深度估計和圖像匹配都替換成基於CNN的方法,取得了更為robust的結果,並可以融合語義信息。見http://campar.in.tum.de/Chair/ProjectCNNSLAM。類似的工作還有[2]。
VINet[3]是今年AAAI的文章,利用CNN和RNN構建了一個VIO,即輸入image和IMU信息,直接輸出估計的pose。
[4]是Magic Leap放出來的文章,說是Deep SLAM,其實只是用CNN做了SLAM中提取特徵點和匹配特徵點的兩個模塊,在CPU上實時。
[5]是Google 今年CVPR的oral文章,利用CNN學習一個無監督的深度估計和pose估計網路,代碼見tinghuiz/SfMLearner。SfM-Net[6]利用監督學習也幹了類似的工作。
其他包括重定位[7][8]、語義地圖[9]、迴環檢測等也有一些工作,這裡不贅述。
這些工作大部分都是針對單目來做的,因為單目尺度未知,正好需要CNN進行腦補。個人覺得,基於CNN的方法由於局限於訓練數據,目前除了迴環和語義以外,其它方面在數據集或者受限場景以外尚未達到可用的效果。歡迎交流。
參考文獻:
[1] Tateno K, Tombari F, Laina I, et al. CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction[J]. arXiv preprint arXiv:1704.03489, 2017.
[2] Li R, Wang S, Long Z, et al. UnDeepVO: Monocular Visual Odometry through Unsupervised Deep Learning[J]. arXiv preprint arXiv:1709.06841, 2017.
[3] Clark R, Wang S, Wen H, et al. VINet: Visual-Inertial Odometry as a Sequence-to-Sequence Learning Problem[C]//AAAI. 2017: 3995-4001.
[4] DeTone D, Malisiewicz T, Rabinovich A. Toward Geometric Deep SLAM[J]. arXiv preprint arXiv:1707.07410, 2017.
[5] Zhou T, Brown M, Snavely N, et al. Unsupervised learning of depth and ego-motion from video[J]. arXiv preprint arXiv:1704.07813, 2017.
[6] Vijayanarasimhan S, Ricco S, Schmid C, et al. SfM-Net: Learning of Structure and Motion from Video[J]. arXiv preprint arXiv:1704.07804, 2017.
[7] Wu J, Ma L, Hu X. Delving deeper into convolutional neural networks for camera relocalization[C]//Robotics and Automation (ICRA), 2017 IEEE International Conference on. IEEE, 2017: 5644-5651.
[8] Kendall A, Grimes M, Cipolla R. Posenet: A convolutional network for real-time 6-dof camera relocalization[C]//Proceedings of the IEEE international conference on computer vision. 2015: 2938-2946.
[9] Li X, Belaroussi R. Semi-Dense 3D Semantic Mapping from Monocular SLAM[J]. arXiv preprint arXiv:1611.04144, 2016.
補充一下其他答案。目前有不少嘗試,但還沒有足夠驚艷和實用的成果。
- 後端:傳統SLAM的factor graph後端優化工具(例如GTSAM)已經非常高效準確,可以在嵌入式CPU裡面實現實時運算。作為一個純粹的幾何優化問題,似乎沒有太大必要用CNN硬解(也的確沒有看到這方面的工作)。
- 前端:在傳統基於特徵點的方法上,結合圖像分割和語義信息可能是比較有意義的一個方向,包括幫助篩選更穩定的特徵點。而基於單目攝像頭用CNN進行深度預測的SLAM pipeline(例如[1])有很多問題,主要在於準確度非常低。我們做過benchmark,基於單幀彩色照片進行距離信息預測,在室內每個像素的平均誤差約50cm,在室外平均誤差則高達7米以上。順便打個廣告:我們剛投ICRA的文章結合少量的距離信息和彩色信息進行距離圖像預測[2],效果比單純用彩色照片準確得多且魯棒性強。這個方法可以幫助傳統SLAM從稀疏點雲快速生成密集的點雲,也可以用在激光雷達的超解析度上。代碼已開源 https://github.com/fangchangma/sparse-to-dense, 視頻請翻牆 https://youtu.be/vNIIT_M7x7Y。
- 閉環檢測:有一些基於CNN的工作[3],但效果似乎還沒有能達到傳統方法(例如ORB-SLAM里的閉環檢測)的水平。
哪怕在傳統基於特徵點的SLAM已經能做到非常穩定高效的這個情況下,適合結合deep learning的科研方向還是有很多的。這其中包括
- 提高特徵點穩定性(減少outlier)和自動提取不同層級的特徵點(點、線、面、物體),
- 快速生成密集的地圖(而非稀疏的三維點雲)
- 結合語義信息和圖像分割
- 生成動態地圖(可以實時更新、表達動態物體)
- 降低SLAM調參的難度
[1] CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction
[2] Sparse-to-Dense: Depth Prediction from Sparse Depth Samples and a Single Image
[3] Self-Supervised Visual Place Recognition Learning in Mobile Robots
自己做有點關係的research,願意拋磚引玉,肯定答得不全面,還望各位大神們輕拍
傳統的SLAM pipeline可以粗略的分為兩部分(不準確,而且不是所有的SLAM演算法都可以這麼區分):前端和後端,前端主要是負責原始感測器數據的處理,提取原始感測器數據(激光掃描、圖像)中的一些抽象幾何特徵(主要是點,還有線、面);後端主要是對前端提取好的抽象幾何特徵進行優化,求解空間中的幾何關係,常用的方法主要是Bundle Adjustment。再次說這樣劃分只是大部分演算法的粗略劃分,大佬們請不要細究~
將Deep learning應用到SLAM中也可以分為以上兩種思路,應用Deep learning做感測器數據處理工作(前端),或者利用deep learning求解幾何關係(後端)。我們後面的討論只針對Visual SLAM,也就是圖像作為輸入的視覺SLAM的相關工作。
1、用Deep learning處理感測器數據(前端)
因為deep learning可以非常有效提出圖像中的feature,這一點在object recognition的應用中已經得到了充分的驗證。所以將deep learning應用在SLAM中最直接的方法就是用deep learning提取的feature替代傳統方法提取的descriptor,例如SIFT。
傳統feature例如SIFT在SLAM中主要有兩類應用,第一類是用於frame與frame間的matching,用來生成point correspondence和三維空間中點的對應;第二類是用於空間中的定位(localization,SLAM界根據不同應用場景也稱為重定位re-localization或閉環loop-closure)。使用deep learning提取descriptor用於feature matching的工作包括 stereo的應用Stereo Matching by Training a Convolutional Neural Network to Compare Image Patches,Efficient Deep Learning for Stereo Matching,optical flow的應用Accurate Optical Flow via Direct Cost Volume Processing。這些工作大多應用了siamese network的網路結構。
paper Stereo Matching 用deep learning的feature去求解stereo深度問題
paper Accurate Optical Flow 使用deep learning的feature去求解光流問題
使用deep learning替代到傳統的descriptor(例如SIFT)+vocabulary tree的定位與重定位的工作也有一些,個人讀過很有意思的一篇Revisiting IM2GPS in the Deep Learning Era,是講用 deep learning feature做全世界範圍內的定位,也就是一張照片就可以判斷在世界上的拍攝位置。工作雖然比較初步離實用還有些距離,但是思路很有意思,在定位方面deep learning已經全面超過了傳統方法。
paper IM2GPS 使用神經網路實現單張圖片世界範圍內的定位
2、利用deep learning學習幾何信息(後段)
deep learning在處理幾何信息上並不是強項,因為幾何信息都具有close-form的數學表達式,可以直接求解,deep learning的方法往往並不具備優勢。所以這方面的研究相對少一些。但是並不是完全沒有工作可做,比如單張圖像求解深度(幾何信息不全)這樣的問題還是有用deep learning的意義的。這方面的paper包括今年ICRA地平線的Parse Geometry from a Line: Monocular Depth Estimation with Partial Laser Observation,去年ECCV的Unsupervised CNN for Single View Depth Estimation: Geometry to the Rescue,今年CVPR的Unsupervised Learning of Depth and Ego-Motion from Video。這篇 paper完整的用神經網路實現了整套Visual odometry(VO)的pipeline,沒有使用任何傳統基於幾何關係的優化求解器。
我個人非常喜歡後兩篇paper,因為它代表了一種思路:兩篇paper都是unsupervised(個人認為稱為self-supervised更合適)的深度圖像學習方法,也就是沒有LIDAR的深度數據輸入,而是從三維幾何consistency中自行學習深度。喜歡這類方法的理由是它們完全利用了空間中的幾何信息來訓練神經網路,比起純supervised的方法更有效的利用了數據。
paper Unsupervised Learning of Depth and Ego-Motion from Video 僅僅使用一段單目的video就實現了訓練兩個神經網路,分別用來預測VO與單目深度,沒有使用任何其他感測器數據來訓練神經網路。
3、前後端以外的東西
除了狹義SLAM所包括的的前後端的東西,deep learning還可以用在廣義SLAM上的某些應用,比喻語義SLAM(semantic SLAM)上,用於識別segmentation上。二維圖像的semantic segmentation使用Deep learning的工作很多,但相比於二維圖像的semantic segmentation,三維semantic SLAM要更多的考慮三維空間中已有的幾何限制。最近看到的是Multi-View Deep Learning for Consistent Semantic Mapping with RGB-D Cameras,這篇工作考慮到了多視角間的幾何限制,使用image warping的方法改善semantic segmentation的預測。這一塊的工作不是很熟,就不班門弄斧了。
paper Multi-View Deep Learning for Consistent Semantic Mapping 使用了多視角幾何限制來改進語義分割的結果
總的來說,對於在SLAM中的應用,deep learning更擅長沒有close-form數學表達式的feature部分,以及語義等更high level的任務。對於幾何部分,相比於直接求解,Deep learning並不擅長直接求解幾何問題,所以一味的使用deep learning去替代已有的幾何求解器並不是一個很好的思路。但是使用空間中已有的幾何限制於知識去supervise神經網路的訓練我個人認為是一個很有意思,也是很實用的幾何與神經網路的結合。
一句話就是,術業有專攻,deep learning並不應該試圖去取代已有全部的SLAM技術,而是應該在其擅長的領域幫助改進SLAM技術,而推動SLAM技術的發展。答得肯定不全面,大佬們輕拍~
簡單介紹幾個比較有代表性的工作, 分為以下幾類:
I. 相機重定位(Relocalization):
Deep Learning和SLAM結合的開山之作 ,劍橋的論文:PoseNet 。該方法使用 GoogleNet 做了 6自由度相機pose 的regression。訓練數據是帶有ground truth pose的場景幀。
圖1. PoseNet,第一行是原圖,第二行是根據所估計的相機姿態做3D重建後的場景圖,第三 行是原圖和重建後的場景的重疊。
論文:Alex Kendall, Matthew Grimes, Roberto Cipolla, " PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization", in ICCV 2015, https://arxiv.org/abs/1505.07427
代碼: alexgkendall/caffe-posenet
II. 特徵點提取與匹配:
(1). 幀幀之間的匹配是傳統特徵法SLAM的重要環節。這裡首先推薦一下EPFL的文章LIFT (Learned Invariant Feature Transform ),通過深度神經網路學習圖像中的特徵點。pipeline如圖2,LIFT分別計算了Detector, Orientation Estimator 以及 Descriptor 。
圖2. LIFT pipeline
和SIFT特徵相比,LIFT能夠提取出更稠密的特徵點,如圖3所示。
圖3. SIFT(左)和 LIFT(右)提取出來的特徵點對比
論文:Kwang Moo Yi, Eduard Trulls, Vincent Lepetit, Pascal Fua, " LIFT: Learned Invariant Feature Transform", in ECCV 2016, https://arxiv.org/abs/1603.09114
代碼:cvlab-epfl/LIFT
(2). Magic leap 的文章:Toward Geometric Deep SLAM ,介紹了一種非常出色的特徵點(角點)提取和匹配的方法,如圖4所示:
圖4. Deep Point-Based Tracking
來看看這牛逼閃閃的效果,提出來的點不多不少,準確的定位到了物體的每個角點,簡直是強迫症的福音!
圖5. 特徵點的提取效果
論文中還和FAST,Harris等經典特徵提取法做了比較,本文的方法對於雜訊比較robust,提取的特徵點看著也比FAST,Harris舒服,有興趣的可以細讀文章。我相信本文的方法在今後的特徵法SLAM系統中定能大放光彩。
論文:Daniel DeTone, Tomasz Malisiewicz, Andrew Rabinovich, 「Toward Geometric Deep SLAM 」, https://arxiv.org/abs/1707.07410
代碼:還沒有
III. 端對端視覺里程計:
1. 今年CVPR的 SfM-Learner。文章的核心思想是利用photometric consistency原理來估計每一幀的depth和pose。photometric consistency就是對於同一個物體的點,在不同兩幀圖像上投影點,圖像灰度應該是一樣的。論文方法的大體過程請看圖6。
圖6. SfM-Learner的訓練和測試大體過程
各位回憶一下直接法SLAM的經典:LSD-SLAM (LSD-SLAM: Large-Scale Direct Monocular SLAM),有沒有感覺這篇文章的核心思路和LSD-SLAM如出一轍?本質都是優化photometric error。 來看看SfM-Learner的Loss(最終的Loss在此基礎上做了優化),
再看看LSD-SLAM裡面,需要優化的photometric error 函數 (原文的photometric error做了normalization):
有沒有很像?
論文:Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe, "Unsupervised Learning of Depth and Ego-Motion from Video", in CVPR 2017, https://arxiv.org/abs/1704.07813
代碼:tinghuiz/SfMLearner
2. 今年的新文章:SfM-Net。聽名字就和SfM-Learner很像,這篇文章和SfM-Learner都是出自Google。論文的核心思想也是利用photometric constancy來計算pose,depth。除此之外,作者還計算了光流,scene flow,3D point cloud等。可以說是SfM-Learner的升級版。
圖7. SfM-Net 網路結構
論文:Sudheendra Vijayanarasimhan, Susanna Ricco, Cordelia Schmid, Rahul Sukthankar, Katerina Fragkiadaki, 「SfM-Net: Learning of Structure and Motion from Video」, Learning of Structure and Motion from Video
代碼:還沒有
3. 另外一篇和SfM-Net,SfM-Learner比較相似的文章:DeMoN,使用pose, depth作為監督信息,來估計pose和depth。最後的效果非常不錯。網路的核心部分如圖所示
圖8. DeMoN網路核心結構
論文:Benjamin Ummenhofer, Huizhong Zhou, Jonas Uhrig, Nikolaus Mayer, Eddy Ilg, Alexey Dosovitskiy, Thomas Brox, "DeMoN: Depth and Motion Network for Learning Monocular Stereo", in CVPR 2017,https://arxiv.org/abs/1612.02401
代碼:lmb-freiburg/demon
IV. 語義 SLAM
CNN-SLAM。該文章使用直接法估計相機姿態,使用CNN來估計Depth,以及做圖像語義分割。然後將Geometry和semantic融合起來,生成具有語義信息的map。
圖9. CNN-SLAM pipeline
論文:Keisuke Tateno, Federico Tombari, Iro Laina, Nassir Navab, "CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction", in CVPR 2017, https://arxiv.org/abs/1704.03489
代碼:還沒有
總結一下:
從目前的研究情況來看,深度學習在SLAM這個問題上還沒有完全取代傳統方法的能力。希望各位同僚繼續努力!
跳出SLAM,說點題外話,利用深度強化學習來進行端對端的機器人導航,已經有了不錯的結果。人類在環境中導航,不也是直接輸入image,輸出action嗎?有興趣的可以看看這兩篇文章:
(1) [1702.03920] Cognitive Mapping and Planning for Visual Navigation
(2) [1609.05143] Target-driven Visual Navigation in Indoor Scenes using Deep Reinforcement Learning
剛聽完learning for localization and mapping workshop IROS 2017的我安安靜靜的佔個坑
那個上面還是有乾貨的給一點不同的思路:未來可能就不需要做 SLAM 了。
如 @馬方暢 所說,SLAM 方面,傳統方法已經有了很不錯的「套路」,DL 在某些場景中效果也不賴,但似乎都沒有到可以取代傳統方法的地步。
就個人而言,我認為要想讓 DL 在這種有精度要求的任務上超過傳統方法是不容易、且不明智的。單純用 DL 套傳統方法,替換某些部分(前端、後端、閉環檢測)等,似乎不是一個好選擇。
反之,我認為 navigation 是更適合 DL 的一個場景。人在移動的時候,並不會建立精確的環境地圖,無法具體說出障礙物距離自己多少厘米。所以,我一直有一個直覺:「navigation 應該不需要精確地圖信息與定位信息」,而 DL 似乎有可能實現這一全新的方法。
當然,DL 在 navigation 方面也已經有一些研究了,例如 Feifei Li 實驗室的工作:通過 DRL 實現機器人自主導航。
Zhu Y, Mottaghi R, Kolve E, et al. Target-driven Visual Navigation in Indoor Scenes using Deep Reinforcement Learning[J]. 2016.
但是,目前所有這些工作都存在一個問題:只是訓練出一個 local planner,無法實現全局的路徑規劃。
所以,我個人認為,「用 DL 學習到全局的信息,進而引導 navigation」,會比「嘗試用 DL 建立精確的地圖,之後用這個地圖進行 navigation」更有前景。
未來,可能就沒有 SLAM + navigation 這種框架了。
謝邀。
1. 強烈推薦谷歌的SLAM開源平台 Cartographer 。2D、3D的mapping都有。
這篇文章詳細介紹了Cartographer https://opensource.googleblog.com/2016/10/introducing-cartographer.html
圖為Cartographer的demo
2. 這篇博客解釋了SLAM和Deep Learning的關係,寫得非常仔細。http://www.computervisionblog.com/2016/01/why-slam-matters-future-of-real-time.html
3. 另外,這裡是用C++寫的dense SLAM系統。步驟很詳細。
OSSDC/DynSLAM
圖為該系統的界面。
好的論文當然有很多。以下只是一些citation比較多的,附上鏈接。拋磚引玉,更多的資源相信題主也可以自己去搜索。
- Deep learning for detecting robotic grasps International Journal of Robotics Research
- Multimodal deep learning for robust RGB-D object recognition Multimodal deep learning for robust RGB-D object recognition
- Query-Oriented Multi-Document Summarization via Unsupervised Deep Learning http://www.aaai.org/ocs/index.php/AAAI/AAAI12/paper/download/5058/5322
- Modelling uncertainty in deep learning for camera relocalization http://ieeexplore.ieee.org/abstract/document/7487679/
我覺得cascade convolution neural network那種方式可能可以搞。
完全的End to end太大了,而且很難做得快。
deeplearning本質上可以解決(或嘗試)所有slam的問題,當前dl在這方面的應用有flow/stereo/feature、match/verification、odom/predict、optimize、map/memory等個個方面,如果僅從各單個功能來說,開源的代碼基本上就是caffe/tf/mxnet等的相應模型和自己特定layer/operator,這個一搜索會有很多。如果是要e2e的dl完成整個slam,也有一些嘗試代碼形式同上。如果是多個不同任務的dl模型組成的一個slam系統,這還比較少見,很多還是在原來的系統里替換了一個模塊。
推薦閱讀:
※既然機器學習可以在某專業上超越人類,那人類的這個專業技能還有用嗎?
※如何看待 2019 年 CFA 考試新增 Fintech(金融科技)等科目?
※有什麼經典的關於遊戲 AI 設計的書嗎?
※無人駕駛多久可以超越F1賽車手?
※想做機器人,有什麼好的發展方向?
TAG:人工智慧 | 深度學習DeepLearning | 同時定位和地圖構建SLAM |