【論文閱讀】【三維目標檢測】Structure Aware Single-stage 3D Object Detection from Point Cloud

香港理工大學和阿里巴巴達摩院出品,之前聽說阿里的團隊檢測KITTI排第一,可能就是這篇文章吧。

如果對2D Object Detection有一定了解,其實本文讀起來還是比較容易理解的。我認爲本文體現了:3D Object Detection的發展趨勢遵循2D Object Detection發展趨勢。其實要比較好的理解本文,我認爲要對比理解R-FCN,PV-RCNN,PV-CNN這三篇論文。與這三篇論文的對比我放在了我的思考中,如果各位讀者想要了解本文背後的趨勢,可以重點關注一下我的思考。

SASSD

motivation

本論文認爲voxel的方法還是太過於粗糙,尤其是隨着resolution的下降,很多前景點的信息都被融到了附近的背景點中,所以想要把信息更精細化。具體可以參考論文中的圖3。
在這裏插入圖片描述

Framework

在這裏插入圖片描述
上圖就很好的展現了該網絡的結構。首先使用作爲SECOND作爲backbone,其實也就是使用3D Sparse Convolution,然後加入一個分類頭和迴歸頭。在所謂的Detection network中,提出了PS Warp,這個在下面具體講。

Auxiliary Network

平行於SECOND,加入了Auxiliary network,這個就是用來精細化信息的分支。SECOND每一層的feature map中的feature被認爲是grid的中心的feature,然後通過插值的方式得到原始點雲中每個點對應的feature。通過不同resolution的feature map,原始點雲中獲取不同scale的feature,然後concatenate這些不同scale的feature,得到point-wise的feature。最後使用point-wise的feature取預測每個point的mask和對應object的center。

PS Warp

這個其實與R-FCN中的RoI pool非常像。如果瞭解過R-FCN,這個理解起來就比較容易。這裏我用我的話解釋一下,這個過程可以用下述這種圖解釋:

在這裏插入圖片描述
首先要明確,feature map中的每個grid會預測一個box。
1)首先Classification branch不再是判斷每個grid“是否是物體”的二分類,而是判斷每個grid是否屬於Object的某個部分,把Object分爲K個部分,用K層score分別表示每個grid是否屬於第K個部分,以下我們叫做CKC^K。也就是說,CK(i)C^K\left(i\right)CKC^K中第k層第i個的score表示,第i個grid對應的位置是屬於某個Object的第k部分的score。
2)Regression branch預測了box之後,將box分爲K個部分,記錄每個部分的中心點的位置也就是SKS^K。也就是說,Sk(i)S^k\left(i\right):第i個grid預測的box的第k個部分的具體位置。
3)那麼對於第i個grid預測的box我們有了K個部分分別對應的位置,那麼就需要分別計算其分數。取Sk(i)S^k\left(i\right),然後在CkC^k中插值,得到第i個grid預測的box的第k個部分的分數。這樣,對所有的grid預測的box的所有K個部分取score,就會得到一個K個channel的score map。然後對channel取平均得到最後是否是box的channel。

Experiment

試驗效果好,KITTI排行榜第三。

Ablation study分別驗證了Auxiliary Network中center和segmentation任務對object detection的促進作用,驗證了PSwarp的作用。

思考

這裏說一下我的感受。

Point和Voxel的結合之作

作爲point和voxel的結合之作,與PV-CNN和PV-RCNN有着相似之處,

PV-CNN:我在另外一篇博客中講過PV-CNN,其中我的思考從voxel based和point based角度闡述了這兩個分支的作用,是與與這篇文章的motivation很類似。但從細節來看,PV-CNN的以point爲主的操作我認爲更能提取細節信息。本文中的插值,是不是很像PV-CNN?具體操作的區別,可以說是本文的下采樣依賴voxel的down sampling,而PV-CNN則是依賴在點雲中做FPS,這一點我認爲PV-CNN也更好。

PV-RCNN:我在另外一篇博客講過PV-RCNN,PV-RCNN則是從點雲中選取一些representative point,然後將不同scale的voxel的特徵“插值”到representative point上。那區別在本文使用真的插值,而PV-RCNN使用pointnet++中的SA層,但其實也是加入可學習權重的插值。那麼另外一點相似,則在於本文中的PSwarp與PV-RCNN的two stage,這個放在下一個思考中講。

PSwarp將one stage和two stage的方法聯繫起來

PSwarp是與R-FCN中的warp或者叫做pooling思路上差不多。而R-FCN則是模糊2D Object Detection中one stage和two stage方法的操作,那麼PSwarp其實也是這種作用。將判斷是否是object細化爲判斷是否是object的一部分,然後把所有score通過取均值aggregate起來。這個其實就是簡化版的PV-RCNN的第二階段嘛!

本文的的亮點其實也非常明顯,也就對應着我的兩個思考:
1)point和voxel相結合
2)模糊one stage和two stage的界限,而且效果還很優秀

讀者們覺得本文有用的話,請隨手點個贊!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章