Part-A2 Net(商汤,港中文,2019.7.8,KITTI)
Part-A2 Net(商湯,港中文,2019.7.8,KITTI)
3D Part-Aware and Aggregation Neural Network for Object Detection from Point Cloud
本文指出以往的3D點云檢測方法都忽略了標簽數據中的內部位置信息,因此提出了在一階段利用該信息進行區域提議的模型。
論文貢獻:
概述:
二階段檢測網絡。
- part aware stage負責預測粗略的提議框和精確的目標局部信息,同一個提議內的目標局部信息被 ROI-aware pooling 分為同一組,得到該提議的有效特征表達。
- part-aggregation 負責對提議框打分和優化。
網絡結構:
一、part-aware 模塊:
點云特征學習
點云分割和預測局部位置信息
在backbone的后面加了兩個分支分別用于分割和預測。
從點云label 得到內部位置信息 label 的方法:
歸一化,旋轉,平移到中心點,注意只計算前景點。
奇怪的是,這里計算回歸損失時使用的是binary cross entropy.
也就是說生成的局部位置標簽是一個bool, 表示該點是不是局部部位?(等有代碼了求證一下)
生成3D區域提議
需要使用3D區域提議將得到的屬于同一個檢測框的的局部位置預測 分組,這里把backbone得到的中間層(encoder的輸出)作為rpn head 的輸入,該輸入特征圖為三維點云特征向量,將其投影到BEV,位于同一位置不同高度的點云特征將被融合,這樣得到了二維 的點云特征圖。最后輸出3D區域提議。
ROI-aware point pooling
知道了每個提議框內的局部位置信息 ,如何融合他們來使二階段網絡更好的優化網絡的最終輸出?
本文提出了 ROI-aware point pooling :將每一個提議體素化,每個體素內的點特征通過融合(max /average pool)作為該體素的特征。空的體素設為0
PointRCNN 中使用了 point cloud region pooling operation,直接丟棄了空的體素,這種操作丟失原本目標框的形狀,帶來歧義。
二、Part-Aggregation 模塊
Aggregation
輸入為ROI-aware point pooling 操作之后的輸出。其實就是一系列sparse卷積操作,其中包括concat操作將上面pooling的兩種feature合并
三、Loss函數
Ablation studies:
part-aware and aggregation是否起到了作用:
作者通過去掉part locations rediction這部分,使用coordinates進行代替,效果變差,證明了part locations prediction的作用。作者通過去掉part-aggregation stage的部分,直接在part-aware stage的輸出做預測,也就是把NMS加在了proposal上,效果對比不如在A2上的提升明顯。
RoI-aware Pooling的作用:
對比了PointRCNN中的Pooling方法,效果提升不錯,但這很容易理解,fixed size本身就存在問題。
Pooling之后的網絡:
修改了不同的網絡結構,效果提升不大
RoI pooling size:
分的柵格約細,對于難的問題處理好,但對于簡單的問題,可能會產生干擾。
個人思考:
本文使用局部位置信息的點子非常新穎,也很符合直覺。但是在一些地方還有很多值得探討的地方,比如backbone中各種不同卷積層的搭配設計。
在計算局部位置信息的回歸 loss 時使用二值交叉熵,看不懂
最后看到 ROI pooling 就想到 ROI Align …
注釋:
Sparse Convolution
? 這個模塊主要對應CV中的步長為2的卷積層,起到pooling的作用。可以參考下面這篇引文:
SECOND: Sparsely Embedded Convolutional Detection
? 使用Sparse Convolution的主要目的是因為體素化后對點云的表示方法是稀疏的。可以想象,位于天空中的柵格和位于障礙物后面的格子中是不包含激光點的,這種格子的特征數值為0,導致柵格整體來看是稀疏的。對于稀疏的柵格做普通的卷積,要做大量對數據為0的柵格做乘加操作,而這種乘加操作的結果仍然為0,所以直觀的講,對于空柵格做卷積,只是在進行計算,而不提取任何特征,輸出與輸入均為0,而且由于體素化后大量柵格是空著的,所以大量的操作是無用的。所以在sparse convolution中,只對不為0的柵格做乘加操作,可以極大的減少操作數量。在這種思想的指導下,sparse convolution重新組合卷積操作中的乘加操作,使用table記錄哪些柵格不為空,從而針對性地計算,可以大大減少計算量。這種操作的輸出與正常的convolution的輸出是一樣的,只是對于稀疏的輸入來說,可以大大減少運算數量。所以步長為2的sparse convolution也好理解,就是正常convolution的理解方法,無非是計算量減小。
Submanifold Sparse Convolution
這個模塊主要對應CV中CNN的卷積層,可以參考下面這篇引文:
3D Semantic Segmentation with Submanifold Sparse Convolutional Networks
引文中提到,對于上述sparse convolution有個問題是,隨著經過sparse convolution的層數增多,柵格稀疏的性質變的越來越弱。這個問題很好理解,就單對一個不為空的格子而言,經過sparse convolution(其實也就是convolution)的操作,它的影響為卷積核的大小。也就是說,對于convolution的輸出的某個格子而言,只要其感受野內有一個不為空的格子,這個格子就不為空。這樣子,稀疏的性質是以指數的速度減弱的。
針對上述問題,Submanifold Sparse Convolution做法就是對于輸出的某個格子而言,只有其在輸入中的那個對應的格子不為空,這個格子才不為空。Submanifold Sparse Convolution的操作引文中只介紹了stride為1的convolution,經過padding可以做到輸入和輸出的tensor大小一樣。經過Submanifold Sparse Convolution的操作,輸出不為空的格子的位置是與輸入不為空的格子的位置是一樣的,數量也是一樣的。這樣就解決了稀疏性質減弱的問題。
這種操作就與普通的convolution不同了,而是對一些在convolution中輸出中不為空的格子將其強制為空了。
參考:
https://blog.csdn.net/wqwqqwqw1231/article/details/100541138
總結
以上是生活随笔為你收集整理的Part-A2 Net(商汤,港中文,2019.7.8,KITTI)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Renamer给文件名倒序
- 下一篇: 双目相机成像模型