彭育輝,鄭瑋鴻,張劍鋒
(福州大學機械工程及自動化學院,福州350116)
基于車載激光雷達的感知系統(tǒng)是無人駕駛技術中主要的汽車“視覺”方案[1],其首要任務是對道路障礙物進行檢測,即準確地估計出不同三維目標物體的類別和位置。由于三維目標物體的復雜性,導致其算法呈現(xiàn)出多樣性。近年來,基于深度學習的處理算法在三維物體特征提取方面表現(xiàn)出了優(yōu)異性能,受到了國內(nèi)外研究學者的普遍關注。
基于深度學習的三維目標檢測主要通過間接、直接和融合等手段對激光雷達獲取的三維點云數(shù)據(jù)進行處理。間接的手段主要將點云先做“體素”化處理[2-5],再投入深度神經(jīng)網(wǎng)絡進行訓練學習。蘋果公司提出了VoxelNet[6]特征學習網(wǎng)絡(feature learning network),將點云通過體素特征編碼(Voxel Feature Encoding,VFE)作張量化處理,再投入?yún)^(qū)域候選網(wǎng)絡(Region Proposal Networks,RPN)進行訓練及驗證;還可通過加入反射強度因素對 VoxelNet 作改進[7],如 Yan 等[8]加入稀疏卷積網(wǎng)絡后,提出了稀疏嵌入式卷積檢測網(wǎng)絡(Sparsely Embedded CONvolutional Detection,SECOND)模型。直接的手段則是把原始點云數(shù)據(jù)原封不動地投入設計好的深度神經(jīng)網(wǎng)絡進行訓練學習[9-10],如 PointNet[11]直接將原始點云投入深度神經(jīng)網(wǎng)絡進行訓練。但當訓練數(shù)據(jù)集出現(xiàn)破損時,網(wǎng)絡的識別能力將下降[12]。將多尺度網(wǎng)絡與PointNet 結合也可以提高網(wǎng)絡的局部特征提取能力[13],如后續(xù)提出的 PointNet++[14]能通過學習獲得點云的區(qū)域特征;以YOLO(You Only Look Once)[15]的加強版本 YOLO v2[16]為基礎的 Complex-YOLO[17]和YOLO3D[18]直接對點云進行訓練學習,目標識別速度快。二維目標檢測的技術已十分成熟,可以做到精確地識別行駛過程中遇到的車輛[19]。融合的手段以點云數(shù)據(jù)為主、圖像數(shù)據(jù)為輔的方式進行目標檢測,目標識別平均精度比前述的兩種處理方法要高,但是對硬件的要求也高[20-22]?;赑ointNet和改進后的PointNet++,文獻[23]中針對目標障礙物識別提出了Frustum PointNets,其思想是先在圖像中檢測出障礙物及位置,再將對應位置的點云利用PointNet++進行檢測識別;百度公司聯(lián)手清華大學提出了MV3D(Multi-View 3D networks)[24],將高清圖像與點云分別處理,再將檢測的結果經(jīng)過池化處理得到最終檢測結果。
上述算法為無人車感知系統(tǒng)的障礙物檢測與識別提供了重要的參考依據(jù),但是仍有許多問題亟需解決。大部分算法都是直接使用原始的點云,將采集的誤差也引入了參數(shù)中,如基于PointNet 的算法、基于YOLO 的算法等;在設計深度神經(jīng)網(wǎng)絡時,僅僅做卷積計算,忽略了卷積帶來的數(shù)值偏移,如VoxelNet中的中間層和RPN 模塊。本文嘗試采用統(tǒng)計濾波算法將原始點云進行過濾,剔除離群點,優(yōu)化待處理點云數(shù)據(jù);通過添加最大池化層,減小卷積偏移誤差,有效降低模型的過擬合,同時保證點云數(shù)據(jù)幾何信息的不變性。
首先,利用統(tǒng)計濾波算法將原始的三維點云數(shù)據(jù)進行過濾,剔除離群點,減小離群點帶來的誤差,并對比過濾前后點之間的平均距離;其次,優(yōu)化VoxelNet 的特征學習網(wǎng)絡,進行點云數(shù)據(jù)的編碼,使數(shù)據(jù)張量化;再者,對RPN 添加最大池化層,改進RPN 的檢測性能,改善算法的檢測精度;最后,通過多次實驗分析,探討以往算法的不足之處,體現(xiàn)數(shù)據(jù)預處理和最大池化對目標檢測算法的重要性?;谌S點云的道路障礙物檢測方法的總體框架如圖1所示。
圖1 道路障礙物檢測方法的總體框架Fig. 1 Overall architecture of the proposed on-road obstacle detection method
在汽車無人駕駛場景下,基于深度學習的三維目標檢測的主要對象是車載激光雷達掃描并采集得到的點云數(shù)據(jù)。目前業(yè)內(nèi)有許多成熟完備的點云開源數(shù)據(jù)庫,如悉尼城市目標數(shù)據(jù)庫、KITTI 數(shù)據(jù)庫[1]、Apollo Scape 自動駕駛數(shù)據(jù)庫等,為研究學者提供算法訓練及驗證的數(shù)據(jù)支持。KITTI 數(shù)據(jù)庫數(shù)據(jù)豐富,目標類別標注完備,涵蓋行車過程中所需檢測的目標物體,如車輛、行人、騎行者等,特別是不同類型車輛的數(shù)據(jù)可以滿足車輛檢測算法訓練,所以本文選擇以KITTI 數(shù)據(jù)庫的三維點云數(shù)據(jù)作為研究對象。
點云在KITTI 數(shù)據(jù)集中以二進制的形式儲存,根據(jù)協(xié)議轉化,可以得到目標物體外廓形態(tài)的紋理信息,即空間無序點三維坐標以及每一點對應的強度值。三維點在三維幾何空間中是離散且獨立分布的,在處理點云過程中應該保證點云中每個點的空間無序性、特征局部性和旋轉不變性。若將具有t個點的某個點云樣本直接輸入算法模型中訓練,則輸入矩陣的行的排列將有t!種可能性,不僅增加了算法的復雜度,而且會降低算法的魯棒性,最終導致算法效率的降低。點云中的點雖然在空間中呈獨立分布的狀態(tài),但是鄰近點之間存在必然的空間位置關系和幾何拓撲特征。若能有效地提取出某區(qū)域點云的幾何特征,即可檢測出該區(qū)域內(nèi)點集所表示的目標物體。將得到的點云通過所設計的算法中進行訓練,對點集中每個點進行平移或旋轉變換計算時,不應改變點之間相對的位置關系。
激光雷達對目標物體的掃描采集時,存在著硬件上或軟件上的誤差,使得某個點集區(qū)域上某個位置上點的三維坐標產(chǎn)生偏移,出現(xiàn)了離群點。離群點的產(chǎn)生對算法模型的訓練會造成一定的干擾,可能會產(chǎn)生多余的特征信息,影響算法的準確性,甚至使算法模型訓練達不到全局最優(yōu),或跳不出鞍點。所以,有必要剔除點集中的離群點,對點云進行預處理。
點云的每個點在笛卡爾坐標系下,以x、y、z三維坐標形式存在。假設某個點云樣本為:
式中:t表示樣本中點云中點的總個數(shù);pi表示樣本D中無序點,只取每個無序點的x、y、z三維坐標。計算點pt的距離閾值davg:
式中:k為點pt的鄰近點個數(shù);d(pt,pj)為點pt與其鄰近的k個點之間的歐氏距離為閾值系數(shù);dstd為點pt與其鄰近的k個點之間的距離標準差。若某點與點pt的距離大于davg,則判定為離群點,將其剔除出點集。圖2(a)為點云樣本的初始視圖,存在較為雜亂的離群點,點集分布不均;圖2(b)為數(shù)據(jù)預處理后的視圖,局部區(qū)域的點分布較為均勻,能為后續(xù)的訓練提供更好的數(shù)據(jù)支撐。
圖2 點云預處理前后對比Fig. 2 Comparison of point cloud before and after pre-processing
將每個點與其k近鄰點之間的距離求平均,得到各點的平均k近鄰距離,如圖3 所示。數(shù)據(jù)預處理前的原始點云,總數(shù)量為19 031,最大的平均k近鄰距離為46.60 cm,標準差為0.88;而經(jīng)過數(shù)據(jù)預處理后,點的總數(shù)量為18 928,最大的平均k近鄰距離為1.20 cm,標準差為0.11。離群點剔除后,點云分布均勻性更好,數(shù)據(jù)平滑度得到提高。由于點云表示的三維場景不同,經(jīng)過統(tǒng)計濾波算法處理過后,各樣本剔除的離群點個數(shù)不相同,剔除點的數(shù)量規(guī)模小于總數(shù)的10%。
圖3 點云中各點的平均k近鄰距離Fig. 3 Average k-nearest neighbor distance of each point in the point cloud
為了進一步說明算法的有效性,隨機抽取三個點云樣本進行數(shù)據(jù)預處理,結果如表1 所示。從表1 可知,經(jīng)數(shù)據(jù)預處理后,三個樣本剔除點的數(shù)量在5%左右,點的平均k近鄰距離的平均值減小15%左右,其標準差顯著減小,即統(tǒng)計濾波算法有效地剔除了離群點,處理后點云表面粗糙度明顯降低。
表1 數(shù)據(jù)預處理前后對比分析Tab.1 Comparison and analysis of data before and after pre-processing
深度神經(jīng)網(wǎng)絡具有較強的信息特征提取能力,在機器視覺領域的二維圖像檢測方面應用廣泛。針對三維點云檢測目標的特征存在多樣性和復雜性,引入深度神經(jīng)網(wǎng)絡以發(fā)揮其優(yōu)異的性能。為實現(xiàn)基于三維點云的車輛檢測,提出一個端到端的深度神經(jīng)網(wǎng)絡,包括兩個模塊層,分別是點云編碼層和目標檢測層。
對點云數(shù)據(jù)的體素特征進行編碼處理,采用文獻[6]的體素特征編碼VFE 作體素特征的提取。利用設計的全連接層(Fully Connected Network,F(xiàn)CN)對同一個體素網(wǎng)格區(qū)間進行逐點提取,F(xiàn)CN 由線性層、批處理規(guī)范化層(BatchNorm)和整流線性單元(Rectified Linear Unit,ReLU)構成。再采用逐點最大池化(element-wise max pooling)提取每個體素網(wǎng)格的聚集特征。最后將得到的兩個特征數(shù)據(jù)進行廣播(broadcasting)操作,將逐點的特征拼接在一起。本文利用兩個VFE 和一個FCN構成完整的體素特征提取器,最終得到四維張量數(shù)據(jù),如圖 4 所示,圖中的C、H、W、D分別表示四維張量的維度,H、W、D維度指的是體素網(wǎng)格提取出的聚集特征尺寸大小,這些特征又構成新的C維度。
VFE層的處理方法類似于圖像處理中對像素點的特征提取。但是,由于點云的無序性,通過設計出一個空體素體,將點云投入此空體素體中進行體素體分塊分組處理,從而實現(xiàn)對無序點云進行有序的三維網(wǎng)格形式的體素化,同時兼顧點云局部特征。本文對劃分后的所有體素格進行采樣,并初步提取特征信息。由于在點云數(shù)據(jù)投入網(wǎng)絡訓練前已經(jīng)完成數(shù)據(jù)預處理過程,所以對所有的點都可以采樣提取。
圖4 數(shù)據(jù)張量化Fig. 4 Tensorizing of data
更快速區(qū)域卷積神經(jīng)網(wǎng)絡(Faster Region-based CNN,F(xiàn)aster R-CNN)[25]中的 RPN 在圖像目標檢測技術中已經(jīng)十分成熟且有效,使用非極大值抑制(Non-Maximum Suppression,NMS)選定目標最終的預測邊框。在三維目標檢測中采用的深度神經(jīng)網(wǎng)絡模型[6,8]的目標檢測大都移植了RPN 作為三維目標區(qū)域候選網(wǎng)絡,并取得了良好的效果。為便于特征的提取和提高計算效率,以RPN 作為基礎,本文提出了一種增加最大池化模塊的目標檢測架構,如圖5所示。
圖5 目標檢測層架構Fig. 5 Architecture of object detection layer
算法中卷積層(Conv)不僅起到壓縮數(shù)據(jù)的作用,更重要的是通過設定的激活函數(shù),提取有可能的目標信息特征。本文設計的卷積層,過濾器設為3,步幅取2,不作填充處理,激活函數(shù)為ReLU函數(shù)。
受到YOLO 間隔插入最大池化模塊的啟發(fā),保留VoxelNet 網(wǎng)絡中的全卷積神經(jīng)網(wǎng)絡架構,像YOLO 一樣合理地增加了最大池化層,強化了網(wǎng)絡的性能。卷積計算是卷積神經(jīng)網(wǎng)絡中重要的操作,由于共享權值參數(shù)的設計,使得卷積層不僅能提取到有用信息,而且計算量比全連接神經(jīng)網(wǎng)絡的計算量要小。一個卷積核則對應得到一個特征映射,卷積核的數(shù)量也稱通道數(shù)(channel),同樣通道數(shù)量也等于特征映射的數(shù)量。若檢測的特征增加,而設計出多個不同的卷積核,則得到多個不同的特征映射,此時由原始數(shù)據(jù)而得到了多個特征映射,通道數(shù)量增加,即此層的神經(jīng)元數(shù)量增加,此時卷積網(wǎng)絡中層的維度增加,訓練的成本也隨之增加。此時算法框架中需引進池化層,進行適當?shù)慕稻S處理。
池化層在卷積神經(jīng)網(wǎng)絡中起到了壓縮數(shù)據(jù)的作用,尤其可以保持點云幾何信息上的不變性。若僅僅只做卷積計算,則會造成預測值的偏移。因此本文提出增加最大池化層(MaxPool),不僅可以減小偏移,而且可以最大地保留三維目標物體的紋理信息。本文設計MaxPool(ps,s,input)作為最大池化層的最小單元模塊,其中:ps 代表pool size;s 則表示strides。為了操作的便捷性,本文將padding 的參數(shù)設定為same,使模塊的輸入與輸出的張量形狀一致。本文算法加入的最大池化層,過濾器設為3,步幅取2,作填充處理,保持張量尺寸不變。在原有的全卷積層1 中插入一個最大池化層,數(shù)據(jù)流經(jīng)過的路徑為:一個卷積層,一個最大池化層,兩個卷積層。原全卷積層2 中也同樣地插入一個最大池化層,數(shù)據(jù)流經(jīng)過的路徑為:兩個卷積層,一個最大池化層,四個卷積層,原全卷積層3的操作與原全卷積層2一致。
損失函數(shù)是不可或缺的一個模塊,設計如下:
式中:Lpro為區(qū)域得分損失函數(shù)模塊,即分類器,與Faster-RCNN 中的分類器模塊一致;Lreg為目標候選區(qū)域位置模塊,即回歸器。設定候選目標(三維)邊界框(xi,yi,zi,li,wi,hi,θi),其中 (xi,yi,zi)為中心位置坐標,(li,wi,hi,θi)為長、寬、高及角度。設定真實目標(三維)區(qū)域,其中為中心位置坐標為長、寬、高及角度。Lreg的設計如下:
式中:n 為點云樣本體素個數(shù);s 為候選目標邊界框的個數(shù);Rij使用SmoothL1函數(shù)[25]。
本文對KITTI 原始點云數(shù)據(jù)的裁剪開度為0°~90°,與KITTI 高清鏡頭的開度(opening angle)一致。本文采用VoxelNet等論文中對車輛、行人和騎行者的anchors,這些數(shù)值符合實際目標大小的取值,例如對于車輛,本文使用的w、l、h分別為1.6 m、3.9 m、1.56 m,對于行人和騎行者的w、l、h 分別為0.6 m、0.8 m、1.73 m 和0.6 m、1.76 m、1.73 m。本文采用隨機梯度下降法(Stochastic Gradient Descent,SGD),訓練的學習率為0.001,隨機梯度下降法簡單且容易跳出局部極小繼續(xù)訓練,使設計的模型在訓練過程中更快地向真實的模型靠近,達到預期值。
本文實驗采用KITTI 數(shù)據(jù)集中的7 000 多個點云訓練樣本。在進行數(shù)據(jù)的過濾和訓練前,隨機將點云樣本分成訓練集和驗證集,各自約占50%。近3 500個樣本對于復雜場景的監(jiān)督式算法學習是不夠的,故在訓練過程中對訓練樣本進行擴充。在訓練開始前先提取訓練集樣本中所有已標定的目標點云數(shù)據(jù)及其標簽,隨后在訓練過程中隨機地選取并插入在當前訓練樣本中。這種方法的使用,不僅增加了訓練樣本數(shù)量,而且可以模擬不同環(huán)境下的目標。
基于谷歌公司TensorFlow 進行深度神經(jīng)網(wǎng)絡架構的搭建,實驗的環(huán)境配置為因特爾Xeon Silver 4108 處理器,64 GB運行內(nèi)存,英偉達GTX1080Ti 11GB顯存顯卡。
本文算法VNMax的實驗流程具體如下:
1)數(shù)據(jù)預處理。對KITTI 數(shù)據(jù)集進行劃分,對訓練集進行統(tǒng)計濾波處理,剔除離群點。
2)數(shù)據(jù)擴充準備。建立新的點云數(shù)據(jù)庫,存放訓練樣本中的已標定的目標及標簽。
3)算法訓練。設定完成整個訓練集為一次迭代,迭代次數(shù)為200。
4)樣本測試。采用測試集進行算法的測試。
將處理好的點云數(shù)據(jù)投入本文設計的深度神經(jīng)網(wǎng)絡中進行訓練,在TensorBoard 中訓練和驗證的損失值折線圖如圖6所示,smoothing 設為0.6。從圖6 可知,當訓練集的迭代次數(shù)超過50 000,損失值在1左右波動,并趨于平緩;對于驗證集數(shù)據(jù),迭代次數(shù)小于2 000,損失值急劇下降并在1.8 左右波動,且無上升趨勢,說明算法并未出現(xiàn)過擬合現(xiàn)象。
圖6 訓練及驗證誤差Fig. 6 Loss values of training and validation
在同樣的運行環(huán)境條件下,將同樣處理好的點云數(shù)據(jù)投入VoxelNet 進行訓練,與本文設計的深度神經(jīng)網(wǎng)絡架構結果對比如表2 和表3 所示,采用KITTI 數(shù)據(jù)集評價體系,對車輛檢測不同算法所得到平均精度進行比較。表2 和表3 中的算法 VeloFCN、Complex-YOLO 和 VoxelNet 分別指文獻[26]、[17]和[6]的實驗檢測結果,訓練采用的數(shù)據(jù)均為原始點云數(shù)據(jù)。VoxelNet(filtered)指的是VoxelNet 模型訓練并使用濾波處理后的數(shù)據(jù);VNMax 指的是本文沿用VoxelNet 的體素編碼網(wǎng)絡并嵌入最大池化層的新深度神經(jīng)網(wǎng)絡模型,并且對原始點云數(shù)據(jù)作濾波處理。表中簡單、中等和困難分別表示KITTI數(shù)據(jù)檢測任務的難易程度,即點云數(shù)據(jù)的稀疏程度。困難程度的點云數(shù)據(jù)最稀疏,訓練學習難度最大。
表2 的對比表明本文所提出的算法在車輛檢測和定位上所得到的平均精度普遍優(yōu)于VoxelNet模型。增加的最大池化層提高了算法的特征提取能力,減小了由多層卷積帶來的誤差,在KITTI 官方服務器中,算法VoxelNet 的車輛定位在簡單、中等和困難任務的精度分別為:34.54%、31.08% 和28.79%,本文提出的算法 VNMax 分別高出 11.30、6.02 和3.89個百分點。
表3 為車輛3D 檢測及鳥瞰視圖檢測的平均精度對比,可以看出本文提出的算法在提高檢測和定位的同時,也保持了3D檢測和鳥瞰視圖檢測的平均精度。
表2 車輛檢測及定位的平均精度對比 單位:%Tab.2 Average precision comparison of vehicle detection and location unit:%
根據(jù)表 2、3 中的 VoxelNet 和 VoxelNet(filtered)對比可以看出,數(shù)據(jù)經(jīng)過濾波后的處理對檢測的性能是有幫助的。最后VoxelNet、VoxelNet(filtered)和VNMax 作對比,可以看出數(shù)據(jù)的濾波處理和最大池化層對檢測的平均精度有顯著的作用。本文利用TensorFlow 庫進行濾波算法的編程,對每幀點云數(shù)據(jù)預處理的平均時間為0.13 s。檢測算法的時間與VoxelNet檢測時間相當。圖7為車輛檢測結果,采用點云數(shù)據(jù)檢測到的結果對應地投影到圖像上。
表3 車輛3D檢測及鳥瞰視圖檢測的平均精度對比 單位:%Tab.3 Average precision comparison of vehicle 3D detection and aerial view detection unit:%
圖7 車輛的檢測結果可視圖Fig. 7 Visibility maps of vehicle detection results
基于車載激光雷達采集的三維點云數(shù)據(jù),本文采用統(tǒng)計濾波算法對原始數(shù)據(jù)進行前期處理,使用最大池化模塊的不變性優(yōu)化原有的網(wǎng)絡架構,構建了端到端的深度神經(jīng)網(wǎng)絡。實驗結果表明,該濾波算法可以有效地剔除離群點,減少其他因素的干擾;最大池化模塊的不變性使得網(wǎng)絡具有更強的魯棒性,能為無人駕駛技術的感知系統(tǒng)提供一種有效的目標檢測算法。由于點云數(shù)據(jù)具有稀疏性,最大池化容易導致局部細節(jié)特征的忽略,在后續(xù)的工作中,可結合信息融合技術及YOLO系列版本的算法,進一步提高算法檢測的精度和速度。