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