作者:蔣天園Date:2020-04-11
前言
這是一篇來自CVPR2020的研究工作,於2020/4/9日開源,如下圖所示,目前被接收的文章有在KITTI上的有四篇,分別是PV-RCNN,SA-SSD,Point-GNN和這一篇文章,應該說pvrcnn在精度上是獨樹一幟的遠高於第二名的,不過這些文章在創新性上也是非常值得研究的這一篇來自港中文和港科的研究工作,賈佳亞組在3D檢測方向有很多值得深入思考和研究的文章,之前的諸如Point-rcnn, FastPoint Rcnn,STD都是這個組的工作,同樣厲害的還有MM-LAB,出了PVRCNN ,Part^A等工作。
paper:https://arxiv.org/pdf/2002.10187.pdf
code:https://github.com/tomztyang/3DSSD
本文主要內容概括
本文主要從point-based的研究入手,考慮如何解決掉以前的point-based的方法的瓶頸,即時間和內存占有遠遠大於voxel-based的方法,從而作者設計了新的SA模塊和丟棄了FP模塊到達時間上可達25FPS,此外本文采用一個anchor freeHead,進一步減少時間和GPU顯存,提出了3D center-ness label的表示,進一步提高的精度。可視化效果如下:

摘要
1)目前基於LIDAR點雲輸入的3D檢測深度學習網絡主要分voxel-based和point-based兩大類,其中voxel-based的方法已經有了一定的發展,但是point-based方法沒有得到很好的發展。
1. 基於voxel的方法的發展:CVPR18的voxelnet是voxel-based方法的開山之作,但是當時voxelnet由於3D CNN的使用導致很大的顯存占用,18年sensors的ECOND引入了稀疏卷積使得內存占用大大減少,同時該文引入了一個從標注集合sample的數據增廣方案,次年的CVPR19的pointpillars則是直接將voxel改進為pillar直接跳過了3D卷積這一步驟,后續的19年ICCV則是將基於voxel的方法的參數優化(由於稀疏卷積的引入,使得更小的voxel可以被使用)以及改進為兩階段的方法fastpointrcnn,其中STD是直接將體素划分改為了球體划分(具有更好的方向性)。同樣的19年的NIPS的文章有開始考慮從整個場景中粗略的先注意到大致的object,再對該場景進行划分。該類的方法的核心思想就是把點雲的無序性通過體素划分使其規整,但是不可避免的會有信息丟失。
2. 基於Point的方法比較難以解決的是場景點雲的無序性問題,19年的CVPR的Point RCNN是一篇完全基於點做的3D目標檢測方法,但是該方法采用的anchor設置是對每一個場景點都會認為是,會造成很大的冗余,后續再次基礎上延展性不是很大。
3. 當然19年還有很多好的工作,比如CVPRW19中有文章采用RNN+attention的方式將大場景的點雲裁縫后再送入RNN結構中,還有一些從小處入手的工作,將二維目標檢測的IOU Loss引入到三維點雲結構中;由於稀疏卷積的引入,將子流型卷積和3D稀疏卷積結構融合設計的3D backbone等等;為了提升效率,將voxel和point方式結合的方法等等
2)本文提出的3D-SSD是一個綜合利率和精度的one-stage的目標檢測框架。
作者這里提出觀點,如果要point-based的方法提高效率,就必須要要改進或者丟掉耗時很久的上采樣(PointNet++中的FP模塊),因此作者的做法是設計了一種采樣策略,通過下采樣得到的少數點去預測detections也成為可能。
3)作者為了實現采用point-based的方法,同時又能兼顧精度和效率,設計了candidate generation layer和anchor-freeregression head以及3D center-ness assignment strategy。
4)這是一個 onestage anchor free的目標檢測方法,比所有的 voxel-based的但階段檢測方法效果都要好,能達到25FPS。
這里值得一提的是,在3D目標檢測中,稱第一個anchor-free的文章應該是OHS,也是19年底的一個工作,它采用的方法類似part(作者文章中稱為hotspots)去預測detection。
背景及前人研究
文章首先介紹了3D檢測的應用,之后是目標的2D方法取得了很大的發展,但是在3D上並不能直接套用2D的檢測方法,這是因為點雲的稀疏性和無規則性。
1. 為了解決上訴提到的點雲的稀疏性和無規則性帶來的挑戰,一些方法開始采用將點雲投影到圖像中,這樣就能得到密集的表達形式。
-
這類文章出現在17-18年的工作比較多,包括有CVPR17的[1],采用MV融合的方法;而后在18年的CVPR上將深度學習完全引入點雲檢測中,開創了voxel-based方法的先河的voxelnet[2],這是一篇非常經典的voxel-based文章,目前已有500的引用,后續的很多工作都在此基礎上發展的。
-
上訴的voxel-based方法盡管很高效,但是在划分體素過程中不可避免的會造成信息的丟失,這一點在MMLAB CVPR2020的文章PVRCNN中采用pointnet的可變感受野來減少信息丟失。
2. 上訴的方法都是優先考慮怎么把LiDar數據先規整化,但是point-based方法是直接在每一個點上預測得到對應的Bbox,一般會分為兩步,第一步是通過SA模塊(出自 pointnet++)和下采樣提取contextfeature,然后是通過FP(也是pointnet++模塊)將全局特征上采樣傳遞給那些沒被采樣到的點,采用的方式是反卷積,再然后通過RPN網絡得到proposals;第二步是refine,在proposals的基礎上優化得到最后的detections
3. 本文的突出貢獻點
-
這是一個 One-stage anchor free的方法。
-
提出了下采樣融合策略F-FPS和D-FPS,目的是替換點上述的FP模塊,使得計算損耗大大減少。
-
在KITTI上和NuScence上的實驗效果很好
4. 大體結構
在SA模塊后,作者設計了CG層(candidate generation )整合局部信息;在CG層中,作者首先將representative points生成候選點,候選點的生成由這個代表點的和該點對應的object的中心坐標值的監督訓練;接着作者將這個候選點當做為中心,再從F-FPS和D-FPS的集合點中找到他們的周圍點,最后采用MLP提取他們的融合特征。這些特征最終會被送入到一個anchor free head中來預測最后的3D bbox。
網絡結構
1. Point-based方法的瓶頸
▲瓶頸1——FP層的丟棄與保留
以往基於點的檢測方法通過SA模塊可以得到context features,但是僅僅只有采樣的點才會有這些特征,沒有被采樣的點就沒有特征,因此需要FP模塊將這些特征傳遞給沒有被采樣到的點,作者給出了如下的表格:

-
這里的SA采用了4層SA layer(標准Pointnet++設計),FP是4層FPlayer,同時refine 模塊是3層SA layer
-
這里的FP模塊似乎占比並不大,但是如果將FP去掉,肯定是能降低計算損耗的,同時本文的研究為一階段的方式,后續的優化模塊也是不存在的。
因此作者的想法是將FP層丟掉來降低運行時間,首先最容易想到的設計方案是直接采用SA最后剩下的采樣點進行預測,但是由於前人的采樣是D-FPS,也就是歐式距離的最遠點采樣,就會使得采樣點中很多的背景點,僅僅靠僅存的幾個前景采樣點預測出結構幾乎是做不到的,所以直接丟棄不做任何處理是不可行的。作者在NuScene給出了統計出的對比結果:

從表格中我們可以看出,采用D-FPS的采樣方法,如果采樣點為512個時,object的內點占比僅僅只有一半了,是很不足夠的(比筆者想象的多一些),但是如果選用F-FPS(特征空間采樣),那么效果會好一些。
總結一下,FP層如果保留,那么會保留很大的時間消耗,以致於和voxel-based的方法比較起來沒有任何優勢,如果直接丟棄,會造成很大精度損失。
▲作者的改進——F-FPS
前人采用的D-FPS算法是在歐式空間中進行的最遠點采樣,並不會考慮到該點的任何屬性特征;作者因此引入了F-FPS,在語義信息的引導下,能夠排除大量的背景點信息,保留更多的前景點信息。但如果僅僅只使用FFPS,會保留很多同一個object的點,也會導致精度下降,因此作者同時考慮了歐式和特征空間的采樣信息。

因此作者采用上述的綜合采樣方法。正如上表的采樣結構顯示得到了一定的效果提升。
▲瓶頸2——F-FPS導致分類分數下降
作者指出,盡管采樣使用F-FPS可以提高前景點中的占比,這對回歸是很有幫助的,但是背景點過少的時候對分類是不友好的,在后面的消融實驗中也可以看出,盡管F-FPS能提高回歸得分,但是對分類卻分數不如D-FPS的方法。為解決這個問題,作者采用混合采樣的設計,如果最終采樣點個數為個,那么其中的個點分別采用的是上述的D-FPS和F-FPS的采樣法。
2. bbox預測網絡
▲CGLayer
前人的研究工作都是在得到每個點的feature后,接上三層的SA layer,分別用於中心點選擇、周圍點特征提取以及生成語義信息。但是本文作者為了進一步降低計算成本,候選中心點的生成是直接在F-FPS采樣后進行的,如下圖所示,可以看的出來,F-FPS采樣的點由於比D-FPS的點更加可能是前景點,所以后選點僅僅只是在F-FPS的點上生成,也就是candidate points;接着作者將這些候選中心點當做CGlayer的中心點。(作者在這里挖坑表明不采用采樣點作為CGlayer的中心是考慮了最終的性能,在后續會提及到);同樣的下一步則是根據候選中心點領域選擇從F-FPS和D-FPS中采樣得到的代表點進行局部特征提取,采用MLP進行特征提取。

▲Overall Structure

從如上的結構圖可以看出上面提及到的作者設計的結構:
1.SA layer
-
前人的SA layer都是按照pointnet++文章中的那樣設計,但是本文的SA正如前面提到的融合的歐式空間和特征空間的采樣方法,並且各自采取一半的點,然后多個SA模塊組合就可以得到這樣的backbone。
-
這里根據數據集的不同,在backbone的設計層數也是不同的,作者給出了在KITTI和Nuscence上的結構如下,看的出來NuScene場景更復雜。
2.CG layer
這一層的目主要是:
-
得到候選中心點
-
通過候選中心點整合周圍采樣點提取語義信息
3.Prediction Head
如上圖,回歸和分類
▲Anchor-free Regression Head
前面的overall structure中的第三部分的回歸網絡結構。作者首先指出假設本文采用anchor-based的方法的話,每增加一個類別,則需要在全場景增加不少的anchor。再考慮到方向旋轉性,就更多了。
插入一點,在3D檢測網絡中,都是按照預先設置的object級別的大小anchor,在全場景中每隔一段距離就設置一個anchor,同時每個anchor有幾個不同的朝向。就是說,每增加一類的物體,計算量就是線性增加的。
考慮到上面的計算量,作者采用的是anchor free的head,回歸的也是一樣的七個量,這里需要指出的是通過點預測是沒有預先設置朝向的,因此作者采用分類和回歸的混合表達式。
4.3DCenter-ness Assignment Strategy
在二維中,label分配的方法有采用IOU閾值,mask這兩種方法;FCOS這篇文章將二值的pix label擴展為連續性的label,越是靠近object中心的pix所得到的分數也就設置越大;在3DLidar數據上,由於點雲數據都在物體的表面,因此他們的center-ness都非常小並且接近的,這會導致從這些點不太可能得到好的預測結果。這里也就是前面為什么不用原始的采樣點作為候選點當做CG layer層輸入的中心,而是從F-FPS采樣后再朝向object中心靠近后的點作為候選點,因為靠近中心的候選點可以有更加接近和更加准確的結果,同時根據center-ness label可以輕松和object的表面的點區分開。
作者采用定義center-ness label通過兩步:
-
首先確定該點是否在一個object中
-
通過畫出object的六面體,然后計算該點到其前后左右上下表面的距離,再通過以下公式得到其對應的center-ness值。
3.損失函數
全部損失函數分為分類損失、回歸損失和偏移損失(這個是指從采樣代表點到候選點得到時的損失函數)

上式的表示所有候選點的個數,表示為候選點中前景點的個數。
1.其中分類損失函數采用的是交叉熵損失函數,其中分別表示預測得分和center-ness 分數。2.回歸loss中分為下面幾部分:
-
距離回歸,即是中心點坐標的回歸,采用smooth l1函數
-
size回歸,即是回歸bbox的l,w,h,采用smooth L1函數
-
角度回歸,回歸偏航角yaw,角度回歸也分為兩部分,第一部分是分類,第二部分是殘差回歸,如下:

-
角點損失,corner loss,即是八個角點的損失函數,如下,其中 分別表示對應的預測的角點坐標

3.shifting loss 偏移損失函數是在CG layer中被監督訓練,即預測候選采樣點到object中心點的殘差,采用smooth L1損失函數。這里是 表示F-FPS采樣到的postive的候選點的個數。
實驗
1.KITTI
一些實現細節:
-
隨機采樣到16384個點輸入
-
為了防止過擬合,作者采用了四中數據增廣,分別是mix-up策略(SECOND的作者提出過這個解決方案),對每一個標注框有隨機旋轉和平移,第三,沿着x軸隨機尺度變化。第四,全場景點雲沿着z軸隨意旋轉。
-
最近有一篇文章有研究過數據增廣在3D檢測中的應用
實驗結果:

2.nuScenes
這個數據集是19年CVPR推出的新的自動駕駛數據集,有着更大的場景和更復雜的分類任務,每一幀有超過4w個點,其中有一些關鍵幀,前人的方法都是將關鍵幀和隨后的0.5s的幀結合以致於超過40w個點來做目標檢測(最近有一篇通過點雲流的方式做3D目標檢測的文章[4],而且已經開源),這對於point-based的方法來說就是災難。
值得一提的是,19年提出的數據集nuScence目前還有很多值得可做的,之前有一篇采用class balance loss的方法做到了nuscence的榜首,目前也已經開源,不過此時改了名字叫det3D的這樣一個架構,該架構也已經集成了很多的sota的方法。
3.消融實驗
-
融合采樣方法
-
shifting in CG layer
-
point-based的方法的時間對比
推薦閱讀文獻
[1]Multi-view3d object detection network for autonomous driving.
[2]Voxelnet:End-to-end learning for point cloud based 3d object detection
[3]Fcos:Fully convolutional one-stage object detection
[4]LiDAR-based Online 3DVideo Object Detection with Graph-based MessagePassing and SpatiotemporalTransformer Attention