網站:http://pvcnn.mit.edu
論文: https://arxiv.org/pdf/1907.03739.pdf
摘要
隨著感測器技術的發展和大量新興應用場景(AR/VR/自動駕駛)的出現,三維深度學習成為了近期的研究熱點。三維資料往往以點雲的方式儲存,近年來,研究人員抑或是選擇先將點雲離散化成結構化的、規整的柵格形式(voxels,可以類比 2D 的畫素 pixels),再利用體素卷積神經網路(volumetric CNNs,可以看作 2D CNN 的三維推廣)對柵格資料進行處理;抑或是選擇直接在點雲資料上進行卷積計算。
基於柵格化資料的處理方法往往受限於其在高解析度下巨大的記憶體和計算開銷:從複雜度的意義上說,volumetric CNNs 的運算量和記憶體佔用都和柵格的解析度的三次方成正比,導致 volumetric CNNs 無法和 2D CNN 一樣處理高解析度的輸入。而對於直接在點雲上進行深度學習的方法,儘管點雲表示大大減少了儲存空間上的佔用,但要在稀疏的、非結構化的點雲資料上進行卷積卻絕非易事。
我們發現之前的工作竟需要花 80% 以上的時間進行對資料的不規則訪問以作為卷積運算的準備工作,而實際計算所佔的時間比例卻非常低,這無疑造成了基於點雲的深度學習方法往往比較低效。為解決這樣的問題,我們提出了 Point-Voxel CNN(PVCNN)來實現高效的三維深度學習。PVCNN 利用點雲的形式來儲存資料,以減小記憶體的消耗,而又選擇柵格化的形式進行卷積,這樣可以避免處理點雲稀疏性所帶來的巨大的非規則資料訪問開銷,很好地提升區域性性。這種取長補短的設計使我們的 PVCNN 在記憶體和計算上都十分高效:我們只用十分之一的記憶體就可以取得遠高於 volumetric CNN baseline 的準確率,而對比於多個基於點雲直接進行深度學習的方法,我們又可以得到平均 7 倍的實測加速。
PVCNN 同時展現了在嵌入式、端計算裝置上部署的潛力:透過縮小 PVCNN 的通道數得到的小模型往往可以在三維語義分割任務上比 PointNet(一個極其高效的模型)快兩倍,卻達到它效能更加強大的續作 PointNet++的精確度。我們也在與自動駕駛密切相關的三維物體檢測任務中驗證了我們方法的有效性。基於我們 Frustum-PVCNN 的模型平均相對 Frustum-PointNet++有 2.4% 的 mAP 提升,同時還有 1.5 倍的加速與記憶體節省。相關工作已經被 Neural Information Processing Systems 2019 接收為 Spotlight Presentation,我們將在 12 月 10 日於溫哥華宣講我們的工作。
背景
三維深度學習在近期研究中取得很大進展。然而,之前的工作更關注如何提升三維深度學習計運算元的表徵能力,卻鮮有研究致力於提升三維深度學習方法的效率。
從計算機硬體的角度看,對於儲存器的訪問往往對演算法的效率有著決定性的影響。下面的左圖顯示,在硬體上,片下的 DRAM 訪存能量消耗比片上的 SRAM 訪問或者一次浮點乘加計算貴兩個數量級,而 DRAM 訪問的頻寬也遠小於片上資源或是運算資源(這導致了訪存可能帶來高延時);另一方面,下面的右圖揭示了在 DDR 記憶體中非規則訪存帶來的危害:頻繁的板塊衝突(bank conflict)導致資料無法在一個時鐘週期內被連續從不同記憶體板塊(bank)中讀出,從而進一步提升訪存帶來的延時。
因此,為使得三維深度學習方法更加高效,我們需要避免大量訪存和不規則訪存。
對於 2016 年前後被大量研究的基於柵格的三維深度學習方法,制約其效率的掣肘是隨解析度三次方增加的記憶體/計算漸進複雜度。柵格作為一種類似二維畫素的離散化表徵形式,其不可避免的困難是落在同一個格中的兩個點將在柵格化後變得無法區分,從而導致資訊丟失。我們在 ShapeNet 資料集上做了統計,發現如果要在一塊 Titan Xp (12GB 視訊記憶體) 上訓練體素卷積神經網路,只能容納解析度為 64x64x64 的柵格輸入,此時會有 42% 的資訊損失(即只有 58% 的點是可區分的),而增加七倍的計算資源也只是能讓可區分的點數勉強超過 90%。如前所述,這樣的記憶體消耗是由柵格表徵形式本身的複雜度所決定的。
基於點雲的深度學習方法則不同,影響其效率的實際上是不規則訪存。我們知道,點雲上的每個點在三維空間裡連續分佈,而在記憶體上相鄰的點在真正的三維空間裡並不一定相鄰。這就給卷積運算,這種定義在每個點鄰域上的運算帶來挑戰。一方面,獲得每個點的鄰域需要大量的非規則資料訪問;另一方面,由於三維空間的連續性,我們無法簡單地透過類似 2D CNN 或 Volumetric CNN 的方式去定義一個基於查詢表(Look-up Table)的卷積核,只能去動態定義卷積濾波器,這又會帶來一些計算開銷。
下圖顯示了我們的發現:之前最先進的基於點雲的深度學習方法 DGCNN, PointCNN 和 SpiderCNN,往往需要 50%-80% 的時間進行非規則資料訪問和動態卷積核計算,而實際計算的時間甚至可能低至 20% 以下。很顯然,從執行時間的角度,基於點雲的方法也具有極大的最佳化空間。
為此我們提出 Point-Voxel Convolution(PVConv)作為一種全新的、高效的三維深度學習計運算元。如前所述,PVConv 仍使用點雲形式儲存資料,因而記憶體佔用小,整體的訪存量也小;另一方面,我們的 PVConv 在柵格表徵下進行卷積;這樣,我們大大省去了傳統的基於點雲的三維深度學習方法在進行卷積時難以避免的非規則記憶體訪問及動態卷積核生成代價,從而獲得上圖所示的極高的實際計算比。
透過 2D CNN 般地重複 PVConv,我們可以得到 PVCNN——一個可用於多種三維計算機視覺任務的強大而高效的深度學習網路。我們在多個物體級別、室內場景級別以及室外場景中物體檢測的任務中展示了 PVCNN 的有效性。
方法
Point-Voxel Convolution
我們選用兩種 Irregular Access Cost 和 Dynamic Kernel Computation Cost 為零的子操作:多層感知機和柵格化卷積。下面我們將展示如何以很低的代價將兩者有機結合並得到我們的 Point-Voxel Convolution 這種計運算元。上圖中上面的分支為基於柵格的資訊聚合分支,其解析度相對較低:
歸一化:
輸入點雲的尺度往往會有一些差異,而我們希望在進行進行柵格化卷積時特徵圖的尺度是相同的,這就需要進行歸一化。在我們的方法中,我們只在柵格分支區域性地進行這種歸一化操作:將輸入點雲縮放到單位球中,並透過 [-1, 1] 到 [0, r-1] 的座標線性對映把點雲座標轉成柵格座標。
柵格化:
我們將點雲表示區域性地轉換成柵格表示以便進行柵格化卷積。直觀地,我們利用 Charles Qi 等人提出的對稱函式建模同一柵格內的所有點:我們選擇將柵格內所有點進行平均池化以得到代表某個柵格的最終特徵。
資訊整合:
我們在得到的柵格特徵圖上進行柵格卷積,以達到資訊整合的目的。類似於 2D CNN 和普通的 Volumetric CNN,我們在每次柵格卷積後也透過批歸一化(BatchNorm)和非線性啟用函式(ReLU)。
反柵格化/點雲化:
如前所述,柵格表徵無可避免地會丟失一部分資訊。為了保持點雲始終處於高解析度,我們需要透過反柵格化操作將柵格資料重新轉換為點雲。一個樸素的想法是直接給落在每個柵格內的點賦上其所在柵格的特徵,然而,這樣會導致同一柵格內點的特徵完全相同。我們也可以選擇三線性插值(Trilinear Interpolation)來根據每個點到相鄰柵格格點的位置來決定其特徵(由相鄰的八個柵格點插值得到)。這樣,我們可以保證每個點在反柵格化後的特徵通常不相同。
上圖中的下面分支為基於多層感知機的特徵轉換分支,它透過一層全連線層保持了點雲處於高解析度,這樣的高解析度資訊可以為來自柵格化分支的低解析度、鄰域資訊提供重要的補充。當我們得到了兩個分支的資訊後,我們可以簡單地透過 elementwise addition 將它們整合起來,這就是一個完整的 PVConv 操作。
值得注意的是,PVConv 是一個非常高效的計運算元。如前述,PVConv 顯然得益於兩個分支本身不存在非規則訪存以及動態卷積核計算。而唯一引入額外開銷的柵格化和反柵格化(樸素的)過程,其非連續訪存的代價都是 O(n) 次,因為每個點只需要被訪問一次;而對於一般的基於點雲的三維深度學習計運算元,進行一次鄰域資訊聚合首先要把每個點的鄰域資訊取來,這裡就有 O(kn) 次的非連續記憶體訪問,k 是鄰域中的點數,往往在 16 到 64。很顯然,PVConv 大大減小了非連續記憶體訪問。另外一方面,PVConv 並不需要像基於點雲的三維深度學習計運算元那樣去計算每個點的鄰域,這也大大降低了額外開銷。
從宏觀上看,我們的 PVConv 中每個步驟都是可導的,並且它的輸入和輸出都是點雲。所以從梯度流的角度看,PVConv 和一般的直接基於點雲的三維深度學習計運算元一樣,既可以透過自身堆疊形成比較深的神經網路,也容易地被整合進任何端到端可訓練的三維深度學習網路中(見下兩圖:第一張是 PVConv 單獨組合成 PVCNN,第二張圖是 PVConv 嵌入 PointNet++得到 PVCNN++)。
結果
我們在具有代表性的三維視覺資料集:ShapeNet(三維物體部分語義分割),S3DIS(三維室內場景分割)和 KITTI(自動駕駛場景中的三維物體檢測)中驗證了 PVCNN 的表現。
在 ShapeNet 資料集上,我們的完整通道數模型可以以 2.7 倍的實測加速達到略好於 PointCNN 的效能,同時我們的記憶體佔用也減小了 1.6 倍;而即便我們將通道數縮小四倍,我們的模型也可以在達到 PointNet++, DGCNN 等複雜方法效能的同時比 PointNet(此前這個領域中被認為最為精簡、高效的模型)快 1.9 倍、省 1.9 倍記憶體。
我們同時展示我們的四分之一寬度小模型和我們的完整模型在端計算裝置上部署的情況:
完整的 PVCNN 可以在 NVIDIA Jetson AGX Xaviers 上以每秒 20.2 個物體的速度執行,而四分之一寬度版本的小模型在價格僅 99 美元的 NVIDIA Jetson Nano 上也可以達到接近每秒 20 個物體的速度。
透過下圖中對 PVConv 兩個分支特徵的視覺化,我們不難發現兩個分支確實學到了互補的特徵:
基於柵格的分支往往更加關注大而連續的區域,基於點雲 MLP 的特徵轉換分支往往更加關注獨立的,不連續的區域。
在 S3DIS 資料集上,我們的方法也具有先進的效能,同時極為高效:只需要七分之一左右的執行時間就可以超越此前優秀的方法 PointCNN。當然,我們的記憶體消耗也比 PointCNN 小了很多。此外,我們的 0.25 倍通道數小模型均在執行時間比 PointNet 快 1.8 倍的情況下效能超越了更為複雜的 DGCNN 和 RSNet。Tradeoff 曲線更直觀地反映了這一點。
在 KITTI 資料集上,我們用 PVConv 替換 Frustum PointNet 系列中三維部分的計運算元,並達到明顯更優的效能:省 1.5 倍記憶體和執行時間的條件下,平均檢測 mAP 比 Frustum PointNet++高 2.4%。
我們將在 NeurIPS 2019 大會上介紹我們的工作,Spotlight Presentation 將在溫哥華當地時間 12 月 10 日上午 10:25 在 West Ballroom C 進行,而 Poster Session 將在當天 10:45 到 12:45 在 East Exhibition Hall B + C 112 號展位進行,歡迎感興趣的老師、同學、工業界同事前來交流。