李瑞龍,吳川*,朱明
(1.中國科學院 長春光學精密機械與物理研究所,吉林 長春130033;2.中國科學院大學,北京100049)
隨著自動駕駛技術的發(fā)展,三維目標檢測成為三維場景感知和理解的核心,是車輛與外界信息交互的重要渠道,從而實現(xiàn)車輛與周邊環(huán)境的信息交互,在自動駕駛中扮演不可替代的作用[1]。其中,基于激光雷達點云的三維目標檢測算法從點云數(shù)據(jù)精確的幾何形狀和特征信息預估三維邊界框和類別,實現(xiàn)檢測目標功能。激光雷達具有精度高、探測距離遠、不受天氣光照影響、數(shù)據(jù)穩(wěn)定性強的優(yōu)點,基于點云的視覺感知技術也成為自動駕駛的研究熱點,在三維目標檢測中占主導地位。
點云是目標表面特性的海量點的集合,包含目標場景的立體坐標信息、反射強度、法向量、局部稠密度和局部曲率等特征。由于點云在空間中離散分布,因此具有稀疏性且分布不均的特點[2],不能直接運用處理圖像的方式處理點云數(shù)據(jù),也無法利用傳統(tǒng)算法獲取點云豐富的結構信息和空間語義信息。隨著深度學習在處理點云方面取得突破性進展,現(xiàn)已發(fā)展出很多基于深度學習的三維目標檢測方向,主要分為基于點云的方法和基于體素的方法。
PointNet[3]直接使用點云作為輸入,利用卷積神經網(wǎng)絡有效解決無序點云特征建模問題。使用空間變換矩陣預測網(wǎng)絡學習原始三維點云的空間分布特性,將具有同一特征的三維點云對齊后送入多層感知機提取特征。但是在點云數(shù)據(jù)稀疏時,目標主干點的點云缺失導致無法準確提取全局特征,魯棒性效果較差。PointNet++[4]根據(jù)CNN多層感受野思想,設置不同的鄰域搜索半徑(Ball Query),使用PointNet提取不同尺度范圍的點云特征,再使用多層感知機生成全局特征,最終實現(xiàn)點級特征分類。PointNet++在點云語義分割任務上效果較好,但其鄰域搜索復雜度較高,無法實時處理。PointNet及PointNet++實現(xiàn)了對點云的處理與特征提取,在后續(xù)算法中得到了廣泛的應用。
PointRCNN[5]算法使用原始點云作為輸入,在第一階段,使用PointNet++逐點提取特征向量,將點云分類為前景和背景,再使用多層感知機根據(jù)每個前景點的特征向量生成3D檢測框。在第二階段,將語義特征和局部空間特征結合對檢測框進行優(yōu)化。STD[6](Sparse-to-Dense 3D Object Detector for Point Cloud)在第一階段使用PointsPool將內部點特征從稀疏表達轉換為致密表示,在每個點上使用球形錨框生成準確的三維檢測框。在第二階段通過IoU分支回歸邊界框。結果顯示,STD在精度和速度方面均優(yōu)于PointRCNN。
三維點云空間劃分成的立方體稱為體素,體素能有效表示點云空間。Voxelnet[7]將點云劃分為等間距的規(guī)則體素,使用VFE層(Voxel feature encoder)將每個體素內的點的特征量化統(tǒng)一,再采用3D卷積神經網(wǎng)絡提取點云特征信息,最終使用RPN網(wǎng)絡生成檢測框,實現(xiàn)端到端訓練。
PointPillars[8]網(wǎng)絡通過在鳥瞰圖(Bird’s Eye View,BEV)上劃分網(wǎng)格,實現(xiàn)立柱形式的體素的劃分。通過立柱的劃分,將三維點云空間降維生成鳥瞰圖,借鑒成熟的二維圖像卷積網(wǎng)絡進行特征提取和邊界框回歸,實現(xiàn)端到端的訓練,最終實現(xiàn)62 Hz的運行速度。Voxel R-CNN[9]算法由3D骨干網(wǎng)、2D鳥瞰圖區(qū)域提議網(wǎng)絡和SSD檢測頭組成,利用體素聚合模塊直接從體素特征中提取三維特征,算法檢測速度較慢。
在三維目標檢測算法中,點表示的方法可以保留點云精確位置,算法精度高,但將點云直接作為輸入的計算量較大?;隗w素劃分的方法具有速度優(yōu)勢,但體素的劃分會導致三維特征信息丟失,影響檢測精度。
兩種點云表示方法各有優(yōu)缺點。本文將點云和體素兩種數(shù)據(jù)表示方法結合使用,通過對體素化的點云數(shù)據(jù)進行處理保證運行速度,同時結合點表示的方法聚合點云特征保證準確率,實現(xiàn)了速度與準確率的平衡。
本文提出的Pillar RCNN(Pillar Region withCNN feature)由3個核心模塊組成:(1)基于稀疏卷積的3D主干網(wǎng)絡;(2)2D主干網(wǎng)絡和RPN(Region Proposal Network)模塊;(3)體素RoI多尺度特征聚合模塊。網(wǎng)絡結構如圖1所示。
圖1 Pillar RCNN框架圖Fig.1 Framework of Pillar RCNN
根據(jù)點云場景比較稀疏的特點,本文重新設計了三維子流形稀疏卷積骨干網(wǎng)絡,快速將體素下采樣為立柱形式,生成致密的二維鳥瞰圖信息。再使用PointNet++提取鄰域體素的點云特征,利用聚合模塊對二維鳥瞰圖的特征和鄰域體素特征進行級聯(lián),進行三維邊界框進一步的回歸細化。
三維空間內點云具有無序性。首先將場景空間內劃分為立體體素。對于點云數(shù)據(jù),以車輛前進方向為X軸,左右方向為Y軸,垂直于X-Y平面的方向為Z軸[10],設檢測目標場景在3個軸上范圍區(qū)間為L,單位為m,取LX×LY×LZ=[0,70.4]×[-40,40]×[-3,1],體素大小為rX×rY×rZ=0.05 m×0.05 m×0.1 m,得到目標場景為1 408×1 600×40個初始體素。非空體素內隨機采樣5個點來代表體素,若點云數(shù)量不足5個則重復采樣,初始特征取三維坐標(x,y,z)及反射率rr。體素的尺寸大小直接影響算法運行速度,其中非空體素僅占檢測空間的5%~10%。因為大量不包含點云的體素的存在,體素的稀疏性較強,傳統(tǒng)的三維卷積網(wǎng)絡遍歷體素空間會極大降低模型推理速度,占用大量內存,這既浪費了計算資源,也浪費了內存資源。為克服密集卷積的缺點,本文使用三維稀疏卷積提取體素內點云特征。
為加速普通三維卷積運行速度在S3D-CNN[11](Sparse 3D Convolutional Neural Network)網(wǎng)絡中使用三維稀疏卷積層進行加速運算。三維稀疏卷積層遵循如果沒有相關的輸入點,則不計算輸出點的原則。本文采用三維稀疏卷積對體素數(shù)據(jù)進行卷積運算,卷積范圍內無點云的體素不進行計算,在加速運算的同時減小內存占用。然而,由于存在大量活動點,如有數(shù)據(jù)體素相鄰區(qū)域的無數(shù)據(jù)的體素,以該體素為卷積中心,經過卷積運算后仍會有輸出,導致輸出稀疏度高于輸入稀疏度,后續(xù)卷積層的速度降低。如圖2(a)所示,左圖經過多層三維稀疏卷積后,在中間和右圖的輸出數(shù)據(jù)量逐漸增加。Graham提出子流形三維稀疏卷積[12],在輸入位置處于有數(shù)據(jù)狀態(tài)時,對應輸出位置進行卷積計算。經過子流形稀疏卷積后,稀疏性不變,如圖2(b)所示,對左圖進行子流形三維稀疏卷積后,中間和右圖輸出數(shù)據(jù)大小不變。
圖2 三維稀疏卷積(a)和子流形稀疏卷積(b)運算示意圖Fig.2 Sample images of sparse 3D convolutional(a)and submanifold 3D sparse convolutional(b)
本文設計了一個主要由兩種稀疏三維卷積網(wǎng)絡組成的三維骨干網(wǎng)絡。兩種類型的稀疏卷積塊由稀疏三維卷積塊和子流形稀疏三維卷積塊組成。在三維卷積模塊中,稀疏卷積中步長為2,負責將三維體素進行下采樣,降低三維分辨率。這種稀疏卷積操作會降低數(shù)據(jù)的稀疏性,但可以提取更加豐富的結構特征,同時經過子流形稀疏卷積后,數(shù)據(jù)的稀疏性保持不變。子流形稀疏卷積中步長為1。兩種稀疏卷積模塊后均使用BN和ReLU層,實現(xiàn)數(shù)據(jù)的歸一化,加快學習速度。最終初始體素維度逐步下采樣至150×200×1,快速實現(xiàn)立柱形式的體素。
三維骨干網(wǎng)將體素化的點云信息逐漸轉換為特征體塊,然后將輸出張量沿Z軸疊加生成鳥瞰圖特征映射。二維主干網(wǎng)由3部分組成:兩個標準4層3×3特征提取子網(wǎng)絡和一個多尺度特征融合子網(wǎng)絡,在每個卷積層后進行BN和ReLU運算。第一個特征提取模塊的X、Y軸上分辨率與3D骨干網(wǎng)輸出分辨率相同,第二個特征提取模塊分辨率為上一模塊的1/2,最后多尺度特征融合子網(wǎng)絡將兩模塊的特征進行融合,構建高分辨率的特征圖。最后將二維主干網(wǎng)的輸出與RPN中1×1卷積層進行卷積,生成三維目標預測框和預測類別。
為了更好地從三維體素空間內聚合空間上下文信息,提高算法準確率,使用多尺度體素RoI特征聚合模塊,如圖3所示。將稀疏的三維體塊表示為一組非空體素中心點及對應的特征向量,體素中心坐標通過位置索引、體素邊界計算得來。與無序的點云相比,體素在量化空間中有規(guī)律地排列,方便查詢相鄰體素,例如查詢26臨近體素可以通過索引值偏移{(οx,οy,οz),οx,οy,οz?[-1,0,1]}得到。在體素查詢中采用曼哈頓距離Dα,β計算相鄰體素α=(iα,jα,kα),β=(iβ,jβ,kβ)的距離:
圖3 多尺度體素RoI聚合模塊二維示意圖Fig.3 2D diagram of multi-scale voxel RoI aggregation module
區(qū)域推薦網(wǎng)絡RPN生成的三維檢測框劃分為6×6×6子體素網(wǎng)格,每個子體素網(wǎng)格使用中心點為索引,體素RoI特征聚合模塊將子體素鄰近體素的特征整合到網(wǎng)格點中進行特征提取,沒有直接使用最大池化層(Max Pooling)簡單聚合相鄰體素的特征,而是使用PointNet模塊將鄰域體素聚合為:
vi-gi為一個相鄰體素的位置關系,?i為vi點代表的鄰域體素經過PointNet模塊得到的體素特征,Ψ(·)表示多層感知機。最后再使用最大池化層(Max Pooling)或平均池化層(Average pooling)處理多層感知機輸出的特征。最大池化層能夠減小由卷積層參數(shù)誤差造成的均值偏移,更好地保留紋理信息,效果較好。鄰域內每個體素重復上述過程。利用體素RoI聚合模塊,在每個從3D骨干網(wǎng)的最后兩個階段的體素中提取體素特征。每個階段設置兩個曼哈頓距離閾值對多尺度的體素進行分組。將從不同階段和尺度匯集的特征進行拼接,得到體素RoI特征進行邊界框的精細回歸。
本文將兩種池化層對特征提取模塊的影響進行對比實驗(表1),發(fā)現(xiàn)最大池化層效果較好,故后文均采用最大池化層。檢測模塊將多尺度體素RoI特征作為輸入。首先使用2個多層感知機將RoI特征轉換為特征向量,再分別送入邊界框回歸分支和置信度預測分支。邊界框回歸分支預測三維檢測框與目標真值框的偏差,置信度預測分支預測三維檢測框分數(shù),得到最終檢測輸出。
表1 最大池化層和平均池化層在3D目標檢測上汽車類目標AP40精度對比Tab.1 Accuracy comparison of max pooling layer and average pooling layer in 3D object detection of car AP40 (%)
參數(shù)設置中汽車的檢測框設置為[3.9×1.6×1.56],行 人 檢 測 框 設 置[0.8×0.6×1.73],自行車檢測框設置大小為[1.76×0.6×1.73]。初始學習率為0.01,區(qū)域推薦網(wǎng)絡中使用非極大值抑制(NMS),IoU閾值為0.7,保留100個檢測區(qū)域作為檢測頭的輸入。在檢測階段,再次應用NMS,IoU閾值為0.1,去除冗余預測。本文對多尺度體素RoI模塊設置在三維骨干網(wǎng)絡的最后的模塊3和模塊4上不同作用鄰域閾值進行實驗。經過實驗對比,在三維骨干最后兩模塊中曼哈頓距離閾值均設置為[1,2]、[2,4]。不同鄰域閾值對多尺度RoI特征聚合模塊在3D目標檢測上汽車類AP40效果對比如表2所示。
表2 不同鄰域閾值對多尺度RoI特征聚合模塊在3D目標檢測上汽車類AP40效果對比Tab.2 Comparison of car AP40 effects of different neighborhood thresholds on multi-scale ROI feature aggregation module in 3D object detection(%)
根據(jù)KITTI數(shù)據(jù)集目標框標注信息,可以將目標量化為Gb=(xb,yb,zb,lb,wb,hb,θb)的七維向量,(xb,yb,zb)為 目標框中 心 坐標,(lb,wb,hb)為目標框的長寬高,θb代表目標框在鳥瞰圖上繞Z軸的旋轉角度。在訓練階段,檢測框也量化為Gpred=(xpred,ypred,zpred,lpred,wpred,hpred,θpred)七維向量,參數(shù)意義與目標真值框意義相同,針對類別為汽車的目標,真實框與檢測框IoU閾值大于0.6的視為前景目標框,小于0.45視為背景目標框,介于0.45~0.6之間視為無效框,對網(wǎng)絡學習無貢獻。針對行人和騎自行車的人,閾值選擇為0.35和0.5。目標真值框與前景目標預測框可以編碼為:
根據(jù)邊界框的分類設計RPN損失函數(shù):
式中Npost為前景目標框的數(shù)量,和為分類和目標框回歸分支的輸出,和為真值框分類標簽和目標框。由于數(shù)據(jù)集中的正負樣本比例失衡,雖然網(wǎng)絡采用數(shù)據(jù)增強方法擴展了正樣本,但與檢測框相比比例仍不平衡。類別分類采用Focal loss[13]分類交叉熵損失解決類別不平衡分布問題,具體如式(5)所示:
式中:α為平衡因子,γ為調整因子,ppred為分類預測值。實驗中取值α=0.25,γ=2。回歸目標邊界框時采用Huber Loss,增強對預測邊框回歸的魯棒性。當預測偏差小于δ時,采用平方誤差;當預測偏差大于δ時,采用線性誤差。公式如式(6)所示:
檢測分支得到前景目標框與真值框進行IoU操作后,得到檢測框與真值框的交并比。檢測分支的損失函數(shù)如式(7)所示:
式中IoUi為與真值框對應第i個前景框的IoU,θH和θL分 別 為 前 景IoU閾 值 和 背 景IoU閾 值。本文采用二元交叉熵損失進行置信度預測,回歸損失為Huber Loss。最終損失函數(shù)為:
式中Ns為訓練階段采樣的錨框個數(shù),L(IoUi≥θreg)表示只計算IoUi≥θreg的區(qū)域提案才會導致回歸損失,θreg取0.55。
本文使用KITTI數(shù)據(jù)集評估Pillar RCNN在汽車、行人和自行車上3D目標檢測和BEV目標檢測任務的性能。KITTI[14]數(shù)據(jù)集的點云數(shù)據(jù)通過VelodyneHDL-64E機械式旋轉激光雷達采集??紤]到目標的大小、遮擋和截斷,每個類的對象被劃分為3個不同的難度級別:容易、中等和困難。本文將7 481個樣本分為包含3 712個樣本的子訓練集和包含3 769個樣本的子驗證集,遵循KITTI的官方評估協(xié)議,對3D物體檢測和BEV物體檢測進行評估,汽車的IoU閾值為0.7,行人和騎自行車的人的IoU閾值為0.5,平均精度(AP)的計算作為性能衡量。
本文實驗環(huán)境操作系統(tǒng)為Ubuntu18.04,硬件顯卡型號為NVIDIA 2080Ti,Intel(R)CoreTMi9-9900K CPU@3.60 GHz。實驗程序基于Pytorch1.3框架編寫,Python環(huán)境為3.6。
本文通過數(shù)據(jù)增強策略生成更多的目標樣本訓練模型。首先根據(jù)SECOND[15]中的方法,從訓練數(shù)據(jù)集中收集目標樣例,包括標簽、三維真值框和框內的點云。對于子訓練集中的場景,隨機選 取其他場景15、10、10個汽車、行人和騎自行車的人的數(shù)據(jù),融合到訓練數(shù)據(jù)中。同時,所有的目標真值框和相應的點云分別圍繞Z軸旋轉,并沿著X、Y、Z軸平移,旋轉角度沿φ[-π20,π 20]均勻分布,平移量服從高斯分布μ[0,0.25]。如果背景點與目標三維真值框沖突,移除背景點。最后整體場景隨機全局旋轉,旋轉量服從φ[-π 4,π 4]均勻分布,沿X、Y、Z軸按照高斯分布μ[0,0.2]隨機全局平移,按照φ[0.95,1.05]均勻分布隨機縮放。
Pillar RCNN在KITTI訓練數(shù)據(jù)集訓練120個epoch,在驗證集進行自動評估,采用平均精度(AP11)進行比較,實驗結果如圖4所示,檢測結果投影到對應圖像和點云中。
圖4 三維檢測效果在圖像和點云中的投影圖Fig.4 Projection of 3D detection effects in images and point clouds
實驗結果通過與基于雷達數(shù)據(jù)的PointPillars、PIXOR[16]、VoxelNet、SECOND、Voxel R-CNN
和基于點云和圖像融合的MV3D[17]等經典網(wǎng)絡進行對比(上述網(wǎng)絡性能來自文獻),最終在三維檢測和鳥瞰圖上的實驗結果如表3、表4所示。
表3 KITTI測試數(shù)據(jù)集3D目標AP11精度對比Tab.3 Performance comparison on the KITTI test set with AP calculated by 11 recall positions of 3D object(%)
表4 KITTI測試數(shù)據(jù)集BE V目標AP11精度對比Tab.4 Performance comparison on the KITTI test set with AP calculated by 11 recall positions of BEV object(%)
Pillar RCNN在3D目標檢測上效果較好,在檢測精度和速度上取得了較好的平衡。3D目標檢測經過體素RoI特征模塊匹配,相較于PointPillars檢測性能在3個類別上均實現(xiàn)了明顯提升,其中自行車和汽車兩種類別的3D檢測類別提升效果明顯,自行車類的中等難度提升13.34%,汽車類別中困難難度提升了8.85%。在汽車類別上檢測精度在Voxel R-CNN上效果較好,中等難度比Pillar RCNN高0.91%。表3為3D目標檢測的AP11精度對比。Pillar RCNN在各項檢測任務上相較于其他網(wǎng)絡均有不錯的提升,算法實時性與性能取得平衡。但PointPillars在檢測速度上具有明顯優(yōu)勢。PointPillars在劃分體素階段直接把檢測空間劃分為立柱形式的體素,沒有使用三維卷積和體素RoI模塊,且PointPillars經過NVIDIA TensorRT模塊加速,算法速度優(yōu)勢明顯。TensorRT加速模塊不支持稀疏卷積,但在Pytorch原始框架測試Pillar RCNN仍取得了40.3 Hz的檢測速度,驗證了Pillar RCNN算法的性能。
Pillar RCNN在目標檢測上對于大目標檢測效果較好,對行人類別檢測效果不具有優(yōu)勢。因為設置體素尺寸較大,經過三維骨干網(wǎng)絡8倍下采樣,行人目標區(qū)域在致密的二維空間中占不超過兩個像素點,目標較小,因此在目標檢測中對于行人等小目標檢測效果較一般。
本文研究了基于立柱體素三維目標檢測算法在點云場景中的應用。針對點云稀疏性,重新設計了稀疏三維卷積主干網(wǎng)絡提取特征,能夠快速將三維體素量化為二維致密區(qū)域特征,同時避免了直接劃分立柱體素丟失三維空間信息的缺點。經過多尺度體素RoI特征聚合模塊實現(xiàn)特征融合后,進一步細化邊界框檢測三維目標,提高了檢測精度。Pillar RCNN使用稀疏卷積降低傳統(tǒng)三維卷積的計算冗余,提高了算法檢測性能。在KITTI數(shù)據(jù)集上的實驗表明,Pillar RCNN實現(xiàn)了速度與檢測精度之間的平衡,在3D目標檢測任務上進一步提升了三維檢測算法性能。