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