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