a. 點雲即三維空間中點的集合;每一點都是由某個(xyz)位置決定的,我們同時可以為其指定其它的屬性(如 RGB 顏色)。它們是鐳射雷達資料被獲取時的原始形式,立體視覺系統和 RGB-D 資料(包含標有每個畫素點深度值的影象)通常在進行進一步處理之前會被轉換成點雲。
b. 體素網格是從點雲發展而來的。「體素(Voxel)」就好比三維空間中的畫素點,我們可以把體素網格看作量化的、大小固定的點雲。然而,點雲在空間中的任何地方能夠以浮點畫素座標的形式涵蓋無數個點;體素網格則是一種三維網格,其中的每個單元(或稱「體素」)都有固定的大小和離散的座標。
c. 多邊形網格由一組帶公共頂點的凸多邊形表面組成,可近似一個幾何表面。我們可以將點雲看作是從基礎的連續集合表面取樣得到的三維點集;多邊形網格則希望透過一種易於渲染的方式來表示這些基礎表面。儘管多邊形網格最初是為計算機圖形學設計的,但它對於三維視覺也十分有用。我們可以通過幾種不同的方法從點雲中得到多邊形網格,其中包括 Kazhdan 等人於 2006 年提出的「泊松表面重建法」。
d. 多視圖表示是從不同的模擬視角(「虛擬攝像頭」)獲取到的渲染後的多邊形網格二維影象集合,從而透過一種簡單的方式表現三維幾何結構。簡單地從多個攝像頭(如立體視覺系統 stereo)捕捉影象和構建多視圖表示之間的區別在於,多檢視實際上需要構建一個完整的 3D 模型,並從多個任意視點渲染它,以充分表達底層幾何結構。與上面的其他三種表示不同,多視圖表示通常只用於將 3D 資料轉換為易於處理或視覺化的格式。
VoxNet 存在的一個問題是,該架構本質上並沒有旋轉不變性,儘管作者合理地假設感測器保持直立,使體素網格的 z 軸和重力方向保持一致,但是並沒有假設物體會繞著 z 軸旋轉:一個物體從背後看仍然對應相同的物體,即使在體素網格中的幾何形狀與我們所學的卷積核有很大的不同。為了解決這個問題,他們使用了一個簡單的資料增強策略。在訓練中,他們多次對每個體素網格進行旋轉,並且在所得到的副本上進行訓練;接著在測試時,他們將最後的全連線層在輸入的不同方向上得到的輸出進行池化。他們指出,這種方法比 Su 等人使用的多檢視 CNN 在「檢視池化」步驟中所做的對中間卷積層輸出進行池化的方法能更快收斂。透過這種方式,VoxNet 透過在輸入的體素網格的不同旋轉方向上共享相同的學到的卷積核權值來學習這種旋轉不變性。
其中 f 是將輸入點轉換為 k 維向量的轉換函式(用於物體分類)。該函式 f 可以近似表示為另一個存在的對稱函式 g。在方程中,h 是一個多層感知機(MLP),它將單個輸入點(以及它們相應的特徵,如 xyz 位置、顏色、表面法線等)對映到更高維度的潛在空間。最大池化操作則會作為對稱函式 g 起作用,它將學到的特徵聚合為點雲的全域性描述符。這個單一特徵向量會被傳遞給 另一個輸出物體預測結果的多層感知機 γ。
在過去的 5 年中,3D 深度學習方法已經從使用三維資料的派生表示(二維投影)轉變為直接使用原始資料(點雲)。而在方法上也從將二維卷積神經網路應用到三維資料上轉變為專門為三維場景設計的方法,這大大提高了物體分類和語義分割等任務的效能。這些結果非常有前景,它們證明了透過三維技術觀察和表示這個世界是有價值的。然而,這個領域才剛剛步入發展的快車道。
想象一下,如果你正在建造一輛自動駕駛汽車,它需要了解周圍的環境。為了安全行駛,你的汽車該如何感知行人、騎車的人以及周圍其它的車輛呢?你可能會想到用一個攝像頭來滿足這些需求,但實際上,這種做法似乎效果並不好:你面對的是一個三維的環境,相機拍攝會使你把它「壓縮」成二維的影象,但最後你需要將二維影象恢復成真正關心的三維影象(比如你前方的行人或車輛與你的距離)。在相機將周圍的三維場景壓縮成二維影象的過程中,你會丟掉很多最重要的資訊。試圖恢復這些資訊是很困難的,即使我們使用最先進的演算法也很容易出錯。
相反,用三維資料來增強對世界的二維檢視是非常好的做法。與其試著從一張二維影象中估計你和行人或其它車輛的距離,你不如透過感測器直接對這些物體進行定位。但是,這樣做又會使感知的工作變得十分困難。如何在三維資料中識別人、騎車者和汽車這樣的目標呢?傳統的像卷積神經網路(CNN)這樣的深度學習技術,能夠使在二維影象中識別這些目標變得簡單而直接,但是它們也需要進行一些調整從而適應在三維環境下的工作。幸運的是,三維感知問題在過去的幾年中已經被人們廣泛研究,我們在本文中的任務就是對這項工作進行一個簡要的概述。
具體來說,我們將關注最近的三維目標分類和語義分割的深度學習技術。我們將首先回顧一些獲取和表示三維資料的常用方法的背景。接著,我們將介紹三種不同的表示三維資料的基本深度學習方法,最後,我們將介紹未來有前景的新研究方向,並且從我們的視角總結該領域未來的走向。
我們如何獲取並表示三維資料?顯然,我們需要能夠直接在三維空間進行操作的計算機視覺方法,但是這向我們提出了三個明確的挑戰:感知、表示和理解三維資料。
感知
獲取三維資料的過程是複雜的。雖然二維攝像頭既便宜又隨處可見,但是三維感知通常需要專用的硬體裝置。
1:立體視覺系統 Stero 需要在相對於待測物體特定的一些位置固定兩個或多個攝像頭,並且利用這樣設定的結構獲取不同場景下的影象,匹配相應的畫素點,計算每個畫素點對應的位置在不同的影象間的差異,從而計算出該畫素點在三維空間中的位置。人類大致上就是像這樣感知這個世界的。我們的眼睛會捕捉到兩個獨立的對於關於我們眼前世界的「影象」,接著大腦會從左眼和右眼的視角來看某個物體的位置有何不同,從而確定其三維位置。Stero 涉及到的硬體系統十分簡單,這正是它吸引人的地方,它僅僅需要兩個或多個普通的攝像頭。然而,這種方法在對準確率和執行速度有要求的應用程式中表現並不好,這是因為使用視覺細節來匹配不同的攝像頭得到的影象之間對應的畫素點不僅具有很高的計算複雜度,而且在缺乏紋理特徵或視覺重複的環境中也很容易出錯。
2:RGB-D 涉及到對一種特殊攝像頭的使用,這種攝像頭除了顏色資訊(「RGB」),還可以獲取深度資訊(「D」)。具體而言,它能夠獲取透過普通的二維攝像頭得到的彩色影象,而且還能告訴你這些影象中畫素點的某些子集代表的物體離攝像頭有多遠。在系統內部,RGB-D 感測器要麼透過「結構光」技術工作,要麼透過「飛行時間法」(TOF)工作。「結構光」技術能夠將紅外線圖案投射到一個場景上,並且感知這種圖案是如何在幾何表面上變形的;「飛行時間法」會觀察其發出的紅外線返回攝像頭所需要的時間。舉例來說,微軟的 Kinect 以及 Iphone X 的 FaceID 感測器都是 RGB-D 攝像頭。由於這些感測器在尺寸相對較小、成本較低的同時,也能在對視覺匹配錯誤具有免疫性的同時很快地執行,所以 RGB-D 是一種很好的感知手段。然而,RGB-D 攝像頭的深度輸出常常有許多的「孔洞」,這是由於遮擋(前景中的物體遮擋住了其後方物體的投影),模式感知失敗以及感知範圍的問題(在離攝像頭更遠的地方,投影和感知會變得很困難)。
鐳射雷達(LiDAR)使用多個鐳射束(同心圓模式)直接感知環境的集合結構(Giphy)。
3:鐳射雷達會向物體發出快速鐳射脈衝,測量它們返回感測器所需要的時間,這類似於我們在上面描述的「飛行時間法」,但是鐳射雷達的感知範圍更遠,能夠捕獲更多像點,並且抗其它光源干擾的能力更強。目前,大多數的三維鐳射雷達感測器都會發出一些(多達 64 個)垂直排列的光束,會在感測器周圍的各個方向上快速旋轉。出於對準確性、感知範圍以及魯棒性的要求,目前大多數的自動駕駛汽車都會採用這種系統。但是鐳射雷達感測器存在的問題是,它們通常都很大很重並且極其昂貴(大多數自動駕駛汽車使用的 64 束感測器需要花費 7.5 萬美元)!因此,許多公司目前正在嘗試開發更加廉價的「固態鐳射雷達」系統,它無需旋轉就可以在三維場景下進行感知。
三維表示一旦你獲取了三維資料,你就需要以一種形式來表示它,這種形式將作為你正在構建的處理流程的輸入。以下是四種你應該已經知道的表示方式:
a. 點雲即三維空間中點的集合;每一點都是由某個(xyz)位置決定的,我們同時可以為其指定其它的屬性(如 RGB 顏色)。它們是鐳射雷達資料被獲取時的原始形式,立體視覺系統和 RGB-D 資料(包含標有每個畫素點深度值的影象)通常在進行進一步處理之前會被轉換成點雲。
b. 體素網格是從點雲發展而來的。「體素(Voxel)」就好比三維空間中的畫素點,我們可以把體素網格看作量化的、大小固定的點雲。然而,點雲在空間中的任何地方能夠以浮點畫素座標的形式涵蓋無數個點;體素網格則是一種三維網格,其中的每個單元(或稱「體素」)都有固定的大小和離散的座標。
c. 多邊形網格由一組帶公共頂點的凸多邊形表面組成,可近似一個幾何表面。我們可以將點雲看作是從基礎的連續集合表面取樣得到的三維點集;多邊形網格則希望透過一種易於渲染的方式來表示這些基礎表面。儘管多邊形網格最初是為計算機圖形學設計的,但它對於三維視覺也十分有用。我們可以通過幾種不同的方法從點雲中得到多邊形網格,其中包括 Kazhdan 等人於 2006 年提出的「泊松表面重建法」。
d. 多視圖表示是從不同的模擬視角(「虛擬攝像頭」)獲取到的渲染後的多邊形網格二維影象集合,從而透過一種簡單的方式表現三維幾何結構。簡單地從多個攝像頭(如立體視覺系統 stereo)捕捉影象和構建多視圖表示之間的區別在於,多檢視實際上需要構建一個完整的 3D 模型,並從多個任意視點渲染它,以充分表達底層幾何結構。與上面的其他三種表示不同,多視圖表示通常只用於將 3D 資料轉換為易於處理或視覺化的格式。
理解現在,你已經將你的三維資料轉化成了易於理解的形式,你需要做的是真正構建一個計算機視覺處理流程來理解它。這裡的問題在於,傳統的在二維影象上效能良好的深度學習技術(如 CNN)在處理三維資料時可能會很困難,具體情況取決於資料的表示。這使得傳統的如目標檢測或影象分割等任務變得具有挑戰性。
透過多檢視輸入學習
使用三維資料的多視圖表示是將二維深度學習技術應用到三維場景下的最簡單的方式。這是一種將三維感知問題轉化為二維感知問題的明智做法,但它仍然在某種程度上允許你對物體的三維幾何結構進行推理。早期的利用這種思想的基於深度學習的工作是 Su 等人在 2015 年提出的 multi-view CNN。
這是一種簡單卻十分有效的網路架構,它可以從三維物體的多個二維檢視中學到特徵描述符。實現這種方法與對目標分類任務使用單個二維影象相比,提高了模型的效能。這種方法透過將一張張影象輸入在 ImageNet 上預訓練好的 VGG 網路,從而提取出顯著的特徵、將這些結果向量組合在一起,並且將這些資訊傳遞給其餘的卷積層進行進一步的特徵學習得以實現。
然而,multi-view 影象表示仍然有很多的侷限性。主要的問題是你並沒有真正在三維環境下學習,固定數量的二維檢視仍然只是一個對於底層的三維結構的不完美的近似。因此,像語義分割這樣的任務,特別是在跨越更復雜的物體和場景時,就會因為從二維影象中獲得的特徵資訊有限而變得具有挑戰性。此外,這種視覺化三維資料對於像自動駕駛和虛擬現實這樣計算開銷非常大的任務來說是不可擴充套件的。請記住,生成多視圖表示需要渲染一個完整的三維模型並且模擬一些任意的視點。多檢視學習仍然有許多缺陷,這些缺陷促使人們研究直接利用三維資料進行學習的方法。
透過體積式表示學習透過體素網格進行學習可以解決多視圖表示的主要缺點。體素網格縮小了二維和三維之間的差距,它們是最接近影象的三維表示形式,這使得二維深度學習的概念(比如卷積操作)能夠容易地應用於三維情景。
Maturana 和 Scherer 在 2015 年提出的 VoxNet(2015)是最早在給定體素網格輸入的情況下在物體分類任務上取得優異表現的深度學習方法。VoxNet 使用的是機率佔用網格,其中的每個體素都包含了該體素在空間中被佔用的機率。這樣做的一個好處就是,它允許網路區分已知是自由的體素(例如,鐳射雷達光束經過的體素)和佔用情況未知的體素(例如,鐳射雷達擊中位置後方的體素)。
VoxNet 的架構本身非常簡單,它由兩個卷積層、一個最大池化層和兩個用於計算輸出的類別得分向量的全連線層組成。這個網路比最先進的影象分類網路要淺得多,引數也少得多,但是它是從上百種可能的卷積神經網路架構中挑選出來的。由於體素網格與影象十分相似,它們實際上使用的帶步長的卷積和池化運算都是從二維畫素的工作方式進行調整遷移到三維體素上來的。卷積運算元使用的是 d×d×d×c 的卷積核而不是二維卷積神經網路中使用的 d×d×c,池化運算考慮的是不重疊的三維體素塊而不是二維畫素塊。
VoxNet 存在的一個問題是,該架構本質上並沒有旋轉不變性,儘管作者合理地假設感測器保持直立,使體素網格的 z 軸和重力方向保持一致,但是並沒有假設物體會繞著 z 軸旋轉:一個物體從背後看仍然對應相同的物體,即使在體素網格中的幾何形狀與我們所學的卷積核有很大的不同。為了解決這個問題,他們使用了一個簡單的資料增強策略。在訓練中,他們多次對每個體素網格進行旋轉,並且在所得到的副本上進行訓練;接著在測試時,他們將最後的全連線層在輸入的不同方向上得到的輸出進行池化。他們指出,這種方法比 Su 等人使用的多檢視 CNN 在「檢視池化」步驟中所做的對中間卷積層輸出進行池化的方法能更快收斂。透過這種方式,VoxNet 透過在輸入的體素網格的不同旋轉方向上共享相同的學到的卷積核權值來學習這種旋轉不變性。
VoxNet 代表著我們向真正的三維學習邁進了一大步,但是體素網格仍然具有一些缺點。首先,與點雲相比,它們丟失了解析度。因為如果代表複雜結構的不同點距離很近,它們會被被繫結在同一個體素中。與此同時,與稀疏環境中的點雲相比,體素網格可能導致不必要的高記憶體使用率。這是因為它們主動消耗記憶體來表示自由和未知的空間,而點雲只包含已知點。
透過點雲學習PointNet
考慮到這些使用基於體素的方法存在的問題,近期的工作將重點放在了直接在原始點雲資料上進行操作的架構上。最值得人們注意的是 Qi 等人於 2016 年提出的 PointNet 是最早的處理這種不規則三維資料的方法。然而,正如作者所指出的,點雲僅僅是一組透過 xyz 座標表示位置的點。更具體地說,當我們給定點雲中的 N 個點,網路需要學到相對於這 N 個輸入點的全排列不變的唯一特徵,因為這些輸入給神經網路的點的順序並不會影響底層的幾何形狀。此外,網路應該對點雲的旋轉、平移等轉換有很強的魯棒性,而放縮操作也不應該影響預測結果。
為了保證對於不同的輸入順序的不變性,PointNet 背後的解決方案的關鍵思路是使用一個簡單的對稱函式,該函式為任意順序排列的輸入生成一致的輸出(加法和乘法就屬於這類函式)。在這種直覺的引導下,PointNet 背後的基本架構(稱 PointNet Vanilla)可以定義為:
其中 f 是將輸入點轉換為 k 維向量的轉換函式(用於物體分類)。該函式 f 可以近似表示為另一個存在的對稱函式 g。在方程中,h 是一個多層感知機(MLP),它將單個輸入點(以及它們相應的特徵,如 xyz 位置、顏色、表面法線等)對映到更高維度的潛在空間。最大池化操作則會作為對稱函式 g 起作用,它將學到的特徵聚合為點雲的全域性描述符。這個單一特徵向量會被傳遞給 另一個輸出物體預測結果的多層感知機 γ。
為了應對學習對於點雲的幾何變換具有不變性的表示方式的挑戰,PointNet 使用了一個稱為 T-Net 的小型網路,它將仿射變換應用於輸入點雲。這個概念類似於 Jaderberg 等人於 2016 年提出的空間變換網路(https://arxiv.org/pdf/1506.02025.pdf),但是比它要簡單得多,因為在這裡不需要定義新的型別的層。T-Net 由可學習的引數組成,這些引數使 PointNet 能夠將輸入點雲變換為一個固定的、規範的空間,從而確保整個網路對於即使是最細微的變化都具有很強的魯棒性。
整體的 PointNet 架構繼承了最基本的方法和 T-Net 以及多層感知機層,它們為點雲建立特徵表示。然而,除了物體分類之外,PointNet 還支援對物體和場景進行語義分割。為了實現這一點,該架構將來自最大池化對稱函式的全域性特徵和將輸入資料傳遞給一些多層感知機後學到的點特徵相結合。透過將這兩個向量連線起來,每個點都知道它的全域性語義和區域性特徵,這使網路能夠學習額外的、有助於分割的更有意義的特徵。
PointNet++
儘管 PointNet 取得了令人滿意的結果,其最主要的缺點是該架構不能獲取點附近的底層區域性結構,這一思想類似於使用 CNN 從影象中不斷增大的感受野中提取特徵,為了解決這個問題,Qi 等人於 2017 年開發了 PointNet ++。
它是一個從 PointNet 派生出來的架構,但是也能從點雲的區域性區域中學習到特徵。這種方法的基本結構是一個有層次的特徵學習層,它包含三個關鍵步驟:(1)為區域性區域取樣一些點作為質心,(2)根據到質心的距離對這些區域性區域中的相鄰點進行分組,(3)使用一個 mini-PointNet 對這些區域進行特徵編碼。
這些步驟將被不斷重複,從而在點雲中不同大小的點組中學習特徵。這樣做可以使網路更好地理解整個點雲的區域性點集中的底層關係,最終有助於提升泛化效能。這項工作的結果表明,PointNet++ 相對於包括 PointNet 在內的現有方法的效能有顯著提升,並且在三維點雲分析基準測試(ModelNet40 和 ShapeNet)中取得了目前最好的模型效能。
有前景的新研究領域Graph CNNs
目前關於處理三維資料的深度學習架構的研究主要關注點雲表示,而最近許多的工作擴充套件了從 PointNet/PointNet++ 發展而來的思想,從其它領域獲得靈感,進一步提高了模型效能。舉例而言,Wang 等人於 2018 年提出的動態圖卷積神經網路(https://arxiv.org/pdf/1801.07829.pdf),使用了基於圖形的深度學習方法來改進點雲中的特徵提取工作。其思想是,PointNet 和 PointNet++ 不能捕獲各個點之間的幾何關係,因為這些方法需要對不同的輸入順序的排列組合保持不變性。然而,透過將一個點和它周圍最近的鄰居作為一個有向圖來考慮,Wang 等人構建了 EdgeConv 運算元,它能夠生成資料中各點獨特的特徵。如果你有興趣學習更多關於圖結構上的機器學習的知識,可以參閱這篇概述:https://thegradient.pub/structure-learning/
SPLATNet
另一方面,一些研究不同於 PointNet/PointNet++ 中提出的經典特徵提取方法,選擇設計一種新的點雲處理方法。Su 等人於 2018 年提出的 SPLATNet 架構是點雲研究領域這個新的研究熱點的很好例子。SPLATNet 的作者設計了一個新的架構和卷積運算元,它可以對點雲直接進行操作。這篇論文背後的關鍵思想是將「感受野」的概念轉換為了不規則點雲,這使得空間資訊即使在稀疏區域(PointNet/PointNet++ 的一個主要缺陷)中也可以保持。特別吸引人的一點是,SPLATNet 可以將從多檢視影象中提取的特徵投影到三維空間中,將二維資料與原始點雲以一種端到端的可學習的架構進行融合。SPLATNet 透過使用這種二維-三維聯合學習取得了目前最好的語義分割模型效能。
基於截椎體的 PointNet
基於同時使用二維資料和三維資料的思路,Qi 等人的 Frustrum PointNet 於 2017 年提出了一種將 RGB 影象和點雲融合從而提高在大型三維場景中定位物體的新方法。傳統的解決該任務的方法是透過直接在整個點雲上的滑動視窗上執行分類來確定物體可能的三維邊界框,這樣做的計算開銷非常大,並且很難進行實時預測。Qi 等人的工作有兩個主要的貢獻。首先,他們建議首先使用標準的卷積神經網路在二維影象上進行物體檢測,提取出一個與待檢測的物體可能從屬點雲區域相對應的三維邊界框,然後在點雲的這個「切片」上進行搜尋。這大大縮小了邊界框估計的搜尋空間,減少了檢測錯誤的可能性,在很大程度上簡化了處理流程,這對自動駕駛應用十分關鍵。其次,Qi 等人設計了一種新穎的基於 PointNet 的架構,它可以直接對例項進行分割(將點雲分割為一個個獨立的物體),並一次性地在整個三維邊界框中進行邊界框估計,而不是在邊界框搜尋過程中執行經典的滑動視窗分類工作。這使得他們的方法對遮擋和稀疏等情況即迅速又魯棒。最終,由於這些改進,這項工作釋出時,它在 KITTI 以及 SUN RGB-D 檢測等對比基準上比之前所有的方法都取得了更好的效能。
結語在過去的 5 年中,3D 深度學習方法已經從使用三維資料的派生表示(多視圖表示)轉變為使用原始資料(點雲)。在這個過程中,我們採用的方法已經從簡單地將二維卷積神經網路應用到三維資料上(多檢視卷積神經網路、體素網路 VoxNet)轉變為專門為三維場景設計的方法(PointNet 以及其它基於點雲的方法),這大大提高了物體分類和語義分割等任務的效能。這些結果非常有前景,因為它們證明了透過三維技術觀察和表示這個世界是有價值的。然而,這個領域才剛剛步入發展的快車道。當前的工作不僅要著眼於提高這些演算法的準確率和效能,還要確保魯棒性和可擴充套件性。儘管目前大多數研究是由無人駕駛應用驅動的,但直接在點雲上執行的新方法在三維醫學影像、虛擬現實和室內地圖中也將發揮重要的作用。