想象一下你正在打造一輛可探測周圍環境的自動駕駛車。你要如何讓你的車感知行人、騎自行車的人以及其他車輛,以安全行駛呢?你可以給它裝上相機,但效果并不是特別好:你面對的是整個 3D 環境,相機拍攝到的只是把它拍扁之后的 2D 圖像,然后再嘗試從這個 2D 圖像中復原你真正需要用到的 3D 信息(比如與車前面的行人、汽車間的距離)。然而,一旦將 3D 環境擠壓成 2D 圖像,很多對你來說最重要的信息就會丟失,并且將這些信息重新拼湊起來十分困難——即使使用最先進的算法,也容易出錯。
相反地,你最好采用 3D 數據來輔助你看這個世界的 2D 視角,而不是從一張 2D 圖像中去估計與行人或其他車輛間的距離,這樣的話,你將能夠通過其它的傳感器直接定位這些目標。然而,用了 3D 數據之后,下一步要做的事情就變得麻煩了。你怎樣才能從 3D 數據中識別類如人、騎自行車的人以及汽車等目標呢?傳統的深度學習技術,如能直接識別 2D 圖像中目標的卷積神經網絡(CNNs),需要重新對 3D 數據做適配才能工作。幸運的是,在過去的幾年中,已有很多對于 3D 感知問題的研究,而本文中,我們將對這一問題做一個簡要的概述。
特別地,我們將重點關注能對 3D 對象進行分類和語義分割的最新深度學習技術。一開始,我們會回顧一下 3D 數據采集和表示的常用方法作為背景知識。然后,我們將描述分別針對三種 3D 數據表示方式的基本深度學習方法。最后,我們將探討一些有前景的研究方向,并從我們的視角,來總結該領域的發展方向。
怎樣采集和表示 3D 數據?
顯而易見,我們需要的是能夠直接以 3D 方式操作的計算機視覺方法,而這就提出了三個明顯的挑戰:3D 數據的感知、表示和理解。
感知
3D 數據的采集是一個復雜的過程。雖然 2D 攝像價格便宜且應用廣泛,但是 3D 感知通常需要專用硬件設施。
雙目視覺使用了多個相機,并對感知目標位置的轉移進行了評估,來計算深層信息
1.(雙目視覺)將兩個或多個相機布置在彼此之間相對固定的位置上,并使用這種設置來捕捉一個場景的不同圖像、匹配對應的像素,并計算每個像素的位置在圖像之間如何不同,從而計算出這個像素在 3D 空間中的位置。這基本上就是人類感知世界的方式——我們的眼睛捕捉到現實世界中兩個分開的「圖像」,然后我們的大腦觀察目標的位置在我們左、右眼的視野中有何不同,從而確定它的 3D 位置。雙目視覺方法看起來很吸引人,因為它只需要簡單的硬件——兩臺或兩臺以上的普通相機就能實現。然而,因為使用視覺細節來匹配相機圖像之間的對應點不僅計算昂貴,而且在缺乏紋理或視覺結構重復的環境中容易出錯,這種方法在要求精度或速度的應用中并不適用。
RGB-D相機輸出了一個四通道圖像,它包含了每個像素深層的顏色信息
2. RGB-D需要使用一種特定機型的相機,這種相機不僅能捕捉彩色圖像 (「RGB」) 還能捕捉深度信息 (depth,「D」)。具體來說,除了捕捉到普通 2D 相機所能捕捉的相同類型的彩色圖像,而且它還能告訴你圖像中的一部分像素是在相機前方多遠的位置上。在內部,大多數 RGB-D 傳感器的工作原理是「結構光」( light)和「飛行時間」(time of ),前者將紅外圖像投射到場景上,并感測該圖案如何變形投射到幾何表面,后者著眼于投射的紅外光返回照相機需要多長時間。我們耳熟能詳的 RGB-D 相機包括 和 X 的面部 ID 傳感器。RGB-D 非常好用,因為這些傳感器體積相對較小且成本低,但速度快且能避免視覺匹配錯誤。然而,由于遮擋 (前景塊中的目標投影到后面的目標)、圖像感測失敗以及距離問題 (在遠離相機的地方,投影和感測都變得困難),RGB-D 相機往往在其深度輸出中存在許多空白之處。
激光雷達使用幾條激光束(同心圓感應)來直接感知周邊環境的幾何結構
3. LiDAR(激光雷達)的工作方式是向物體發射高頻激光脈沖,并測量它們返回傳感器所需的時間。這與我們上面提到的 RGB-D 相機的「飛行時間」技術類似,但是 LiDAR 的射程明顯更長,能捕獲的點更多,并且在有其它光源干擾的情況下也更加穩定。現在大多數 3D LiDAR 傳感器都有幾個(最高可達 64 個)垂直對齊的光束圖像分割有何實際意義,它們能快速旋轉以觀察傳感器周圍的所有方向。由于這些傳感器的精度、工作距離和穩定性(較好),大多數自動駕駛汽車中都會使用它們。不過,LiDAR 傳感器也有缺點:通常體積大、笨重,并且非常昂貴(大多數自動駕駛車中使用的 64 波束傳感器要花 75000 美元)。因此,許多公司目前正在嘗試開發更便宜的「固態激光雷達」(solid state LiDAR)系統,這種系統可以進行 3D 感知而無需旋轉。
3D 表示
采集 3D 數據后,你就需要以有用的形式將它表示出來,并輸入到你接下來要構建的處理模型中。你應該了解以下四種主要的 3D 表示:
3D 數據的不同表示:(a)點云;(b) 體素網格; (c) 多邊形網格; (d) 多視圖表示
a. 點云(Point )是 3D 空間點的簡單集合,每個點可選擇性地與一些其他屬性(例如 rgb 顏色)一起由一個(xyz)坐標確定。它們是所捕捉的原始 LiDAR 數據,并且在進行進一步處理之前,雙目視覺 和 RGB-D 數據(由每個都標記了像素深度值的圖像組成)通常會被轉換為 點云。
b. 體素網格(Voxel grids)源自于點云。「體素」就像 3D 空間中的像素,體素網格則可被看成是量化的、大小固定的點云。然而點云在浮點像素坐標的空間中的任一地方,都可以有無限個點,體素網格則是每個單元或「體素」都具有固定大小和離散坐標的 3D 網格。
C. 多邊形網格( )由一組與多邊形表面近似、共享頂點的幾何面組成。點云可被視為從真實的連續幾何表面采樣得到的 3D 點的集合;而多邊形網格則旨在以易于渲染的方式表示那些底層表面。多邊形網格雖然最初因計算機圖形而創建,它對于 3D 視覺,也非常有用。從點云中獲取多邊形網格的方法有多種,其中包括 這類泊松曲面重建方法。
d. 多視圖表示(Multi-view )是從不同模擬視點(「虛擬相機」)捕獲的一個經渲染的多邊形網格的 2D 圖像的集合,它可以采用簡單的方法對 3D 幾何進行轉換。簡單從多個相機(呈現效果如雙目視覺)捕捉圖像和構建一個多視圖表示之間的區別在于,后者需要真正去構建完整的 3D 模型,并從多個任意視點渲染該模型,從而實現真實的幾何結構的完全轉換。與上述其他三種用于存儲和處理 3D 數據的表示不同,多視圖表示通常僅應用于將 3D 數據轉換成可處理或可視化的簡單格式。
理解
將 3D 數據轉換為可理解的格式后,接下來就需要真正地構建計算機視覺模型來理解它。現在的問題是,把在 2D 圖像上表現良好的傳統深度學習技術(如 CNN)拓展到在 3D 數據上運行,根據數據表示的不同可能會很困難,這也使得目標檢測、語義分割等傳統任務變得具有挑戰性。
多視圖輸入學習( with multi-view )
使用 3D 數據的多視圖表示,是 2D 深度學習技術適配于 3D 的最簡單方法。將 3D 感知問題轉換為 2D 感知問題是一個聰明的做法,但在某種程度上,這種方法仍然需要你推理出一個目標的 3D 幾何。早期基于深度學習的工作使用了這一方法的是 SU 等人的論文 Multi-view CNN(2015,),它提出的 Multi-view CNN 這個簡單而有效的結構,能從一個 3D 目標的多個 2D 視圖中學習特征描述符。比起使用單個 2D 圖像來進行目標分類,采用了這一方法的結構具有更好的性能。它的實現方式是:將單個圖像喂給在 上進行了預訓練的 VGG 網絡從而來提取顯著特征、池化產生的激活圖,并將這些信息傳送到附加卷積層來進一步進行特征學習。
多視圖 CNN 結構
同時,多視圖圖像表示也存在大量不足。其中,主要的不足是,無法真正以 3D 形式進行學習——固定數量的 2D 視圖依舊只是一個對底層 3D 結構的不完美近似。結果,由于從 2D 圖像中獲得的特征信息有限,諸如語義分割等任務——尤其是跨目標和場景的更復雜的任務,變得具有挑戰性。同時,對于諸如自動駕駛和虛擬現實等計算受限的任務,這種 3D 數據可視化形式無法進行大規模應用——要注意的是,生成多視圖表示需要對完整的 3D 模型進行渲染以及對多個任意視點進行仿真。最后,多視圖學習也面臨著許多缺陷,而這些缺陷將激勵研究者們研究直接從 3D 數據中學習的方法。
體積表示法學習( with )
體素網格學習解決了多視圖表示的主要缺陷。體素網格架起了 2D 和 3D 視覺之間的橋梁——它們對于圖像來說,最接近 3D 表示,可使 2D 深層學習概念(如卷積運算符)更易于適配 3D 場景。 和 的論文 (2015,),就是最早一批在給定體素網格輸入的情況下,在目標分類任務上取得喜人結果的深度學習方法。 在概率性占位網格上操作,其中每個體素包含該體素在空間上被占用的概率。這種方法的一個好處是,它允許網絡對已知自由的體素 (例如 LiDAR 光束通過的體素) 和占用情況未知的體素 (例如 LiDAR 光束射中的位置后面的體素) 進行區分。
結構
的結構本身相當簡單,它由 2 個卷積層、1 個最大池層和 2 個全連接層組成,最終計算輸出類得分向量。這種網絡比大多數最先進的圖像分類網絡更淺得多,并且擁有小得多的參數,不過它是從數百種可能的 CNN 結構的隨機搜索中被選取出來的。由于體素網格與圖像非常相似,它們采用的實際跨步卷積和池化操作,只是在 2D 像素上執行的這些操作對 3D 體素的細微適配。卷積操作使用 d×d×d×c 核而非應用于 2D CNNs 中的 d×d×c 核,而池化操作則考慮非重疊的 3D 體素塊,而不是 2D 像素塊。
的一個問題是,它的結構并非原本就是旋轉不變的。雖然論文作者合理地假設傳感器保持直立,從而讓體素網格的 z 軸與重力方向對齊,但是對于 z 軸的旋轉來說,即使體素網格中的幾何與學習卷積核的相互作用非常不同,這種的假設——來自后方的目標依舊是同一個目標,依舊是不存在的。為解決這一問題,他們采用了一種簡單的數據增強策略。在訓練期間,他們將每個模型旋轉幾次,并在所有的副本上進行訓練;接著,在測試時,他們將橫跨幾個輸入選擇的最終全連接層的輸出進行池化處理。他們指出,與 Su 等人的 Multi-view CNNs 在其「視圖池化」步驟中將中間卷積層的輸出池化相比,這種方法帶來的性能差不多但是收斂得更快。用這種方式, 通過共享橫跨輸入體素網格的不同旋轉的相同的學習卷積核權重,來學習旋轉不變性。
VoNET 代表了向真正的 3D 學習邁進的一大步,不過,體素網格仍然存在許多缺陷。首先,與點云相比,它們損失了分辨率——因為當它們彼此靠近時,一些代表復雜結構的不同點會被嵌入到一個體素中。同時,與稀疏環境中的點云相比,體素網格可能導致不必要的高內存使用,因為它們大量消耗內存來表示自由和未知空間,而點云則僅包含已知點。
點云學習( with point )
針對這些基于體素方法的問題,最近的研究集中于直接在原始點云上進行操作的結構。最值得注意的是,Qi 等人的論文 (2016,)是針對處理不規則 3D 數據這種格式最早被提出的方法之一。然而,如作者所指出的,點云只是 3D 空間里由 XYZ 坐標表示的一組點。更具體來說,假設給定點云中的 N 點,因為喂給網絡的點的排序對底層幾何沒有影響,網絡需要學習對輸入數據的 N! 排列具有不變性的唯一特征。此外,網絡對于點云的轉換——旋轉、平移應該是穩定的,并且它的大小應該對預測沒有影響。
為了確保跨輸入排序的不變性,點云分割背后的關鍵性經驗是,使用一個為輸入的任意排序產生一致輸出的簡單的對稱函數(此類函數中的典型算法包括加法和乘法)。在這種認知的指導下,點云分割結構背后的基本模塊(叫做 )定義如下:
f(x1,…,xn)=γ⊙g(h(x1),…,h(xn))
其中 f 是將輸入點轉換成 k 維向量(用于目標分類)的對稱函數。這個函數 f 可以近似為另一個對稱函數 g。在等式中,h 是一個多層感知器(MLP),它用來將個別輸入點(以及它們的 xyz 坐標、顏色、表面法線等相應特征)標記到更高維度的隱空間。最大池化操作充當對稱函數 g,它將學習到的特征聚合為點云的全局描述符。這個單一的特征向量被傳遞到γ——另一個輸出目標預測的 MLP。
為了應對這一挑戰——學習對點云的幾何變換具有不變性的表示,點云分割采用一個叫做 T-Net 的小型網絡,該網絡將一種仿射變換應用到點云的輸入上。這個概念與 等人的論文 (2016,)所提出的概念類似,但要簡單得多,因為它不需要定義層的新類型。T-Net 由可學習的參數組成,這些參數使點云分割能夠將輸入點云轉換為一個固定的、規范的空間,從而確保即使對于最細微的變化,整個網絡也是穩定的。
點云分割結構
整個點云分割結構集成了原始方法、T-Net 與為點云創建特性表示的多個 MLP 層。然而,除了目標分類之外,點云分割還能夠實現目標和場景的語義分割。為了實現這一點,點云分割結構將最大池化對稱函數中的全局特征向量與在輸入數據被傳送到一些 MLP 之后學習的任一點的特征相結合。通過連接這兩個向量,每個點都能感知到其全局語義和局部特征,從而使網絡能夠學習有助于分割的附加的、更有意義的特征。
基于點云分割的室內場景語義分割結果
雖然點云分割取得了較大的成果,但它存在的主要缺點之一,就是它的結構無法捕獲到點鄰域內的底層局部結構——點鄰域這個概念類似于:使用 CNN 從圖像中不斷增大的感受野規格中提取特征。為了解決這個問題,Qi 等人提出了優化后的 ++(2017,),它衍生自點云分割結構,不過也能夠從點云中的本地區域學習特性。該方法的基礎是分層特征學習層,其具有三個關鍵步驟:第一,它將采樣的點作為局部區域的質心;第二,基于與質心的距離對這些局部區域中的相鄰點進行分組;第三,使用迷你—點云分割對這些區域的特征進行編碼。
這些步驟不斷重復,從而在點云內的大小不一的點群中學習特征。通過這種方式圖像分割有何實際意義,網絡可以更好地理解整個點云中的局部點群中的底層關系——最終有助于提高泛化性能。該研究結果表明,點云分割++能夠顯著改進包括點云分割在內的現有方法,并在 3D 點云分析基準( 和 )上實現了最佳性能。
具有前景的新研究領域
圖像卷積神經網絡(Graph CNNs)
當前對用于處理 3D 數據的深度學習結構的研究,主要集中在點云表示方面,同時,最近的許多工作都是在延展點云分割/點云分割++的概念,并從其他領域汲取靈感來進一步提高性能。例如 Wang 等人的論文 Graph CNNs (2018,),就使用基于圖形的深度學習方法來改善點云中的特征提取。它的觀點是點云分割/點云分割++無法捕獲各個點之間的幾何關系,因為這些方法需要保持對不同輸入陣列的不變性。然而,通過將一個點和它周圍最近的鄰域視作一個定向圖,Wang 等人構建了 ,它是一個生成遍布數據中的點的唯一特征的運算符。如果你有興趣對圖形進行進一步學習,閱讀另一篇 概覽()。
針對點云處理的稀疏點陣網絡()
針對點云處理的稀疏點陣網絡結構
另一方面,一些研究已經繞開了點云分割/點云分割++中提出的經典特征提取方法,而選擇設計一種綜合處理點云的新方法。Su 等人提出的 (2018,)架構,是點云研究新焦點中一個極好的例子——作者設計了一種新的結構和卷積算子,可以直接在點云上操作。這篇論文的主要觀點是,將「感受野」的概念轉譯為能讓空間信息即使在稀疏區域(點云分割/點云分割++的一個主要缺陷)也能夠被保存的不規則點云。特別有意思的是, 可以將從多視圖圖像中提取的特征投影到 3D 空間中,在端到端可學習結構中融合 2D 數據與原始點云。使用這種 2D- 3D 聯合學習, 在語義分割中實現了最優性能。
椎體點云分割( )
對2D 邊界框估計生成的 3D 截體進行可視化
第三個有前景的研究方向,是關于對我們上面所描述的基本結構構建塊進行延展,用來構建用于諸如 3D 目標檢測等有用任務的更精細的網絡。基于同時使用 2D、3D 數據這一想法,Qi 等人的 (2017,) 提出了一個新方法:融合 RGB 圖像與點云,來提高大 3D 場景中目標定位的效率。該任務的傳統方法通過直接在整個點云上對滑動窗口執行分類,來確定目標可能的 3D 邊界框,這種計算成本大,而且還讓實時預測變得困難。Qi 等人做出了兩個重要貢獻:
最后的思考
在過去僅僅 5 年的時間里,3D 深度學習方法已經從使用衍生的(多視圖)3D 數據表示發展到原始的(點云)3D 數據表示。在此過程中,我們已經從簡單使用 2D CNNs 適配 3D 數據的方法(多視圖 CNN,甚至 )轉變為專為 3D 創建的方法(點云分割和其他點云方法),極大地提改善了在目標分類和語義分割等任務上的性能。這些成果是有前景的,因為它們證實了以 3D 視角來看、來表示這個世界,確實是有價值的。
然而,這一領域的進展才剛開始。目前的工作不僅要聚焦于提高這些算法的精度和性能,也需要確保穩定性和可擴展性。盡管目前的許多研究都是由動駕駛這一應用場景所推動的,但是直接在點云上操作這一新方法,也將在 3D 醫學圖像、虛擬現實和室內測繪中發揮重要作用。
Via:
the pixel plane: and in 3D
地址: