高維岳,陳宇拓+,劉 洋,陳 標(biāo)
(1.中南林業(yè)科技大學(xué) 計(jì)算機(jī)與信息工程學(xué)院,湖南 長(zhǎng)沙410004;2.湖南汽車工程職業(yè)學(xué)院 信息工程學(xué)院,湖南 株洲412001)
現(xiàn)階段基于機(jī)器視覺(jué)的車輛前方障礙物測(cè)距研究主要分為兩大類:多目視覺(jué)測(cè)距系統(tǒng)與單目視覺(jué)測(cè)距系統(tǒng)[1]。多目視覺(jué)測(cè)距系統(tǒng)利用多方向視覺(jué)差來(lái)獲取目標(biāo)深度信息[2],但計(jì)算速度慢且成本較大,同時(shí)圖像配準(zhǔn)困難。單目視覺(jué)系統(tǒng)利用攝像機(jī)內(nèi)參與幾何關(guān)系進(jìn)行測(cè)距,在保證較高的測(cè)距精度下相較于多目視覺(jué)系統(tǒng)具有結(jié)構(gòu)簡(jiǎn)單、運(yùn)算量小、實(shí)時(shí)性高等優(yōu)點(diǎn)。目前國(guó)內(nèi)外單目視覺(jué)測(cè)距方法研究可分為兩類:基于數(shù)據(jù)回歸建模的方法與基于幾何位置關(guān)系的方法。數(shù)據(jù)回歸建模的方法[3]優(yōu)勢(shì)在于測(cè)距結(jié)果不會(huì)受到透鏡畸變以及光路偏差的影響,該方法通過(guò)獲取大量樣本點(diǎn)并與像平面坐標(biāo)建立對(duì)應(yīng)關(guān)系,再利用數(shù)據(jù)回歸建模方法建立映射模型,但對(duì)于不同參數(shù)的攝像系統(tǒng)需要重新建模?;趲缀挝恢藐P(guān)系的方法利用攝像機(jī)內(nèi)參與攝像機(jī)擺放高度、俯仰角等輔助參數(shù)進(jìn)行建模與坐標(biāo)變換,相較于數(shù)據(jù)回歸的方法更加靈活前期工作更小更具有可移植性。文獻(xiàn)[4]利用焦距和小孔成像原理提出的縱向車間距離檢測(cè)方法在路面水平且預(yù)測(cè)車輛在圖像正中央時(shí)可以取得較好的效果,但對(duì)識(shí)別處于路面兩側(cè)的障礙物誤差較大。文獻(xiàn)[5]利用車輛寬度比例關(guān)系進(jìn)行測(cè)距,容易受到車輛寬度的多樣性與車輛拍攝角度變化的影響導(dǎo)致測(cè)距效果欠佳。而文獻(xiàn)[6]根據(jù)攝像機(jī)投影模型,通過(guò)幾何關(guān)系推導(dǎo)三維路面坐標(biāo)系與二維像平面坐標(biāo)系對(duì)應(yīng)關(guān)系,以此建立測(cè)距模型的方法測(cè)距精度更高更適用于大多數(shù)駕駛場(chǎng)景。
現(xiàn)階段傳統(tǒng)的車輛前方障礙物檢測(cè)方法主要針對(duì)行車過(guò)程中的前方車輛,利用車輛顏色、陰影、對(duì)稱性、邊緣等特征對(duì)前方車輛進(jìn)行檢測(cè)[7,8]。由于人工提取特征,傳統(tǒng)方法面對(duì)具有多種障礙物如行人、路障、摩托車的復(fù)雜路況時(shí)效果較差。基于深度學(xué)習(xí)的目標(biāo)檢測(cè)方法[9]通過(guò)卷積神經(jīng)網(wǎng)絡(luò)提取特征,為準(zhǔn)確檢測(cè)識(shí)別多種障礙物提供了可能,通過(guò)使用多尺度訓(xùn)練能夠檢測(cè)多種大小目標(biāo),較傳統(tǒng)方法泛化性更好、檢測(cè)準(zhǔn)確性更高。
為了解決車輛單目測(cè)距系統(tǒng)中定位精度低、泛化性差等問(wèn)題,本文提出了一種深度學(xué)習(xí)與幾何推導(dǎo)相結(jié)合的車前障礙物距離測(cè)量方法?;谏疃葘W(xué)習(xí)網(wǎng)絡(luò)YOLOv4[10]算法為核心構(gòu)建目標(biāo)檢測(cè)算法框架,利用卷積神經(jīng)網(wǎng)絡(luò)提取目標(biāo)特征,預(yù)測(cè)目標(biāo)類別和目標(biāo)在圖片上的位置信息即檢測(cè)框。為了解決檢測(cè)算法的位置預(yù)測(cè)不準(zhǔn)確問(wèn)題,運(yùn)用邊緣檢測(cè)算法修正目標(biāo)檢測(cè)框的位置。根據(jù)攝像機(jī)投影模型,通過(guò)幾何關(guān)系建立了路面坐標(biāo)系和像平面坐標(biāo)系的對(duì)應(yīng)關(guān)系,并對(duì)測(cè)距過(guò)程和算法進(jìn)行了優(yōu)化,最后采用擬合算法對(duì)測(cè)量數(shù)據(jù)進(jìn)行擬合降低了測(cè)距誤差。
YOLOv4算法是YOLO(you only look once)系列目標(biāo)檢測(cè)算法的第四代,屬于基于深度學(xué)習(xí)的單階段目標(biāo)檢測(cè)算法,對(duì)比兩階段目標(biāo)檢測(cè)算法具有速度快、計(jì)算量小的優(yōu)點(diǎn)。在YOLOv3[11]算法的基礎(chǔ)上YOLOv4算法進(jìn)一步加強(qiáng)了檢測(cè)精度以及檢測(cè)速率,在Darknet-53網(wǎng)絡(luò)的基礎(chǔ)上引進(jìn)了CSPNet[12](cross stage partial network)將骨干網(wǎng)絡(luò)框架改為了CSPDarknet-53,并使用了Mish激活函數(shù)替換了Leaky-ReLU激活函數(shù),有效提高了網(wǎng)絡(luò)的學(xué)習(xí)能力并減少了運(yùn)算量。并使用了Mosaic數(shù)據(jù)增強(qiáng)方法,將4張圖片隨機(jī)縮放、裁剪、排布后進(jìn)行拼接然后加入到訓(xùn)練集中進(jìn)行訓(xùn)練以解決小目標(biāo)分布不均勻的問(wèn)題。為了解決過(guò)擬合問(wèn)題,YOLOv4算法使用了DropBlock隨機(jī)減少神經(jīng)元數(shù)量從而對(duì)網(wǎng)絡(luò)正則化過(guò)程進(jìn)行改進(jìn),使網(wǎng)絡(luò)變得簡(jiǎn)單。在特征融合部分,利用FPN[13](feature pyramid networks)進(jìn)行下采樣提取強(qiáng)語(yǔ)義特征進(jìn)行目標(biāo)分類,再利用PAN[14](path aggregation network)進(jìn)行上采樣提取強(qiáng)定位特征進(jìn)行位置檢測(cè),顯著提升了模型性能。為了增加預(yù)測(cè)框回歸速度與檢測(cè)精度,在訓(xùn)練時(shí)將二元交叉熵?fù)p失(binary cross-entropy loss)改進(jìn)為CIoU_loss(complete intersection over union loss),并將邊界框篩選方法NMS(non-maximum suppression)改進(jìn)為DIoU-NMS(distance intersection over union non-maximum suppression)綜合考慮了重疊面積與中心距離問(wèn)題,提高了對(duì)重疊目標(biāo)的識(shí)別精度。YOLOv4算法在保證實(shí)時(shí)性的基礎(chǔ)上也擁有著較高的檢測(cè)精度,與上一代YOLOv3算法相比平均檢測(cè)精度AP(average precision)提高了10%,每秒幀率FPS(frame per second)提高了12%。圖1為多種障礙物目標(biāo)檢測(cè)的結(jié)果。
圖1 多種障礙物目標(biāo)檢測(cè)結(jié)果
YOLOv4目標(biāo)檢測(cè)算法通過(guò)分析檢測(cè)目標(biāo)圖像特征來(lái)預(yù)測(cè)其類別信息與坐標(biāo)信息,而檢測(cè)目標(biāo)距離越遠(yuǎn)圖像上所占像素越少其特征也越模糊,導(dǎo)致檢測(cè)算法所預(yù)測(cè)的位置信息偏差越大。目標(biāo)檢測(cè)算法輸出的檢測(cè)框底邊與目標(biāo)和地面實(shí)際接觸位置存在一定的差距。本文利用邊緣檢測(cè)算法獲取目標(biāo)實(shí)際底邊位置得到坐標(biāo)差來(lái)對(duì)檢測(cè)框進(jìn)行調(diào)整,從而降低檢測(cè)算法位置預(yù)測(cè)誤差。
通過(guò)對(duì)YOLOv4算法獲得的大量檢測(cè)結(jié)果偏差分析,發(fā)現(xiàn)垂直方向位置偏差通常在30像素以內(nèi),因此以檢測(cè)框底邊中點(diǎn)為中心,上下左右各取50像素對(duì)圖像進(jìn)行截取,取100×100像素的圖片并對(duì)此圖片進(jìn)行邊緣檢測(cè)運(yùn)算?;诰禐V波和中值濾波的混合濾波器改進(jìn)Canny算子,以提高邊緣檢測(cè)抗噪性、連續(xù)性和定位精度,降低誤判率。利用改進(jìn)Canny算子對(duì)目標(biāo)進(jìn)行邊緣檢測(cè)結(jié)果如圖2所示。
圖2 改進(jìn)的Canny算子邊緣檢測(cè)結(jié)果
圖3(a)目標(biāo)下方的橫線為檢測(cè)框底邊且標(biāo)識(shí)出了中點(diǎn),需將檢測(cè)框底邊修正到如圖3(b)所示的目標(biāo)與路面接觸邊位置。將邊緣檢測(cè)得到目標(biāo)實(shí)際底邊所有像素的縱坐標(biāo)平均值與原檢測(cè)框底邊中點(diǎn)像素的縱坐標(biāo)值之差作為檢測(cè)框底邊中點(diǎn)縱向修正距離,修正后的結(jié)果如圖3(b)所示。
圖3 檢測(cè)框調(diào)整結(jié)果
將攝像機(jī)采集到的圖像輸入到Y(jié)OLOv4算法中,算法通過(guò)卷積神經(jīng)網(wǎng)絡(luò)提取目標(biāo)特征并進(jìn)行預(yù)測(cè),輸出前方障礙物的類別以及其在像平面中左上(u1,v1)與右下(u2,v2)坐標(biāo)。為了對(duì)障礙物進(jìn)行測(cè)距取檢測(cè)框底邊中點(diǎn)((u1+u2)/2,v2)代表其在像平面上的初始位置,通過(guò)位置修正算法得到目標(biāo)在像平面上的坐標(biāo)p(xp,yp)。
單目視覺(jué)系統(tǒng)可以通過(guò)小孔成像模型來(lái)描述其透視變換。圖像采集過(guò)程是將客觀世界的三維路面坐標(biāo)系投影到攝像機(jī)的二維像平面坐標(biāo)系中,而測(cè)距過(guò)程為圖像采集的逆過(guò)程。因此對(duì)目標(biāo)進(jìn)行測(cè)距首先需要獲取目標(biāo)在攝像平面的坐標(biāo),然后利用攝像機(jī)的水平視角、垂直視角、俯仰角、擺放高度以及清晰度等參數(shù),將攝像平面坐標(biāo)轉(zhuǎn)換為三維路面坐標(biāo),通過(guò)坐標(biāo)計(jì)算出障礙物目標(biāo)與攝像機(jī)之間的距離。其中攝像機(jī)垂直和水平視角以及清晰度為攝像機(jī)固定參數(shù),而攝像機(jī)俯仰角和擺放高度需要人為測(cè)定。
三維路面坐標(biāo)系如圖4所示,平面ABK表示路面,ABCD為被處于O點(diǎn)的攝像機(jī)所拍攝到的路面區(qū)域,G為攝像機(jī)光軸OG與路面的交點(diǎn),J為攝像機(jī)在路面平面上的垂直投影,OJ為攝像機(jī)的安裝高度h,x軸為路面X軸在像平面的映射軸?!螮OF為攝像機(jī)的水平視角,大小為2β,G點(diǎn)為坐標(biāo)原點(diǎn),行車前進(jìn)方向?yàn)閅軸正方向。假設(shè)點(diǎn)P(XP,YP)為障礙物目標(biāo),點(diǎn)N和點(diǎn)M分別為點(diǎn)P在Y軸和X軸上的投影。
圖4 三維路面坐標(biāo)系
攝像機(jī)所拍攝圖像如圖5所示,矩形abcd為路面ABCD的成像平面。像平面中p(xp,yp)點(diǎn)對(duì)應(yīng)路面坐標(biāo)系中P(XP,YP)點(diǎn),像平面中e、f、g、i、l、m、n點(diǎn)分別對(duì)應(yīng)路面坐標(biāo)系中E、F、G、I、L、M、N點(diǎn),H、W分別為像平面的高與寬。
圖5 二維像平面坐標(biāo)系
圖6為Y軸方向正側(cè)面攝像機(jī)成像模型。N和n點(diǎn)分別為目標(biāo)物體在路面坐標(biāo)系Y軸和像平面坐標(biāo)系y軸上的投影,因而有GN=YP和gn=yp。光軸OG與目標(biāo)在Y軸上的投影點(diǎn)N的夾角∠GON為θ0,攝像機(jī)的垂直視角∠IOL為2α,攝像機(jī)的俯仰角∠JOG為γ。y軸為路面Y軸在像平面的映射軸。
圖6 Y軸方向正側(cè)面攝像機(jī)成像模型
根據(jù)圖6由三角關(guān)系可得tanθ0的表達(dá)式
tanθ0=gn/og=2yp×tanα/H
(1)
P點(diǎn)在路面坐標(biāo)系中的Y軸坐標(biāo)
YP=GN=NJ-GJ=h(tan(γ+θ0)-tanγ)
(2)
將式(1)代入式(2),利用三角函數(shù)和差化積公式可得路面坐標(biāo)系P點(diǎn)Y軸坐標(biāo)與像平面坐標(biāo)系p點(diǎn)y軸坐標(biāo)轉(zhuǎn)換式
(3)
圖6中∠IOG大小為α,∠JOG為俯仰角γ,因此可以算出線段
GI=GJ-IJ=h(tanγ-tan(γ-α))
(4)
根據(jù)圖4中直角三角形邊長(zhǎng)關(guān)系有
(5)
(6)
根據(jù)圖4中△IKD與△FKG相似性有
(7)
將式(5)、式(6)代入式(7)得到KG的表達(dá)式
(8)
圖4中∠GOM夾角為θ1,則有
(9)
(10)
因△GKM與△NKP相似,有
(11)
從而解得P點(diǎn)的X軸坐標(biāo)值
(12)
綜上,得到障礙物目標(biāo)在三維路面坐標(biāo)與二維像平面坐標(biāo)的映射關(guān)系式如下
(13)
其中,W為圖像的寬,H為圖像的高度,h為攝像機(jī)擺放的高度,2β,2α,γ分別為攝像機(jī)的水平視角、垂直視角以及俯仰角。
通過(guò)第2節(jié)障礙物目標(biāo)檢測(cè)位置修正算法得到的目標(biāo)在像平面上坐標(biāo)p(xp,yp),代入式(13)解得路面坐標(biāo)系目標(biāo)位置P(XP,YP),利用式(14)計(jì)算出前方障礙物與本車之間的距離,即目標(biāo)P點(diǎn)至攝像機(jī)在路面垂點(diǎn)J之間的距離
(14)
在圖5像平面坐標(biāo)系中,檢測(cè)目標(biāo)距離攝像機(jī)越遠(yuǎn)則圖像上的像素代表的距離信息量越大,信息特征也越模糊,因而導(dǎo)致遠(yuǎn)距離目標(biāo)通過(guò)檢測(cè)算法所預(yù)測(cè)的位置信息偏差較大。為了進(jìn)一步提升測(cè)距的準(zhǔn)確度,本文利用三次Bezier曲線方程對(duì)障礙物的實(shí)際測(cè)量距離與算法修正后預(yù)測(cè)的距離進(jìn)行數(shù)據(jù)擬合,通過(guò)插值的方式構(gòu)建方程以降低測(cè)距誤差。
三次Bezier曲線方程為
(15)
數(shù)據(jù)點(diǎn)到曲線的偏移量為
di=[Q(ti,V)-Pi]T·[Q(ti,V)-Pi]
(16)
數(shù)據(jù)點(diǎn)到曲線的總偏移量為
(17)
為了使數(shù)據(jù)點(diǎn)到曲線的距離和最小,即D(t,V)最小,需求解三次Bezier曲線的兩個(gè)中間控制點(diǎn)V1,V2來(lái)構(gòu)建方程,求解過(guò)程如下:
對(duì)D(t,V)求V1和V2的偏導(dǎo)數(shù),令其等于0
(18)
(19)
由式(19)解得控制點(diǎn)V1、V2,即得到式(15)三次Bezier曲線方程。
本文采用圖像像素為4032×3024、焦距為4.216 ms、光圈大小為f/1.8,其橫向可視視角為65°、縱向可視視角為59.6°的廣角攝像機(jī)進(jìn)行拍攝。通過(guò)測(cè)量得到攝像機(jī)安裝高度為1.2 m,攝像機(jī)俯仰角為87.9°。程序運(yùn)行環(huán)境為Python3.6,YOLOv4目標(biāo)檢測(cè)算法基于深度學(xué)習(xí)框架Tensorflow實(shí)現(xiàn),版本號(hào)為1.11,并行計(jì)算庫(kù)為CUDA Toolkit 9+cuDNN 7.1。檢測(cè)到的障礙物使用矩形框表示其位置,目標(biāo)識(shí)別結(jié)果及測(cè)距結(jié)果顯示在矩形框上。經(jīng)過(guò)檢測(cè)框位置調(diào)整后的部分結(jié)果如圖7所示。
圖7 檢測(cè)框調(diào)整后的測(cè)距結(jié)果
在路面上分別將障礙物汽車放置在距離攝像機(jī)5 m~80 m處,每間隔5 m測(cè)距一次,并隨機(jī)在路面上放置車輛進(jìn)行測(cè)距,共測(cè)得60組實(shí)際測(cè)量距離和算法初始測(cè)量距離共120個(gè)距離數(shù)據(jù),表1的第一和第二列呈現(xiàn)了其中14組距離數(shù)據(jù)。表1第三列是利用Canny算子檢測(cè)目標(biāo)底邊修正目標(biāo)位置后的測(cè)距結(jié)果。數(shù)據(jù)表明,檢測(cè)目標(biāo)距離越遠(yuǎn),目標(biāo)檢測(cè)算法所得檢測(cè)框位置誤差引起的測(cè)距誤差也越大,而本文提出的檢測(cè)框位置修正方法,起到了較大幅度降低測(cè)量誤差的作用。檢測(cè)框調(diào)整前平均誤差為6.21 m,調(diào)整后的平均誤差為1.504 m。
通過(guò)第4節(jié)三次Bezier曲線擬合算法,將60組實(shí)際測(cè)量距離和檢測(cè)框位置修正后的測(cè)距結(jié)果代入式(19)解得控制點(diǎn)V1、V2,結(jié)合控制點(diǎn)V0=P0、V3=Pn(曲線的首尾控制點(diǎn)分別等于曲線的起點(diǎn)和終點(diǎn)),代入式(15),展開(kāi)三次Bezier曲線x、y參數(shù)方程得到如式(20)所示
(20)
將經(jīng)過(guò)檢測(cè)框位置修正后的測(cè)量距離代入式(20),即可得到擬合后的距離,曲線擬合后的測(cè)量距離見(jiàn)表1第4列,根據(jù)Bezier曲線性質(zhì)起點(diǎn)和終點(diǎn)誤差為0。檢測(cè)框位置修正后的平均誤差距離為1.504 m,而三次Bezier曲線擬合后的平均誤差距離為0.776 m,通過(guò)擬合使測(cè)距誤差大大減小。
表1 測(cè)距結(jié)果
圖8為三次Bezier曲線擬合結(jié)果,圖中圓點(diǎn)為表1中14組位置修正后測(cè)量距離數(shù)據(jù)點(diǎn),三角形為曲線控制點(diǎn)。
圖8 三次Bezier曲線擬合結(jié)果
實(shí)驗(yàn)結(jié)果表明,在實(shí)際距離5 m~50 m之間,平均誤差距離為0.5356 m,最大誤差為1.0952 m,實(shí)際距離大于50 m后,由于檢測(cè)目標(biāo)在圖像上所占像素區(qū)域變小造成測(cè)距誤差增大,當(dāng)實(shí)際距離70 m時(shí),測(cè)距誤差最大為2.362 m。
本文與文獻(xiàn)[4]中表1、文獻(xiàn)[6]中表4和文獻(xiàn)[15]中表1中所示的測(cè)距結(jié)果數(shù)據(jù)進(jìn)行比較,相同距離下的測(cè)距誤差均有較大幅降低。其原因之一是本文進(jìn)行了檢測(cè)目標(biāo)位置修正,減小了目標(biāo)檢測(cè)算法引起的目標(biāo)位置偏差,而文獻(xiàn)[15]中所采用的差分檢測(cè)方法不能較準(zhǔn)確檢測(cè)出目標(biāo)的實(shí)際位置,且未進(jìn)行位置修正;其二是本文對(duì)測(cè)距算法進(jìn)行優(yōu)化,并對(duì)測(cè)量數(shù)據(jù)進(jìn)行了曲線擬合,使得算法測(cè)距更接近實(shí)際距離,而文獻(xiàn)[4]和文獻(xiàn)[6]中測(cè)距方法易受到車輛水平偏移的影響。
本文基于單目視覺(jué)系統(tǒng),提出了一種行進(jìn)車輛前方障礙物距離測(cè)量方法。利用基于深度學(xué)習(xí)的目標(biāo)檢測(cè)YOLOv4算法對(duì)車輛前方障礙物進(jìn)行檢測(cè),解決了傳統(tǒng)障礙物檢測(cè)算法泛化性差且僅能檢測(cè)單一障礙物的問(wèn)題;針對(duì)目標(biāo)檢測(cè)算法框定目標(biāo)位置信息不準(zhǔn)確問(wèn)題,利用改進(jìn)的Canny算子進(jìn)行邊緣檢測(cè)獲取目標(biāo)實(shí)際位置,通過(guò)計(jì)算檢測(cè)框底邊位置縱向坐標(biāo)差對(duì)目標(biāo)位置進(jìn)行調(diào)整;基于攝像機(jī)投影模型,通過(guò)幾何推導(dǎo)建立測(cè)距模型,并用三次Bezier曲線擬合測(cè)距數(shù)據(jù)。實(shí)驗(yàn)結(jié)果表明,本文方法較大幅度提高了障礙物測(cè)距的準(zhǔn)確性和效率,能夠滿足日常車輛防碰撞預(yù)警的需求。