申彩英,朱思瑤,黃興馳
(遼寧工業(yè)大學(xué) 汽車與交通工程學(xué)院, 遼寧 錦州 121001)
環(huán)境感知是智能駕駛汽車得以實現(xiàn)的基礎(chǔ),所有路徑規(guī)劃與運動控制都要基于環(huán)境感知系統(tǒng)[1]。目標(biāo)檢測是環(huán)境感知系統(tǒng)的重要功能之一,如何準確、快速地檢測車輛周圍目標(biāo),對于汽車智能化至關(guān)重要。
深度學(xué)習(xí)在目標(biāo)檢測方面有著非常優(yōu)異的表現(xiàn)[2],傳統(tǒng)目標(biāo)檢測方法只適用于目標(biāo)單一、背景相對簡單的情境,而深度學(xué)習(xí)方法可對復(fù)雜的多目標(biāo)情境進行處理?;谏疃葘W(xué)習(xí)的目標(biāo)檢測方法,主要分為兩類。一類是近年出現(xiàn)的,將基于自然語言處理領(lǐng)域中的Transformer模型遷移到計算機視覺任務(wù)中的Transformer框架算法,其代表性算法有 DETR[3]、ViT-FRCNN[4]等。這類算法通常能夠更好地處理遮擋問題,但訓(xùn)練周期長、計算量大。另一類是基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的目標(biāo)檢測算法,發(fā)展比較成熟,已經(jīng)廣泛應(yīng)用在各類圖像處理任務(wù)中。這一類目標(biāo)檢測算法按網(wǎng)絡(luò)結(jié)構(gòu)可分為兩大類,即One-stage和Two-stage。One-stage算法將目標(biāo)分類功能和目標(biāo)定位功能融合在一起,只需將圖像送入網(wǎng)絡(luò)一次,即可同時得到分類結(jié)果和定位結(jié)果,此類算法運算速度快,但精確度相對Two-stage算法略低,典型代表有SSD、YOLOv3[5]、YOLOv4[6]、CornerNet[7]等。Two-stage算法先產(chǎn)生候選區(qū)域,再對候選區(qū)域進行分類和定位回歸,此類算法精確度較高,但運行速度較慢,典型代表有R-CNN、Faster R-CNN等。
對智能駕駛汽車而言,檢測算法對周圍目標(biāo)的檢測速度越快、精度越高越好。YOLO系列算法作為一階段目標(biāo)檢測方法的代表,由于其在速度和檢測質(zhì)量上取得了很好的平衡,在實際工業(yè)場景得到了廣泛的應(yīng)用。同時為了確保智能駕駛汽車的安全,即意味著汽車在行駛過程中不會撞到任何人或物,所以在汽車行駛過程中需要知道其周邊物體和車輛本身之間的距離。有了這些相應(yīng)的目標(biāo)距離,作為后續(xù)的規(guī)劃控制模塊的上層輸入信息,才能設(shè)計出高效安全的智能駕駛汽車。
在用深度 CNN 模型識別圖像時,一般是通過卷積核去提取圖像的局部信息。然而,每個局部信息對圖像能否被正確識別的影響力是不同的[8](如背景部分和物體)。通過注意力機制可以建立不同區(qū)域的特征之間的交互關(guān)系,獲得全局特征,同時能得到圖像中不同局部信息的重要性程度。從而讓網(wǎng)絡(luò)模型能專注于圖像中有效的特征信息,忽視一些無效信息,提高檢測精度。
綜合上述現(xiàn)實需求,本文中在YOLO算法的基礎(chǔ)上,提出一種目標(biāo)檢測+距離測算方法:dual-YOLO。使用雙目視覺相機作為數(shù)據(jù)采集傳感器,從數(shù)據(jù)通道維度劃分主干網(wǎng)絡(luò)注意力,提升神經(jīng)網(wǎng)絡(luò)檢測精度,并且利用SGBM算法對雙目相機視差進行立體匹配,從而測算目標(biāo)距離,最終形成一套可用度高且成本較低的環(huán)境感知系統(tǒng)。
dual-YOLO算法結(jié)構(gòu)如圖1所示,其由4個部分組成:① 雙目相機預(yù)處理模塊,對相機數(shù)據(jù)進行畸變矯正、坐標(biāo)對齊等處理;② 目標(biāo)檢測網(wǎng)絡(luò),對目標(biāo)進行分類和位置回歸;③ 注意力模塊,賦予數(shù)據(jù)不同學(xué)習(xí)權(quán)重,提高檢測效率與準確度;④ 距離檢測模塊,測算目標(biāo)與傳感器的距離。
圖1 算法結(jié)構(gòu)框圖
1.2.1畸變矯正
可見光相機具有非常復(fù)雜的光學(xué)設(shè)計,光線要經(jīng)過多組鏡片才能到達其傳感器。由于實際工作環(huán)境復(fù)雜,成像過程往往不能達到理想效果導(dǎo)致畸變產(chǎn)生,如圖2所示。在使用可見光相機數(shù)據(jù)之前,利用Matlab軟件得到畸變參數(shù)矩陣,對圖像畸變進行矯正,以避免影響后續(xù)檢測及控制精度[9]。
1.2.2立體校正
在三維空間中,以不同視角觀察同一點,其生成的圖像平面不共面。需要用立體校正對雙目相機兩攝像頭進行平面投影變換,使兩平面共面。本文中使用文獻[10]的方法對雙目相機進行立體校正。
圖2 徑向畸變示意圖
以卷積神經(jīng)網(wǎng)絡(luò)為基礎(chǔ),參考文獻[11],構(gòu)建One-stage結(jié)構(gòu)的檢測網(wǎng)絡(luò),對目標(biāo)進行檢測。該網(wǎng)絡(luò)由主干網(wǎng)絡(luò)、頸部網(wǎng)絡(luò)、檢測頭3部分構(gòu)成,如圖3所示。
圖3 檢測網(wǎng)絡(luò)結(jié)構(gòu)示意圖
1.3.1主干網(wǎng)絡(luò)
主干網(wǎng)絡(luò)由Focus、CBL、CSP1、SPP和注意力模塊SENET構(gòu)成。SENET模塊賦予數(shù)據(jù)通道注意力,能提高網(wǎng)絡(luò)對有效特征的學(xué)習(xí)權(quán)重。作為輸入608*608*3的張量經(jīng)主干網(wǎng)絡(luò)后,變?yōu)?0*20*512。
Focus將640*640分辨率的輸入圖像分為4份再進行切片,張量拼接后接卷積操作和LeakyReLU激活函數(shù),特征圖變?yōu)?20*320*32。
CBL模塊是此網(wǎng)絡(luò)的核心模塊,其將卷積、批歸一化、LeakyReLU激活函數(shù)合三為一,其他模塊中也存有CBL,經(jīng)CBL后,特征圖再次縮小但深度加深,為160*160*64。CSP1模塊由CBL和多個殘差單元構(gòu)成,其有2個分支,分別學(xué)習(xí)特征信息,再進行張量拼接,使得輸入和輸出大小一致。
SPP模塊對特征圖分別進行3次最大池化再張量拼接,在不改變特征圖大小的情況下增加檢測網(wǎng)絡(luò)對特征信息的學(xué)習(xí)范圍。
1.3.2頸部網(wǎng)絡(luò)
頸部網(wǎng)絡(luò)是FPN+PAN結(jié)構(gòu),FPN自上向下采樣,PAN自下向上采樣。淺層網(wǎng)絡(luò)更關(guān)注位置特征,深層網(wǎng)絡(luò)更關(guān)注語義特征,FPN由上向下傳達語義特征,PAN由下向上傳達位置特征,頸部網(wǎng)絡(luò)將二者串接起來,能顯著提高檢測網(wǎng)絡(luò)的特征學(xué)習(xí)能力。
其頸部網(wǎng)絡(luò)由CBL、CSP2、Concat和Upsample構(gòu)成。CSP2模塊相比CSP1,將殘差單元替換為 CBL。Concat即張量拼接,將多個特征圖拼接為一個,并加大特征圖深度。Upsample即上采樣,放大特征圖以便下一步處理。
1.3.3檢測頭
檢測頭設(shè)計了3個head和9種anchor,輸入數(shù)據(jù)最終被分別下采樣8、16、32倍,變?yōu)?0*80、40*40、20*20。3個head由感受野從小到大各分配3個anchor,更好地提升了對不同尺度大小的目標(biāo)的檢測精度。
檢測ground truth寬、高與anchor寬、高的縮放系數(shù),若小于anchor_t(預(yù)設(shè)為4.0),則判定為正樣本,否則判定為負樣本。正樣本損失函數(shù)包括objectness loss、classification loss、localization loss 3種。其中位置損失函數(shù)采用CIOU_loss,解決了IOU_loss無法衡量ground truth和anchor不相交時的情況。
置信度損失函數(shù)采用二元交叉熵損失:
(1)
類別損失函數(shù)同樣采用二元交叉熵損失:
(2)
αν-DIOU
(3)
式中:IOU為兩矩形框交并比;ρ為兩矩形框中心點距離;c為兩矩形框包圍矩形的對角線長;ν為兩矩形框相似度;α為ν的影響因子。
負樣本損失函數(shù)為:
(4)
式中:λnoobj為權(quán)重系數(shù),預(yù)設(shè)為0.5。
總損失函數(shù)為:
Loss=Lobj+Lnoobj+Lcla+Lloc
(5)
人類觀察外界事物時,不會平均地觀察眼睛所獲取的畫面,會將注意力聚焦在能獲取重要信息部位,學(xué)習(xí)處理若干局部重要信息后,形成整體認知。注意力機制模仿人類觀察事物的方式,將注意力更多地投入到更重要的任務(wù)中。如今注意力機制[12-15]被廣泛使用在自然語言處理、圖像識別、語音識別等各種不同的深度學(xué)習(xí)任務(wù)中。
注意力機制與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的基本思想是讓網(wǎng)絡(luò)專注于圖像中有效的特征信息,忽視無效信息來達到提高檢測精度的目的。其作用機理是通過改變網(wǎng)絡(luò)中的神經(jīng)元權(quán)重達到的。通過注意力機制處理后的數(shù)據(jù),其具有更好的非線性,使神經(jīng)網(wǎng)絡(luò)能夠更好地學(xué)習(xí)數(shù)據(jù)特征。
可見光攝像頭傳感器采集到的數(shù)據(jù)是RGB形式的張量,通道數(shù)為3。卷積神經(jīng)網(wǎng)絡(luò)對其進行處理時,隨著網(wǎng)絡(luò)深度加大,數(shù)據(jù)通道數(shù)也會增加至數(shù)百層。參考文獻[12],針對數(shù)據(jù)的不同通道維度,使神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)每個通道的重要程度,提升重要特征并抑制非重要特征,注意力機制處理模塊如圖4所示。
圖4 注意力機制處理模塊示意圖
1.4.1數(shù)據(jù)處理
輸入數(shù)據(jù)X=「X1,X2,…,XC′?,X∈RH′×W′×C′。先對X做Ftr運算得到U=「u1,u2,…,uc?,U∈RH×W×C,uc∈RH×W:
(6)
1.4.2壓縮操作
對張量U做Fsq運算,可以壓縮通道維度特征,把uc蘊含的二維特征變?yōu)橐粋€實數(shù),這個實數(shù)具有一定的全局感受野。方法是對U進行全局平均池化處理:
(7)
式中:壓縮uc的空間尺寸H×W得到zc,其構(gòu)成1×1×C的特征張量,具有全局感受野。
1.4.3激活操作
為了捕獲各通道相關(guān)性,生成每個通道的權(quán)重,對數(shù)據(jù)做Fex運算:
s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))
(8)
式中:W1z、W2為2個全連接層;δ為ReLU激活函數(shù);σ為sigmoid激活函數(shù)。
1.4.4重構(gòu)操作
對數(shù)據(jù)做Fscale運算,用通道間乘法將權(quán)重s加權(quán)到uc上:
(9)
可見光攝像頭作為傳感器,具有信息密度高、可識別紋理、成本低廉等優(yōu)點。但攝像頭無法直接獲取目標(biāo)物體深度信息,難以滿足智能駕駛汽車對環(huán)境感知的需求。雙目視覺研究有力地解決了這一問題。雙目相機測距的基本原理是三角測量,利用2個攝像頭之間的視覺差來判斷物體遠近。雙目測距,首先對相機進行標(biāo)定和校正,再進行立體匹配得到視差,最后計算出深度信息。
1.5.1立體匹配
立體匹配的作用是使雙目相機左右攝像頭的像素點具有相互對應(yīng)關(guān)系。半全局塊匹配(semi-global block matching,SGBM)算法具有視差效果好、速度快的特點,是一種同時兼顧匹配精度和處理速度的算法[16]。使用SGBM法對雙目相機進行立體匹配,流程如圖5所示。
圖5 SGBM檢測流程框圖
使用Sobel算子對圖像進行預(yù)處理,提取物體邊緣輪廓信息,之后進行BT代價計算。BT算法可以使像素變化更具連續(xù)性,更好地保留圖像邊緣細節(jié)信息。
經(jīng)代價計算后,再進行代價聚合,先融合兩攝像頭數(shù)據(jù):
Costcombine=BTsobel+α·BTgray
(10)
式中:α為權(quán)重系數(shù),默認為0.25。
式中:p為像素點;r為某一路徑;d為視差;Lr為當(dāng)前路徑的累積代價函數(shù);第一項為匹配代價,此算法中等價為BT代價;第二項為平滑懲罰項,取4種情況下的最小代價;P1、P2為懲罰力度;第三項限定Lr的上限。式(12)是某一路徑下的代價聚合,總路徑代價聚合公式即為
(12)
式中:r值可設(shè)為4、8、16等。然后,即可計算視差,采取WTA贏者通吃策略,取視差最小值:
d=minS(p,d)
(13)
1.5.2距離測算
經(jīng)過1.5.1處理后,對檢測目標(biāo)進行深度計算:
(14)
式中:depth為深度;f為焦距;b為基線長度;cxl為左攝像頭主點橫坐標(biāo);cxr為右攝像頭主點橫坐標(biāo)。使用式(10)即可計算攝像頭傳感器到檢測目標(biāo)之間的距離。
雙目攝像頭傳感器負責(zé)數(shù)據(jù)采集,作為算法的輸入端。傳感器規(guī)格如表1所示。
表1 傳感器規(guī)格
在A3紙上打印9×7的棋盤格,利用Python腳本拍攝多張雙目照片,在Matlab中對攝像頭進行標(biāo)定。舍棄Mean Error高于0.2的照片,再由Matlab計算相機參數(shù)并輸出。
相機左右內(nèi)參為:
trinsicMatrixLeft=
(15)
IntrinsicMatrixRight=
(16)
左右徑向畸變?yōu)?
RadialDistortionLeft=
(17)
RadialDistortionRight=
(18)
左右切向畸變?yōu)?
旋轉(zhuǎn)矩陣為:
RotationMatrix=
(21)
平移矩陣為:
TranslationMatrix=
(22)
構(gòu)建Linux發(fā)行版為Ubuntu 18.04的服務(wù)器環(huán)境,服務(wù)器硬件配置為CPU Intel Xeon Platinum 8255C、RAM 39 GB、GPU Nvidia GeForce RTX 2080Ti。
PyTorch版本1.10.1,CUDA版本11.1,Python版本3.8。
利用KITTI數(shù)據(jù)集訓(xùn)練。KITTI Object Detection Evaluation 2012數(shù)據(jù)集包含7 481張道路交通采集圖像,將數(shù)據(jù)集劃分為訓(xùn)練集70%、測試集30%。初始學(xué)習(xí)率為0.01,優(yōu)化器使用SDG優(yōu)化器,模型dual-YOLO在數(shù)據(jù)集進行30輪訓(xùn)練。最后得到dual-YOLO模型參數(shù)為7 101 704個,模型大小為27.09M。
對KITTI測試集進行試驗,結(jié)果如圖6所示,目標(biāo)檢測網(wǎng)絡(luò)模型能夠有效識別道路上的汽車、行人和騎行者,檢測框可以包圍目標(biāo)位置,檢測標(biāo)簽左側(cè)為目標(biāo)類別,右側(cè)為置信度,即當(dāng)前檢測物體類別的可信程度,其值越大越好。在寬廣馬路、林蔭路、步行街多種場景下,目標(biāo)檢測網(wǎng)絡(luò)均可以正確識別到汽車、行人、騎行者,由圖6右下角還可見,目標(biāo)檢測網(wǎng)絡(luò)沒有將??吭诼愤叺淖孕熊囌`識別為騎行者。圖7為未引入注意力機制的檢測模型,同場景下,置信度較低,圖中右側(cè)一位騎行者被漏檢。目標(biāo)檢測網(wǎng)絡(luò)模型對雙目攝像頭采集的數(shù)據(jù)進行距離測算,當(dāng)?shù)缆翻h(huán)境較好時,能夠?qū)ψ攒嚨狼胺胶团R車道附近車輛測距,距離測算結(jié)果顯示在左側(cè)攝像頭中(如圖8所示)。
由表2[17-19]可以看出,未引入注意力機制的模型命名為dual-YOLO-without模型,其雖然速率與dual-YOLO模型相當(dāng),但精度顯著低于后者,其消融實驗見表3。dual-YOLO算法:汽車和騎行者識別AP可達90%以上,行人識別AP可達80%以上。在騎行者和行人檢測方面明顯優(yōu)于其他算法,檢測速度能達到60 fps, dual-YOLO算法能更好地滿足實時檢測要求,同時保證不低的識別率。
圖6 在KITTI測試集上的目標(biāo)檢測結(jié)果
圖7 未引入注意力機制的試驗結(jié)果
圖8 雙目測距試驗結(jié)果
表2 各算法在KITTI測試數(shù)據(jù)集AP的性能結(jié)果 %
表3 消融實驗結(jié)果 %
提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測算法,引入注意力機制,可對各類物體進行深度學(xué)習(xí)后檢測。使用該算法對道路交通主要參與者(汽車、騎行者、行人)進行檢測。結(jié)果表明:1) 汽車和騎行者識別AP可達90%以上,行人識別AP可達80%以上。2) 模型檢測速率在60 fps左右,具有良好的實時性,配合雙目攝像頭,還可對目標(biāo)進行距離測算,實用價值較高。3) 在復(fù)雜道路環(huán)境和較差光線環(huán)境下,檢測正確率有小幅下降,距離測算準確性降幅較大,魯棒性有待進一步提高。