作者:蔣天園Date:2020-04-16
Brief
來自CVPR2020的研究工作,也是僅僅使用Lidar數據進行3D檢測的文章,CVPR2020接收的幾篇文章中,采用LiDar作為網絡結構輸入的已經已經多於采用圖像和lidar的結合,從一方面講,lidar數據由於包含了現實場景中的幾何結構而比雙目信息包含更加精確的信息。同時受到的外界條件的影響也相應的越小。
這是一篇來自港理工和阿里達摩院的合作文章
文章鏈接:http://www4.comp.polyu.edu.hk/~cslzhang/paper/SA-SSD.pdf
代碼鏈接:https://github.com/skyhehe123/SA-SSD
核心創新與主要內容
本文核心創新是想要將二階段方法獨有精細回歸運用在一階段的的檢測方法上,為此作者采用了SECOND作為backbone,添加了兩項附加任務,使得backbone具有structureaware的能力,定位更加准確;此外在一階段中存在預測框和clsmaps之間不匹配的問題,本文也設計了一種策略解決這個問題。

Abstract
1.3D檢測中的onestage的檢測方法都是通過卷積逐步縮小fea-map,沒有上采樣過程,這樣會導致空間信息的丟失,無法用幾何結構,對定位精度降低比較明顯.
-
20年前的one-stage的方法都是voxel-based的方法,主要思想都是場景體素化、3D卷積(稀疏卷積)降低到二維,再采用二維 RPN head,拿SECOND1.5舉例,整個過程是從1280*1080*40到160*13*21的逐步向下卷積的過程。
-
20年的另外一片CVPR 3D-SSD則是第一個point-based 的一階段的檢測方法,同時是anchor-free的。
2.本文中心在通過深度挖掘三維物體的幾何信息來提高定位精度。
以前的研究工作都是point to tensor的,而這里作者為了將卷積得到的信息用點結構表達,設計了一個auxiliary network,用於將Tensor信息轉化到point上,因為piont實際上是還保留着原始的幾何結構,這里作者可能是想將語義信息和細節信息融合。
3.這個輔助網絡和backbone是一同訓練的,引導backbone感知object structure
這一點和pointnet的兩個輔助網絡也挺像的,pointnet中的作用是使得網絡可以感知問題的剛體變換。
4.輔助網絡在推理階段不參與運算,可以和主干網絡分離,因此不會增加額外運算量
5.作者提出第二個問題是:一階段的方法會在cls置信度和對應的預測框之間存在不一致的問題,所以本文提出了一個方法將置信度和bbox對齊。
Introduction
auxiliary network
這是作者提出的解決的第一個問題,如下圖的對比中,(a)圖是SECOND檢測出的bbox,可以看出在object 點比較少的時候雖然也可以檢出,但是對應的框的定位效果就不如本文提出的(b)的實驗效果。

這一問題僅僅在One-stage的檢測方法中會出現,因為two-stage第一步提出proposals后,在第二步會精細的在fea map上進行精細的回歸,所以在19年ICCV的文章主要的研究點則是 onestage的方法轉two-stage,精度也是有很大的提升。但是不可避免的在時間消耗上增大,這也從側面驗證了利用細粒度信息對精細回歸的重要性。
所以本文作者的核心第一個問題是將二階段使用的精細回歸的細粒度信息如何附加到一階段信息中,也就是作者提出的如下的網絡結構,可以看的出來作者的核心創新點在下面的auxiliary的網絡結構中。該結構可以監督上層的tensor表達的學習到點雲中的幾何結構信息。

該附加網絡結構做了如下幾個操作:
1.將feature 轉化到point的上,得到point-wise的特征信息
2.前景分割,目的是使得該網絡結構對邊界敏感,同時point-wise的特征估計object 中心加大內點感知能力。
feature map warping method
這就是作者提出的第二個問題,在one-stage的方法中,由於沒有精細的回歸會導致最后分類時得到的分數不太好,這會影響后續的NMS工作,因此作者設計了一個Align的方法,使得輸出的分類置信度更具有可信度。
前人研究
One -tage approaches
一階段的方法從Voxelnet開始后續很多工作都是一階段的,SECOND ,PointPillars都是經典的一階段方法。
Two-stage approaches
兩階段的方法可以從point-based和voxel-based的方法上進行分說。除去CVPR20的3D-SSD這篇文章,之前的基本所有的Pointbased的方法都是多階段的,其中比較出名的工作有CVPR18的F-pointnet,這篇工作是先通過二維檢測得到檢出的目標,再通過視錐投影到三維點雲中,最后采用pointnet的變體結構進行定位和分類,實際上算作是三階段的方法;后續的IROS19的F-ConvNet在F-pointnet的基礎上將投影出來的視錐中的點雲根據距離划分為多個序列。在同年的CVPR19上Point-Rcnn也是point-based的目標檢測方法,不過是Lidar-only的方法,以每一個點為anchor預測和回歸目標框,計算消耗比較大。針對Voxel-based的方法,在19年上后半段有挺多著名的工作,Fast-Point-RCNN,STD,PartA^2等等工作,也就是在前人的單階段的基礎上加入了refine的網絡模塊,進一步優化了定位。除此之外,融合圖像信息和Lidar信息在19年及之前是很流行的,不過最新的方法幾乎都是LIDAR-only的方法了,比較近的有AAAI20的PIRCNN,這一篇也是一個兩階段的方法,通過lidar預測出的框和圖像特征融合做二階段的回歸。
Auxiliary task learning
1.這個子話題的主要思想是:通過附加任務使得backbone具有某種特征傾向的能力。作者在本文中添加了兩個point-wise prediction tasks目的是提高3D檢測的結果,如上圖展示的那樣,增加了前景分割和中心預測兩個任務;但是本文的附加任務在推理階段是可以被舍棄的,不增加額外的計算量。
2.Point-wise feature representation
如上圖所示的那樣,本文中需要把Backbone的tensor特征轉化到point為載體上,表示坐標為 的點的特征為,由於在最開始原始點雲轉化為tensor輸入時會丟失一些局部點(后文講到),所以從tensor-到point時是一對多的特征,如果采用retrail的方式,那么相鄰點的特征都是一樣的,作者這里采用的是FP層,即是插值的方式,表示為經過FP層的特征信息,采用以下公式得到插值后的特征:

其中:

從上式插值的方式可以看出,采用距離作為權重進行加權。這里的設置為0.05的球體,這也和后面的point到tensor的設置對應,采用的是(0.05,0.05,0.1)的尺度划分voxel。最后再將多層voxel到point的特征concat一起。
3.Auxiliary tasks
前景分割任務監督loss:

Where

如上式的表達式,采用的為focal loss.
object中心預測loss:如上式采用的是smooth-l1損失函數,對殘差進行回歸。
網絡結構
Backbone
1.input representation
以前的onestage的方法采用對整個場景進行volize化,但是這個過程是一個很消耗時間的,作者為了簡化這個過程,采用了如下的方法:
輸入的點雲可以表示為
,為了量化點雲,作者假設點雲場景的單位長度為
,所以量化后的點雲輸入為:
這里表示的是向下取整。並且如果遇到不同的點采用了同樣的索引,那么更新為最新的輸入就可以了,在實驗中作者設置的尺度大小為d=[0.05m,0.05m,0.1m]

![d=[d_x,d_y,d_z ]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1kJTNEJTVCZF94JTJDZF95JTJDZF96JTIwJTVE.png)

和SECOND1.5后我們知道,SECOND1.5是采用的尺度信息也是這么大,不過SECOND架構為了實現更多的框架,設置的在每一個voxel中最大的點個數只有5,就類似本文中作者設置1一個意思。在SECOND1.5中對每一個voxel實際上也沒有沿用VoxelNet中的那樣采用MLP進行特征提取,而是直接取平均值;所以本文作者這樣做實際上效果是一樣的,只是預處理會更快。
2.Network architecture
本文作者的backobne實際上和SECONDE的一脈相承,不過本文作者在to point的表示上的時候采用的multi-level特征連接,采用稀疏卷積到BEV feamap,最后也采用標准的二維卷積預測最后的anchor,本文采用的是ancor_based head。
3.Auxiliary
也就是在前文中筆者提到的兩個問題,第一點,目前的onestage的方法一直下采樣會導致空間信息的模糊和丟失,會導致后面的detection過程的定位不准,這里如下圖中的含義,其中a表示最原始的bbox,背景點和前景點;通過多次卷積stride過程會導致如圖(b)所示的問題,有些比較偏遠的前景點特征融合為了背景信息。作者針對第一個問題提出了輔助網絡,將從Muti-level的voxel特征融合在監督訓練,使得backbaone的網絡結構具有structureaware的能力。下圖中的圖©表示的是在添加了前景分割的附加任務,但是不添加中心點預測的檢測結果,進一步的圖(d)表示添加上述兩項附加任務后的檢測結果。

4.Part-sensitive warping
這里是為了解決作者所提出的第二個問題,the misalignment between the predictedbounding boxes and corresponding confidence maps。這也是one stage 都會存在的一個問題。具體操作如下:
(1)首先修改分類的最后一層用於生成K個 part-sensitive 的 cls maps,記做
,這里邊的每一塊包含着object的部分信息,例如K=4時的信息可以理解為{upper-left, upper-right, bottom-left,bottom-right},同時對Bbox的每一個fea map 都划分為K個子窗口,並且選擇每個窗口的中心為采樣點。這樣作者就得到了K個采樣的格點記做
,分別對用這上述的clsmap。


(2)步驟(1)中的得到的cls map和格點一同送入PSWarp結構,如下圖,該sampler的輸出是格點對應的cls map的特征

(3)最終的輸出是多個采樣后的cls maps的平均值
損失函數
本文采用的是anchor -based的方法,其損失函數和以往的voxel-based的方法一致,只是多了上述提到的附加任務的兩項損失。如下:

實驗
實現細節
筆者只提一下本文使用的數據增廣方案,也是采用的先將所有object收集起來再隨機變換后放置在訓練集中,都是源自SECOND的方法。

附加任務參數影響
上文中的總損失函數的權衡參數對整個實驗的影響如下:

precision-recall
在KIITI的test數據集上,作者畫出了對應的精度-召回率曲線(在KITTI官網上有)

消融實驗
作者本文中主要有兩點創新,分別是附加任務(前景分割和中心預測),cls和box匹配的PSWarp,作者做了如下的實驗:
