最全綜述:基於傳統多視圖幾何和基於深度學習的三維重建算法

前言

 

目前,三維重建技術已在遊戲、電影、測繪、定位、導航、自動駕駛、VR/AR、工業製造以及消費品領域等方面得到了廣泛的應用。方法同樣也層出不窮,我們將這些方法依據原理分爲兩類:

 

  • 基於傳統多視圖幾何的三維重建算法

  • 基於深度學習的三維重建算法

 

總地來說,儘管目前傳統的三維重建算法依舊佔據研究的主要部分,但是越來越多的研究者開始關注於用CNN探索三維重建,或者說,兩者之間的交叉與融合。

 

有人問,在三維重建中引入深度學習方法有什麼意義?我將意義概括爲三部分:

 

  • 爲傳統重建算法性能優化提供新的思路

 

一項名爲 Code SLAM1 的工作,這項研究獲得了CVPR 2018年的best paper提名獎,研究利用神經網絡框架,並結合圖像幾何信息實現了單目相機的稠密SLAM。主要貢獻在於使用了深度學習方法從單張圖像中用神經網絡提取出若干個基函數來表示場景的深度,這些基函數表示可以極大簡化傳統幾何方法中的優化問題。顯然,深度學習方法的引入可以給傳統方法的性能提升提供新的思路,而以前,這部分工作大多由機器學習方法來做。

 

  • 將深度學習重建算法和傳統三維重建算法進行融合,優勢互補

 

業界對算法的魯棒性要求比較高,因此多傳感器、乃至多種算法的融合以提升算法魯棒性是個必然趨勢,而深度學習在一些場景中具有天然優勢,比如不可見部分的建模,傳統算法就很難憑藉“經驗”來估計物體的深度。

 

  • 模仿動物視覺,直接利用深度學習算法進行三維重建

 

動物跟人類直接基於大腦而非嚴格的幾何計算來進行物體的三維重建,那麼直接基於深度學習的方法在原理上也是可行的。特別需要注意的是,在一些研究中,有些方法直接基於單張圖像(非單目,單目指利用單個攝像頭)進行三維重建。理論上講,單張圖像已經丟失了物體的三維信息,因此在原理上即不能恢復深度信息,但是人類又能憑藉經驗大致估計物體的距離,因而也具有一定的“合理性”。

 

兩者形成了各自的理論和體系,但未來三維重建領域研究一定是傳統優化方法與深度學習的結合。目前,這方面研究仍處於起步階段,還有許多問題亟待解決。下面的綜述主要側重於深度學習方法,但也僅列出重要文獻,更詳細的綜述將會在公衆後續的文章中介紹。

 

基於傳統多視圖幾何的三維重建算法

 

傳統的三維重建算法按傳感器是否主動向物體照射光源可以分爲主動式和被動式 兩種方法。這些年,也有不少研究直接基於消費級的 RGB-D 相機進行三維重建,如基於微軟的 Kinect V1 產品,同樣取得了不錯的效果。基於傳統多視圖幾何的三維重建算法概括如下:

 

1 主動式

 

指通過傳感器主動地向物體照射信號,然後依靠解析返回的信號來獲得物體的三維信息,常見的有:

 

  • 1.1 結構光

 

結構光法依靠投影儀將編碼的結構光投射到被拍攝物體上,然後由攝像頭進行拍攝。由於被拍攝物體上的不同部分相對於相機的距離精度和方向不同,結構光編碼的圖案的大小和形狀也會發生改變。這種變化可以被攝像頭捕獲,然後通過運算單元將其換算成深度信息,進而獲取物體的三維輪廓信息。這種方法缺點是容易受環境光干擾,因此室外體驗差。另外,隨檢測距離增加,其精度也會變差。目前,一些研究通過增大功率、改變編碼方式等形式解決這些問題,取得了一定的效果。

 

  • 1.2 TOF 激光飛行時間

 

TOF 飛行時間法依靠通過向目標連續發送光脈衝,然後依據傳感器接收到返回光的時間或相位差來計算距離目標的距離。但顯然這種方式足夠的精度需要極爲精確的時間測量模塊,因此成本相對較高。好處是這種方法測量距離比較遠,受環境光干擾比較小。目前這方面研究旨在降低計時器良品率及成本,相應的算法性能也在提升。

 

  • 1.3 三角測距法

 

三角測距法,即依據三角測距原理,不同於前兩者需要較爲精密的傳感器,三角測距法整體成本較低,並且在近距離的時候精度較高,因而廣泛應用於民用和商用產品中,如掃地機器人中。但三角測距的測量誤差與距離有關,隨着測量距離越來越大,測量誤差也越來越大,這是由三角測量的原理導致的,不可避免。

 

2 被動式

 

直接依靠周圍環境光源來獲取RGB圖像,通過依據多視圖幾何原理對圖像進行解析,從而獲取物體的三維信息。常見的依據原理可以分爲:

 

  • 2.1 單目視覺

 

單目視覺只使用單一攝像頭作爲採集設備,具有低成本、易部署等優點。其依靠一段時間內獲得的連續圖像的視差來重建三維環境。但其存在固有的問題:單張圖像可能對應無數真實物理世界場景(病態),因此使用單目視覺方法從圖像中估計深度進而實現三維重建的難度較大。依據原理,可以分類爲:

 

 

目前這種算法廣泛應用於手機等移動設備中,常見的算法有SfM,REMODE和SVO等。

 

  • 2.2 雙目/多目視覺

 

雙目視覺主要利用左右相機得到的兩幅校正圖像找到左右圖片的匹配點,然後根據幾何原理恢復出環境的三維信息。但該方法難點在於左右相機圖片的匹配,匹配地不精確都會影響最後算法成像的效果。多目視覺採用三個或三個以上攝像機來提高匹配的精度,缺點也很明顯,需要消耗更多的時間,實時性也更差。

 

 

這兩種方法理論上都可較精確恢復深度信息,但實際上受拍攝條件的影響,其精度往往無法得到保證。常見的有SGM和SGBM算法等,其中自動駕駛數據集KITTI中,排名前五十的算法幾乎有一半都是對SGM的改進。

 

3 基於消費級RGB-D相機

 

相機可以基於主動式、被動式不同原理,優點在於基於這些設備的算法更具備實用性。

 

近年來,也有不少研究直接基於消費級的RGB-D相機進行三維重建,如在微軟的Kinect V1、V2產品上,取得了不錯的效果。最早,由帝國理工大學的Newcombe等人於2011年提出的Kinect Fusion開啓了RGB相機實時三維重建的序幕。此後有 Dynamic Fusion和Bundle Fusion等算法。

 

這些方法它們各自有着各自的優點和缺點,同樣有各自所適用的應用範圍。以上爲想要入門基於深度學習進行三維重建領域的同學簡要介紹了這些方法,如需要深入瞭解,請仔細閱讀相關文獻,SfM和多視圖幾何等經典算法作爲入門三維重建領域的基礎永遠都不會過時。

 

 

基於深度學習的三維重建算法

 

我們將基於深度學習的三維重建算法簡要地分爲三部分,更詳細的文獻綜述將會在後續的公衆號的系列文章中做介紹:

 

  • 在傳統三維重建算法中引入深度學習方法進行改進

  • 深度學習重建算法和傳統三維重建算法進行融合,優勢互補

  • 模仿動物視覺,直接利用深度學習算法進行三維重建

 

1 在傳統三維重建算法中引入深度學習方法進行改進

 

因爲CNN在圖像的特徵匹配上有着巨大優勢,所以這方面的研究有很多,比如:

 

  • DeepVO

 

其基於深度遞歸卷積神經網絡(RCNN)直接從一系列原始RGB圖像(視頻)中推斷出姿態,而不採用傳統視覺里程計中的任何模塊,改進了三維重建中的視覺里程計這一環。

 

  • BA-Net

 

其將 SfM 算法中的一環集束調整(Bundle Adjustment, BA)優化算法作爲神經網絡的一層,以便訓練出更好的基函數生成網絡,從而簡化重建中的後端優化過程。

• Code SLAM,如之前所提,其通過神經網絡提取出若干個基函數來表示場景的深度,這些基函數可以簡化傳統幾何方法的優化問題。

 

2. 深度學習重建算法和傳統三維重建算法進行融合,優勢互補

 

CNN-SLAM13將CNN預測的緻密深度圖和單目SLAM的結果進行融合,在單目SLAM接近失敗的圖像位置如低紋理區域,其融合方案給予更多權重於深度方案,提高了重建的效果。

 

3. 模仿動物視覺,直接利用深度學習算法進行三維重建

 

我們知道,三維重建領域主要的數據格式有四種:

 

  • 深度圖(depth map)

2D圖片,每個像素記錄從視點到物體的距離,以灰度圖表示,越近越黑;

 

  • 體素(voxel)

體積像素概念,類似於2D之於像素定義;

 

  • 點雲(point cloud)

每個點逗含有三維座標,乃至色彩、反射強度信息;

 

  • 網格(mesh)

即多邊形網格,容易計算。

 

因而,依據處理的數據形式不同我們將研究簡要分爲三部分:1)基於體素;2)基於點雲;3)基於網格。而基於深度圖的三維重建算法暫時還沒有,因爲它更多的是用來在2D圖像中可視化具體的三維信息而非處理數據。

 

(1)基於體素

 

體素,作爲最簡單的形式,通過將2D卷積擴展到3D進行最簡單的三維重建:

 

  • Depth Map Prediction from a Single Image using a Multi-Scale Deep Network, 2014 

 

該方法是用深度學習做三維重建的開山之作,基於體素形式,其直接用單張圖像使用神經網絡直接恢復深度圖方法,將網絡分爲全局粗估計和局部精估計,並用一個尺度不變的損失函數進行迴歸。

 

  • 3D-R2N2: A unified approach for single and multi-view 3d object reconstruction, 2016

 

Christopher等人基於體素形式提出的3D-R2N2模型使用Encoder-3DLSTM-Decoder的網絡結構建立2D圖形到3D體素模型的映射,完成了基於體素的單視圖/多視圖三維重建(多視圖的輸入會被當做一個序列輸入到LSTM中,並輸出多個結果)。

 

但這種基於體素的方法存在一個問題,提升精度即需要提升分辨率,而分辨率的增加將大幅增加計算耗時(3D卷積,立次方的計算量)。

 

(2)基於點雲

 

相較而言,點雲是一種更爲簡單,統一的結構,更容易學習,並且點雲在幾何變換和變形時更容易操作,因爲其連接性不需要更新。但需要注意的是,點雲中的點缺少連接性,因而會缺乏物體表面信息,而直觀的感受就是重建後的表面不平整。

 

  • A Point Set Generation Network for 3D Object Reconstruction From a Single Image, 2017

 

該方法是用點雲做三維重建的開山之作,最大貢獻在於解決了訓練點雲網絡時候的損失問題,因爲相同的幾何形狀可能在相同的近似程度上可以用不同的點雲表示,如何用恰當的損失函數來進行衡量一直是基於深度學習用點雲進行三維重建方法的難題。

 

  • Point-Based Multi-View Stereo Network, 2019

 

該方法通過對場景的點雲進行處理,融合三維深度和二維紋理信息,提高了點雲的重建精度。

 

(3)基於網格

 

我們知道之前的方法的缺點:

 

  • 基於體素,計算量大,並且分辨率和精度難平衡

  • 基於點雲,點雲的點之間缺少連接性,重建後物體表面不光滑

 

相較而言,網格的表示方法具有輕量、形狀細節豐富的特點,重要是相鄰點之間有連接關係。因而研究者基於網格來做三維重建。我們知道,網格是由頂點,邊,面來描述3D物體的,這正好對應於圖卷積神經網絡的M=(V,E,F)所對應。

 

  • Pixel2Mesh

用三角網格來做單張RGB圖像的三維重建,相應的算法流程如下:

 

Step1:對於任意的輸入圖像都初始化一個橢球體作爲初始三維形狀。

 

Step2:將網絡分爲兩部分:

一部分用全卷積神經網絡來提取輸入圖像的特徵

另一部分用圖卷積網絡來表示三維網格結構,

 

Step3:對三維網格不斷進行變形,最終輸出物體的形狀。

 

模型通過四種損失函數來約束形狀,取得了很好的效果。貢獻在於用端到端的神經網絡實現了從單張彩色圖直接生成用網格表示的物體三維信息。

 

總結

 

傳統的三維重建算法可以分爲:

 

 

這些方法各自有各自優點和使用範圍,簡要概括一下:

 

 

而基於深度學習的三維重建算法研究主要有三種:

 

1. 在傳統三維重建算法中引入深度學習方法進行改進;

2. 深度學習重建算法和傳統三維重建算法進行融合,優勢互補;

3. 模仿動物視覺,直接利用深度學習算法進行三維重建,包括基於體素、基於點雲和基於網格。

 

 

-END-

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章