汪 萌, 諸 兵
(北京航空航天大學(xué)自動化科學(xué)與電氣工程學(xué)院, 北京 100191)
隨著近年來深度學(xué)習(xí)技術(shù)的興起,越來越多的領(lǐng)域開始將深度學(xué)習(xí)技術(shù)應(yīng)用到產(chǎn)品和系統(tǒng)開發(fā)當(dāng)中,如自動駕駛、智能機器人、人機交互等,其中自動駕駛系統(tǒng)[1]開發(fā)是當(dāng)前深度學(xué)習(xí)的熱門應(yīng)用之一。利用基于深度學(xué)習(xí)的目標(biāo)檢測算法、目標(biāo)跟蹤算法、傳感器融合算法等能夠大大提升自車對周圍環(huán)境的感知能力。相較于傳統(tǒng)方法,基于深度學(xué)習(xí)的算法具有適應(yīng)性強、魯棒性強、移植性好等諸多優(yōu)點。
目標(biāo)檢測算法在自動駕駛領(lǐng)域有著不可或缺的地位,其檢測精度和速度往往可以作為評判一個自動駕駛系統(tǒng)的好壞。傳統(tǒng)的目標(biāo)檢測方法(如基于滑動窗口方法[2]、選擇性搜索算法[3]等)往往基于區(qū)域特征提取,再通過分類器分類,這樣會大大增加計算量,效率較低,無法滿足自動駕駛系統(tǒng)的實時性。現(xiàn)有的基于深度學(xué)習(xí)的目標(biāo)檢測算法可以分為兩個大類:一階段算法和兩階段算法。以區(qū)域卷積神經(jīng)網(wǎng)絡(luò) (region convolutional neural network, R-CNN)[4]為代表的兩階段檢測器充分利用了深度學(xué)習(xí)網(wǎng)絡(luò)的學(xué)習(xí)能力,大大提升了檢測的精確度,但是在檢測速度上仍然達不到自動駕駛的實時性要求。后續(xù)出現(xiàn)的快速R-CNN(Fast R-CNN, Fast-RCNN)[5]和更快速R-CNN (Faster-RCNN)[6]網(wǎng)絡(luò)通過卷積神經(jīng)網(wǎng)絡(luò)提取圖像特征,優(yōu)化了原有繁瑣的特征提取步驟,從而提升了檢測速度,兼顧了實時性和準(zhǔn)確性。以單次多框檢測器(single shot multibox detector, SSD)[7]和單次視覺檢測器(you only look once, YOLO)[8]系列為代表的一階段檢測器采用端到端模式,省去了尋找感興趣區(qū)域(region of interest,ROI)的步驟,直接給出回歸框和目標(biāo)類別,相比二階段目標(biāo)檢測器在檢測速度上有了極大提升,但是在檢測精度上略有下降。而上述的目標(biāo)檢測算法往往存在參數(shù)量過大、不夠輕量化的缺點,難以部署到一些小型嵌入式設(shè)備中。針對這一需求,后續(xù)又陸續(xù)出現(xiàn)了輕量神經(jīng)網(wǎng)絡(luò)[9]、可移動神經(jīng)網(wǎng)絡(luò)[10]系列等模型,通過對網(wǎng)絡(luò)架構(gòu)的收縮、剪枝、量化等一系列操作,減小模型尺寸,以達到輕量化的目的。
根據(jù)需要檢測的維度的不同,目標(biāo)檢測算法又可分為二維(two-dimensional,2D)目標(biāo)檢測和三維(three-dimensional,3D)目標(biāo)檢測。3D目標(biāo)檢測算法起步較晚,目前根據(jù)傳感器類型,可分為單模(激光雷達、攝像頭)和多模(激光雷達+攝像頭、雷達+攝像頭)兩種方式。由于精密激光雷達成本較高,只在一些對精確度要求極高的系統(tǒng)中使用,在一般情況下更多考慮使用單目攝像頭作為傳感器?;趩文繑z像頭的3D目標(biāo)檢測也成為了近年來研究的主流方向之一,相繼出現(xiàn)了以深度3D框檢測網(wǎng)絡(luò)[11]、單目3D檢測網(wǎng)絡(luò)[12]等為代表的通過2D/3D約束進行距離估計的模型,還有以單目3D物體檢測網(wǎng)絡(luò)[13]和中心點檢測網(wǎng)絡(luò)[14]等為代表的直接生成候選區(qū)域的模型。
無論是在2D或是3D目標(biāo)檢測任務(wù)中,往往需要根據(jù)不同任務(wù)對模型進行改進,以達到預(yù)期目標(biāo)。深度學(xué)習(xí)中的不確定性信息的利用就是常用的改進思路之一。深度學(xué)習(xí)中的不確定性包含3個方面:任意不確定性、認(rèn)知不確定性和預(yù)測不確定性。其中,任意不確定性是指模型中包含環(huán)境中的固有噪聲,也稱之為觀測不確定性。認(rèn)知不確定性是指模型中參數(shù)表示的不確定性。預(yù)測不確定性是指模型輸出傳遞的不確定性,其中包含任意不確定性和認(rèn)知不確定性。然而在通常情況下,一般會忽略模型中存在的這幾類不確定性,默認(rèn)映射結(jié)果的正確性,導(dǎo)致參數(shù)學(xué)習(xí)錯誤等情況發(fā)生。因此,在目標(biāo)檢測過程中合理處理這些不確定性信息,可以有效避免漏檢或誤檢情況的發(fā)生。
在自動駕駛工程實踐中,不確定性主要由真值框本身的模糊性和預(yù)測框回歸不精確兩個方面引入。在數(shù)據(jù)集標(biāo)注階段,以下兩種原因會導(dǎo)致真值框標(biāo)注與實際相差較大:由于目標(biāo)體積或者姿態(tài)而造成的真值框邊界模糊;由于目標(biāo)被遮擋造成的真值框標(biāo)注模糊等。對于預(yù)測框回歸,一般認(rèn)為分類置信度越高的框,其邊界預(yù)測也越準(zhǔn)確。然而也有分類置信度越高,邊界框回歸反而不準(zhǔn)確的情況。由于一般模型都采用L1 loss作為損失函數(shù),因此并不能很好地解決真值標(biāo)注模糊和預(yù)測框回歸不準(zhǔn)確的問題,往往采用改進損失函數(shù)和改進邊界框的編碼方式等思路來解決模型中的不確定性問題。
目前,較為知名的基于不確定建模的改進算法有Choi等[15]提出的Gaussian YOLOv3,通過預(yù)測邊界框坐標(biāo)定位的不確定性以提高模型預(yù)測精度;He等[16]提出的較平滑非極大抑制(softer non-maximum suppression,Softer-NMS)算法,同樣考慮邊界框坐標(biāo)定位的不確定性,通過與狄拉克分布的擬合進而回歸邊界框坐標(biāo)以及位置置信度; Lu等[17]提出的幾何不確定性投影網(wǎng)絡(luò)(geometry uncertainty projection network,GUPNet),利用幾何關(guān)系衡量深度估計的不確定度,為每個深度提供高度可靠的置信度,進而提高預(yù)測框位置準(zhǔn)確性。
本文在以上所述不確定性建模相關(guān)的文獻中獲得啟發(fā),對經(jīng)典的SSD-2D檢測算法和單階單目3D檢測器(single-stage monocular,SMOKE)[18]進行改進。改進了SSD算法對邊界框的編碼方式,對預(yù)測框和真實框采用高斯模型進行建模,從而引入位置的不確定性,并將原有位置損失函數(shù)改為KL loss,從而讓網(wǎng)絡(luò)輸出預(yù)測框的分布更加接近真實框的分布,以提高檢測精度。本文還對SMOKE-3D檢測算法中的heatmap計算過程做出了改進,引入了目標(biāo)深度和航向角度的不確定性;同時在計算位置損失函數(shù)時使用馬氏距離代替原有的L1距離,以此達到提升距離自車較遠(yuǎn)目標(biāo)的檢測精度的目的。
SSD是一種單階多層的目標(biāo)檢測模型。SSD只進行了一次框的預(yù)測與損失計算,因此屬于一階段范疇里的一種主流框架,目前仍被廣泛應(yīng)用。SSD從多個角度對目標(biāo)檢測做出了創(chuàng)新,結(jié)合了Faster-RCNN和YOLO各自的優(yōu)點,使得目標(biāo)檢測的速度相比Faster-RCNN有了很大提升,同時檢測精度也與Faster-RCNN不相上下。
SSD模型通過在不同尺度上進行檢測和識別以達到提高檢測精度的目的。如圖1所示,網(wǎng)絡(luò)模型可分為兩個部分:基礎(chǔ)網(wǎng)絡(luò)和附加網(wǎng)絡(luò)。
圖1 單階段檢測器模型結(jié)構(gòu)圖Fig.1 Structure diagram of single-stage detector model
基礎(chǔ)網(wǎng)絡(luò)采用視覺幾何組(Visual Geometry Group, VGG)的VGG-16骨架作為特征提取網(wǎng)絡(luò),在其末端添加4卷積層作為附加網(wǎng)絡(luò),用于預(yù)測不同尺度目標(biāo)以及邊界框的偏移量和置信度。同時,SSD模型將分類任務(wù)和邊界框預(yù)測任務(wù)分開進行,在損失函數(shù)計算時邊界框預(yù)測網(wǎng)絡(luò)使用Smooth L1回歸損失:
(1)
式中:
(2)
(3)
式中:
(4)
總體損失函數(shù)為置信度損失(Lconf)和定位損失(Lloc)之和:
(5)
式中:c為置信度;α為權(quán)重項。
針對SSD-2D目標(biāo)檢測器的改進借鑒了Softer-NMS中對邊界框進行不確定性建模的思想。常規(guī)的目標(biāo)檢測數(shù)據(jù)集會將邊界框的位置標(biāo)注得非常準(zhǔn)確,然而由于目標(biāo)遮擋、自身邊界等一系列因素的干擾,真實框事實上存在一定的固有不確定性,而通常的目標(biāo)檢測器往往忽略掉了這種不確定性。在模型中加入不確定性信息能夠?qū)ψ罱K預(yù)測框的位置進行微調(diào),從而提升檢測精度。對邊界框進行不確定性建模遵循以下步驟。
假設(shè)預(yù)測邊界框的坐標(biāo)是獨立分布的,則其可用一維高斯分布表示:
(6)
式中:θ為可學(xué)習(xí)參數(shù);σ為預(yù)測框估計方差,其趨于0時說明估計值接近真實值;xe為待估計的邊界框位置。
同樣地,真實邊界框分布可視為服從σ=0的一維高斯分布,即狄拉克分布:
PD(x)=δ(x-xg)
(7)
式中:xg為真實邊界框位置。
由于不確定性的加入相當(dāng)于對邊界框的位置信息增加了方差項,因此在進行位置損失函數(shù)的計算時采用KL(Kullback-Leibler)散度損失函數(shù)替換原來的平滑L1損失函數(shù):
-lgPθ(xg)+H(PD(x))=
(8)
這樣就在損失函數(shù)中引入了方差項,用來度量對位置估計的不確定性量。如圖2所示,灰色部分代表了標(biāo)準(zhǔn)差為σ的高斯分布,即預(yù)測框的分布;紅色部分代表狄拉克分布,即真實框的分布。改進網(wǎng)絡(luò)的目的就在于通過KL散度調(diào)整置信度σ以及預(yù)測框位置xe,優(yōu)化預(yù)測框分布和真實框分布的距離,從而網(wǎng)絡(luò)會輸出接近真實框分布且置信度高的預(yù)測框。
圖2 預(yù)測框和真實框的分布示意圖Fig.2 Distribution diagram of prediction box and ground-truth box
SMOKE是一個一階段的單目視覺目標(biāo)檢測器,與常規(guī)的基于2D檢測結(jié)果的3D檢測算法相比去掉了生成2D候選區(qū)域的步驟,直接回歸出3D檢測框和關(guān)鍵點的位置,減少了2D檢測過程中引入的噪聲,從而獲得更加精確的檢測結(jié)果。其模型結(jié)構(gòu)如圖3所示,其中,DLA-34為多層級融合(deep layer aggregation, DLA)結(jié)構(gòu)。
圖3 SMOKE模型結(jié)構(gòu)圖Fig.3 Structure diagram of SMOKE
從結(jié)構(gòu)上看,SMOKE目標(biāo)檢測器主要分為兩個分支:關(guān)鍵點分支、邊界框回歸分支。其中,關(guān)鍵點分支通過以下映射關(guān)系將3D邊界框中心點投影在對應(yīng)的2D邊界框中心,投射關(guān)鍵點可以完全恢復(fù)出目標(biāo)的3D位置:
(9)
式中:K是相機內(nèi)參,[x,y,z]T為投射關(guān)鍵點的三維坐標(biāo)。對于每一個3D邊界框,需要用8個2D點來表示。
對于回歸分支,通過回歸一個維度為8的向量,確定一個3D檢測框的位置:
τ=[δzδxcδycδhδwδlsinαcosα]T
(10)
式中:δz為深度方向的偏差、δxc為水平方向上離原點的偏差、δyc為垂直方向上離原點的偏差、δh為檢測框的長相對于真值的殘差、δw為檢測框的寬相對于真值的殘差、δl為檢測框的高相對于真值的殘差、 sinα為航向角的正弦,cosα為航向角的余弦。
對于目標(biāo)的深度z,可以通過給定的尺度因子σz和平移因子μz計算而得到:
z=μz+δzσz
(11)
得到目標(biāo)深度z之后,通過投影坐標(biāo)變換可以得到目標(biāo)在相機坐標(biāo)系下的位置:
(12)
最后,根據(jù)網(wǎng)絡(luò)預(yù)測的長、寬、高的殘差計算目標(biāo)的3D尺度:
(13)
損失函數(shù)的計算同樣分為兩個部分:對于關(guān)鍵點分支的分類損失使用的是焦點損失:
(14)
式中:
(15)
(16)
式中:y為真值;s為網(wǎng)絡(luò)的輸出結(jié)果。
對于邊界框回歸分支,損失函數(shù)采用L1 loss表示:
(17)
(18)
針對SMOKE-3D目標(biāo)檢測模型,考慮對文獻[18]熱力圖的生成方式加以改進: 原作者在進行真值熱力圖和預(yù)測熱力圖生成時使用半徑為r的圓形2D高斯分布來擬合當(dāng)前目標(biāo)可能出現(xiàn)的范圍:
(19)
采用圓形的二維高斯分布沒有考慮到目標(biāo)的朝向(航向角)的不確定性,對于位置相近但是朝向不同的目標(biāo)不能做到很好的區(qū)分,因此在熱力圖生成時采用橢圓形的二維高斯分布,在協(xié)方差項中加入航向角信息:
式中:rcls為當(dāng)前目標(biāo)類別對應(yīng)的高斯半徑,根據(jù)目標(biāo)大小預(yù)先設(shè)置。
(20)
式中:roty為數(shù)據(jù)集中標(biāo)注的朝向角。生成后的效果如圖4所示。
圖4 改進前后熱力圖對比Fig.4 Comparison of heatmap before and after improvement
在自動駕駛3D目標(biāo)檢測任務(wù)中,通常對距離自車近的目標(biāo)需要極高的檢測精度,需要準(zhǔn)確回歸出其位置和類別信息。而對于較遠(yuǎn)的目標(biāo)可以有一定的誤檢測容許度,從而提高模型的魯棒性,在一定程度也能避免過擬合的發(fā)生。因此將高斯半徑r和深度z的關(guān)系定義為如下形式:
r=λ·r·lg(zβ+1)
(21)
式中:λ、β為預(yù)設(shè)的權(quán)重系數(shù)(經(jīng)過實驗得出λ在1.2~1.5,β在0.3~0.5效果較好,實驗中取λ=1.5,β=0.4)。通過該變換使較遠(yuǎn)處的目標(biāo)有較大的高斯半徑,從而提高模型對遠(yuǎn)處目標(biāo)發(fā)生誤檢測的容許度,而近處目標(biāo)保持在原來的水平。
文獻[18]在計算位置損失函數(shù)時,是通過目標(biāo)真實位置和網(wǎng)絡(luò)預(yù)測位置的L1 距離(如式17)完成的,未能考慮到目標(biāo)朝向?qū)Y(jié)果的影響,因此在本文中改進為計算兩者之間的馬氏距離:
(22)
式中:xi和xj為中心點坐標(biāo),Σ為協(xié)方差矩陣。
實驗采用的是KITTI[19]自動駕駛數(shù)據(jù)集,在做2D目標(biāo)檢測時分為4類標(biāo)簽:汽車、卡車、行人、自行車;在做3D目標(biāo)檢測時分3類標(biāo)簽:汽車、行人、自行車。其中訓(xùn)練集圖像7 481張,測試集圖像2 236張。實驗在一臺搭載NVIDIA RTX3080顯卡的深度學(xué)習(xí)服務(wù)器上完成,CPU為Intel E5-2620,內(nèi)存大小為64 GB,系統(tǒng)為Ubuntu 20.10,使用Pytorch平臺,版本為1.7.0,CUDA版本為11.0。
為了更好地對比改進前后的算法性能,對原始SSD算法和改進后的SSD算法采用相同訓(xùn)練集和測試集、相同的訓(xùn)練批次進行訓(xùn)練,特征提取骨架均為VGG-16。計算召回率和精確率時,將閾值均設(shè)置為0.5,交并比(intersection over union, IOU)設(shè)置為0.7,對4類目標(biāo)分別計算平均精度(average precision,AP),算法測試結(jié)果如表1所示。
表1 SSD算法改進對比結(jié)果
圖5展示了檢測模型對邊界框的回歸結(jié)果,采用相同圖片輸入到檢測模型中,從圖5可以看出,改進前的SSD對于較遠(yuǎn)處的目標(biāo)識別效果較差,存在幾處漏檢測的目標(biāo),而基于不確定性建模改進后的模型能夠較準(zhǔn)確地識別出畫面中的大部分目標(biāo)。這是由于不確定性建模的加入使得模型對真值框的標(biāo)注準(zhǔn)確性不如改進之前的敏感,這樣就有效避免了部分真值標(biāo)注精度不夠而對檢測結(jié)果帶來的負(fù)面影響。
圖5 SSD檢測結(jié)果對比圖Fig.5 Comparison diagram of SSD test results
從表1可以看出,不確定性建模改進后的模型相較于原始模型對每一類目標(biāo)的檢測精度都有一定的提升,最終平均精度(mean Average Precision,mAP) 提升近5%,主要表現(xiàn)在對遠(yuǎn)處目標(biāo)的檢測性能更好。然而由于改進后的模型復(fù)雜度更高,因此檢測速度有一定下降。
采用相同的訓(xùn)練集、測試集、訓(xùn)練輪次分別訓(xùn)練改進前后的模型,特征提取骨架均為DLA-34,閾值均設(shè)置為0.5,IOU設(shè)置為0.7。對于每一類目標(biāo)的檢測結(jié)果對比如表2所示。
表2 每類目標(biāo)上的檢測精度
改進后的SMOKE模型對于車類型的檢測精度有了近2%的提升,而對行人和自行車類型提升不明顯。
另外,從3D檢測結(jié)果、鳥瞰圖檢測結(jié)果、3D檢測恢復(fù)出的2D檢測結(jié)果3個方面綜合對比改進前后的算法性能。同時,將同樣基于KITTI數(shù)據(jù)集的單目3D檢測算法文獻[20]和文獻[21]的結(jié)果與改進前后的SMOKE算法進行對比。分別考慮簡單、中等、困難3種樣本的檢測精度,對比結(jié)果如表3~表5所示,對于簡單、中等、困難3種樣本的檢測精度均有小幅度提升,但是檢測速度略有下降。
表3 SMOKE改進前后的3D檢測結(jié)果
表4 SMOKE改進前后的鳥瞰圖檢測結(jié)果
表5 SMOKE改進前后的2D檢測結(jié)果
圖6展示了改進前后的檢測模型對同一張測試圖片的檢測結(jié)果,從圖6中可以看出,改進前的網(wǎng)絡(luò)未能準(zhǔn)確給出左前方車輛的3D預(yù)測邊界框,而改進后的網(wǎng)絡(luò)給出的3D預(yù)測邊界框更為準(zhǔn)確。由此可見,改進后的模型對于離自車較遠(yuǎn)且?guī)б欢ê较蚪嵌鹊哪繕?biāo)檢測準(zhǔn)確度更高。
圖6 SMOKE檢測結(jié)果對比圖Fig.6 Comparison diagram of SMOKE test results
本文利用深度學(xué)習(xí)中不確定性建模的方法,對現(xiàn)有的2D和3D目標(biāo)檢測算法進行了改進,在保證了算法的實時性的情況下同時提升了算法的檢測精度。實驗結(jié)果表明,在KITTI自動駕駛數(shù)據(jù)集下,SSD改進算法檢測精度相較原版提升了近5%,SMOKE檢測算法提升了近2%。但改進后的算法并未能較好解決原有模型對于小目標(biāo)(如行人和自行車等)識別準(zhǔn)確率較低的問題,后續(xù)將針對小目標(biāo)的檢測做更進一步的研究。