點雲感知 CVPR 2018 論文總結
來自專欄 V2AI87 人贊了文章
據不完全統計,CVPR 2018 上有關 3D Point Cloud Perception 的工作有二十幾篇,本文是我最近兩天看了其中 VoxelNet(Apple),FaF 和 PIXOR (後面兩篇出自 Uber ATG)後,結合目前點雲感知的進度,進行針對性的總結,提出一些改進自己模型的思路。
後續會再看一下其他幾篇:- SPLATNet:https://arxiv.org/abs/1802.08275
- SO-Net:https://arxiv.org/abs/1803.04249
- Refection Removal for Large-Scale 3D Point Clouds:http://openaccess.thecvf.com/content_cvpr_2018/html/Yun_Reflection_Removal_for_CVPR_2018_paper.html
- A Network Architecture for Point Cloud Classification via Automatic Depth Images Generation:http://openaccess.thecvf.com/content_cvpr_2018/html/Roveri_A_Network_Architecture_CVPR_2018_paper.html
- PU-Net: Point Cloud Upsampling Network:http://openaccess.thecvf.com/content_cvpr_2018/html/Yu_PU-Net_Point_Cloud_CVPR_2018_paper.html
- Attentional ShapeContextNet for Point Cloud Recognition:http://openaccess.thecvf.com/content_cvpr_2018/html/Xie_Attentional_ShapeContextNet_for_CVPR_2018_paper.html
在此之前,通常的做法是使用一個級聯的多個模型分布來做,這樣會引入不穩定的因素,因此本文尋求一種 one-stage,端到端的 pipeline。由於三個人物同時進行,可以共享計算,相互之間的信息可以互相補充,速度可以達到 33 FPS。
1.1 數據處理 voxelization由於 FaF 和 PIXOR 的作者是同一伙人,他們對數據的處理採用了類似的方式,將每一幀點雲的 3D Space 使用 dw, dh, dl 劃分為一定規格的 grids,每一個 grid 用 0 或 1 表示格子中是否有點。這就跟 Apollo 的處理方式不同,Apollo 使用更多更複雜的統計量將點雲轉化為 2D 的 8 channel 的 「圖」,然後在上面使用 2D convolution。由於本文多了時序,因此做的是 3D convolution,而 PIXOR 則是 2D 的,兩篇文章都假設 ego-car 和要檢測的車輛在同一平面上,高度的方差遠比車子的長款小,因此本文將高度 voxel 化之後,每一個當作一個 channel,然後使用 1x1 卷積進行聚合 aggregate,數據抽象如下圖所示: 需要注意的是,通過將連續的幀拼接在一起,數據從 3D 變為 4D,做 motion forecasting 需要的 velocity 和 heading 也蘊含在裡面。1.2 模型時序組合:Early & Later Formulation Early Fusion 在模型的第一層就將連續幀的數據通過 1x1卷積融合,這樣做可以直觀理解為對連續幀加權平均,它不能捕捉較複雜的時序信息,但是可以調整不同幀的權重。做完之後,channel 從 n → 1。具體操作時,所有的特徵圖共享權重,也就是說 group convolution。融合完後接 channel 數減半的 VGG16,並移除最有一個 conv group。Later Fusion 則是逐層的進行融合,如上圖所示。先在 temporal 維度上做 3x3x3 的 3D 卷積,把時序將為 1 維,再做 3x3 的空間卷積,結構和 early fusion 相同。最後的輸出有兩個分之,第一個分支預測是一個 vehicle 的概率,第二個分支預測 current 和 n-1 future frames 的 bbox。motion 可以通過連續幀估計 velocity,加速度等。本文在 VGG16 的基礎上採用了 SSD 中的 ground truth box,feature map 的每一個點對應 6 個 gtbox,其中 5 個對應 5m 的物體,1 個對應 8m 的物體。正如 SSD 所述,使用 predefined bbox 可以使回歸量的方差更小,模型更容易訓練。Decoding Tracklet
由於每個 timestamp 都會生成從 current 開始的 n 個預測,因此,對於未來每個 timestamp 的預測值,都是由前面 n 幀預測得到的,因此,本文通過平均的方式來聚合一個物體的 tracklet。這樣做的好處是,如果一個物體在某一個時刻被遮擋了,那還可以通過之前的狀態估計出來,如果一個物體之前沒有出現,現在突然出現了,說明視野中出現了一個新的物體。1.3 訓練過程Loss 計算採用常見的方式,cls 使用 二分類 cross-entropy,reg 使用 smooth l1 loss。 使用 HNM 控制正負樣本比例,訓練結果顯示,使用 later fusion 比 early 的效果要好一些。論文中的效果當然是各方面吊打 SSD,MobileNet 等。 2. PIXOR: Real-time 3D Object Detection from Point CloudsPIXOR 相比 FaF 去掉了其中關於時序的部分,數據採用類似的方式處理,使用 3D 點雲的 BEV 視圖;由於沒有了 time dimension,因此卷積變成了 2D,本文與 MV3D 進行了大量的對比,數據方面最大的不同在於沒有使用 MV3D 或者 Apollo 中 hand-crafted 特徵,而是僅用 0 和 1 表示當前 grid 中有沒有點,同時保存了 reflection 這一維度,由於 Z 軸的範圍使 -2.5 - 1m,單位 0.1m,再加上反射值,因此 PIXOR 的輸入是 36 維的。模型結構如下圖所示:使用俯視圖的另一個額外的好處是,在 AD 場景中,object 基本沒有重疊。
在看的過程中,發現本文和我目前做的工作有很高的相似性,因此應該可以快速的借鑒其中的一些處理方式。比如,本文也是做 pixel-wise 的 prediction,在如上圖所示的網路結構中,黃色部分是 backbone,作者嘗試了 resnet-50,vgg 和 mobilenet 等,backbone 部分由 5 個 block 組成,除了第一個是 2 層的普通卷機,後面都是 resnet 的 residual block。針對 pooling 會使在小物體上的檢測效果被忽略掉的問題,作者在原來的基礎上,在網路的底層增加了更多更少 channel 的層,用來提取更精細的特徵,同時,採用了類似 FPN 的方式,將低維和高維的特徵共同用來上採樣成最終的特徵圖。在 down-sample 和 up-sample 過程中,尺度相同的特徵圖如上圖中間的箭頭所示,通過 pixel-wise summation 處理,然後傳給 header 部分。header 部分也是一個 multitask 的網路,作者實驗發現兩個任務在共享參數時可以達到最好的效果。loss 跟 FaF 很像,這也不奇怪,這兩篇工作是同一組人做的,Uber ATG。
最後,作者在 ablation study 部分還提到他們發現加入一個 額外的 decoding loss 效果會更好,其實就是手動根據預測值算出來 8 個點,然後再算一下 loss,由於計算 cube 的函數是固定的,可以求導,因此也可以加入訓練中。本文回歸的量是 sin theta, cos,offset 和 w,l,相比於直接回歸點,回歸 wl和 offset 訓練更穩定,也更容易收斂,在我的模型中也是這樣處理的。 這幅圖是作者對不同的 header 模塊的探討和不同 backbone 之間的性能對比。3. VoxelNet: End2End Learning for PointCloud-Based 3D Object DetectionVoxelNet 是一個端到端的 3D 點雲目標檢測演算法,它採用的是不同於上面兩篇論文將 3D 點雲轉化為 2D 卷積能處理的 「圖像」 的方式,而是對 voxel 先使用 VFE layers 做 3D 卷積,然後只用 RPN 網路進行目標檢測。
VoxelNet由三個功能模塊組成:(1)特徵學習網路,(2)卷積中間層,以及(3)區域生成網路RPN。GPU對處理密集張量結構進行了優化。直接使用點雲的問題在於,點在空間上是稀疏分布的,每個三維像素都有不同數量的點。我們設計了一種將點雲轉換為密集張量結構的方法,其中堆疊的VFE操作可以在點和三維像素上並行處理。 論文對數據進行了隨機採樣,對於包含多餘 T 個點的 voxel 中,隨機抽樣一個固定的樹木 T 。然後通過級聯的 VFE 層實現高級特徵和局部聚合特徵的結合:先對 3D grids 中的每一個 grid 中的點去中心化,然後作為 point-wise input,輸入的每個點通過中間包含了 relu 和 bn 的 fc 得到 point-wise feature,然後進行 maxpool,獲得 local aggregated feature,然後將兩者 concate 起來,得到 point-wise concatenated feature 。 通過處理非空 voxel,得到了 voxel feature list,每個 voxel feature 和 特定非空像素的空間坐標唯一關聯,得到的 voxel feature 可以表示為一個稀疏的 4D tensor。然後通過卷積中間層,使用 3D 卷機,BN 和 ReLU,逐漸擴大感受視野內 aggregated voxel 的特徵,逐步提取形狀信息。網路使用了 2 個 VFE block。最後通過一個 RPN 網路,它使用 3 個 全卷積 block 進行降採樣,其中 每個 block 為 stride=2的卷積 + 步長為 1 的卷積序列加 BN 和 ReLU,將每一 block 的輸出上採樣成相同大小並 concat 到一塊,用來構造高解析度的特徵圖。RPN 的結構如下圖所示:
關於損失函數:推薦閱讀:
※自動駕駛車穩定度實測 Alphabet 輕取 Uber
※易成:自動駕駛關鍵技術——高精定位
※AutoX創始人肖健雄:我們的無人駕駛要讓天下沒有難開的店
※關於自動駕駛宣傳的幾點修正
※Uber自動駕駛傷亡事故滿周,最新發展進度