劉 晨,葉 浩,張德龍,趙興哲
(東北大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,遼寧 沈陽(yáng) 110819)
隨著車聯(lián)網(wǎng)及人工智能技術(shù)的進(jìn)步,傳統(tǒng)汽車正逐步向智能化方向發(fā)展。智能車的發(fā)展定位已從車聯(lián)網(wǎng)的組成部分,上升到國(guó)家戰(zhàn)略層面[1]。
車輛行駛控制是智能車的技術(shù)基礎(chǔ)之一,車載攝像頭是車輛感知外界信息時(shí)最常用的傳感器,結(jié)合深度學(xué)習(xí)算法,可實(shí)現(xiàn)道路場(chǎng)景中目標(biāo)的檢測(cè)與識(shí)別,包括車道線檢測(cè)、交通標(biāo)志識(shí)別和交通信號(hào)燈檢測(cè)等[2]。傳統(tǒng)的目標(biāo)檢測(cè)方法對(duì)于場(chǎng)景要求較高,魯棒性較差,很難在真實(shí)的道路場(chǎng)景中應(yīng)用[3]。而基于深度學(xué)習(xí)的檢測(cè)方法通常復(fù)雜度較高,計(jì)算量過(guò)大,無(wú)法保證檢測(cè)速度[4-6]。
本文提出了一種基于深度學(xué)習(xí)的智能車行駛控制方法,通過(guò)U-Net 網(wǎng)絡(luò)模型完成車道線檢測(cè),提升檢測(cè)速度的同時(shí)保證了檢測(cè)效果和抗干擾能力,使用YOLO 模型實(shí)現(xiàn)了道路標(biāo)識(shí)識(shí)別。在實(shí)現(xiàn)上述功能的基礎(chǔ)下,設(shè)計(jì)沿車道線行駛的PID 算法模型,并設(shè)計(jì)控制無(wú)人行駛的智能車行為狀態(tài)機(jī),以應(yīng)對(duì)復(fù)雜交通情況。該方法可以自動(dòng)識(shí)別車道線,實(shí)現(xiàn)智能車無(wú)干預(yù)實(shí)時(shí)校正行駛方向,同時(shí)通過(guò)識(shí)別車道標(biāo)識(shí)、紅綠燈等道路目標(biāo),正確及時(shí)地進(jìn)行行駛控制。
系統(tǒng)通過(guò)車載MX219 廣角攝像頭實(shí)時(shí)進(jìn)行環(huán)境信息感知,利用U-Net 網(wǎng)絡(luò)進(jìn)行車道線檢測(cè),并將檢測(cè)性能與傳統(tǒng)計(jì)算機(jī)視覺(jué)算法進(jìn)行對(duì)比。同時(shí)基于YOLO 深度學(xué)習(xí)模型,使用分割與灰度計(jì)算的方案進(jìn)行障礙物和交通燈識(shí)別。最后在模擬的道路場(chǎng)景中進(jìn)行測(cè)試,基于車輛行駛的有限狀態(tài)機(jī)和PID 算法,完成車輛的行駛控制。系統(tǒng)工作流程如圖1 所示。
圖1 智能車行駛控制系統(tǒng)基本工作流程圖
車道線檢測(cè)是系統(tǒng)的關(guān)鍵部分,也是系統(tǒng)實(shí)現(xiàn)的難點(diǎn),需要同時(shí)考慮速度與精度。由于車道圖像具有復(fù)雜度高、圖像邊界不清晰等特點(diǎn),而基于Encoder-Decoder 結(jié)構(gòu)的U-Net 網(wǎng)絡(luò)通過(guò)下采樣和上采樣結(jié)合、底層信息和高層信息結(jié)合的方式,可以顯著提高分割的精度,因此決定使用U-Net 網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行車道線檢測(cè)[7-9],車道線檢測(cè)工作流程如圖2 所示。
圖2 車道線檢測(cè)工作流程圖
①數(shù)據(jù)采集
首先收集數(shù)據(jù)集并進(jìn)行標(biāo)注,攝像頭進(jìn)行圖片采集,并使用Labelme 進(jìn)行標(biāo)定,將黃線標(biāo)定為lane1,將虛線標(biāo)定為lane2,得到相應(yīng)的json 數(shù)據(jù)。之后將json 數(shù)據(jù)批量處理,得到相應(yīng)圖片和mask,自行采集的圖片數(shù)據(jù)集如圖3 所示。
圖3 自行采集圖片數(shù)據(jù)集
②模型訓(xùn)練
使用U-Net 模型進(jìn)行訓(xùn)練,同時(shí)進(jìn)行了適當(dāng)?shù)男薷?初始學(xué)習(xí)率設(shè)置為0.001 到0.005,衰減率設(shè)置為0.1,訓(xùn)練的輪數(shù)比較多,設(shè)置為1 000 輪左右,每20 次輪數(shù)進(jìn)行驗(yàn)證,每200 次左右調(diào)整學(xué)習(xí)效率,觀察驗(yàn)證集loss,在400 個(gè)epoch 之后驗(yàn)證集loss 便不會(huì)再下降,如圖4 所示,說(shuō)明模型已經(jīng)訓(xùn)練成熟。最后保存模型權(quán)重文件Unet.pt。
圖4 訓(xùn)練loss 情況
③TensorRT 加速推斷
將訓(xùn)練好的U-Net 模型unet.pt 轉(zhuǎn)換成unet.onnx;隨后將unet.onnx 轉(zhuǎn)換得到Unet.trt 工程文件進(jìn)行模型加速。分別運(yùn)行加速推斷與非加速推斷,打印耗費(fèi)時(shí)間,對(duì)比其速度。并且將推斷過(guò)程中的圖片進(jìn)行可視化,方便查看深度學(xué)習(xí)模型的推斷效果。
④霍夫直線檢測(cè)
使用cv2.HoughLinesP()函數(shù)對(duì)U-Net 輸出的圖像進(jìn)行檢測(cè)直線,在工程中通過(guò)可視化輸出圖像,選取最佳的相關(guān)參數(shù)為threshold =10,min_line_len =8,max_line_gap =12,并且打印霍夫直線檢測(cè)的耗費(fèi)時(shí)間。
⑤計(jì)算模塊
計(jì)算模塊的工作流程如圖5 所示。首先計(jì)算出兩邊車道線的特定P 點(diǎn)的位置,通過(guò)P 點(diǎn)位置,計(jì)算兩車道線的中位線,以確定小車的行進(jìn)方向。通過(guò)顏色閾值和長(zhǎng)度閾值判斷車道線是實(shí)線或虛線、白線或黃線,這兩個(gè)閾值可以通過(guò)測(cè)試場(chǎng)地情況進(jìn)行調(diào)整。同時(shí),計(jì)算車道中心點(diǎn)到中位線的距離,即偏移距離。將計(jì)算信息送進(jìn)PID 算法模塊,控制小車沿車道線行駛。
圖5 計(jì)算模塊工作流程圖
YOLO 模型是基于一個(gè)獨(dú)立的end-to-end 網(wǎng)絡(luò),將物體檢測(cè)作為回歸問(wèn)題求解,將候選區(qū)和對(duì)象識(shí)別合二為一[10]。YOLO 模型結(jié)構(gòu)簡(jiǎn)單,由24 個(gè)卷積層與2 個(gè)全連接層組成,因?yàn)槟P筒粌H需要預(yù)測(cè)對(duì)象概率,還需要對(duì)邊框的位置進(jìn)行預(yù)測(cè),故而與其他網(wǎng)絡(luò)不同,以線性函數(shù)作為輸出層的激活函數(shù)[11-12]。
車道標(biāo)識(shí)以及車道內(nèi)可能出現(xiàn)物體的識(shí)別需要較快的速度才能留有足夠時(shí)間供車輛準(zhǔn)確進(jìn)行駕駛操作以及及時(shí)應(yīng)對(duì)突發(fā)情況,故而選擇網(wǎng)絡(luò)較為簡(jiǎn)單、識(shí)別效率高的YOLO 模型。
2.2.1 識(shí)別道路標(biāo)識(shí)
①數(shù)據(jù)采集
通過(guò)攝像頭采集車道環(huán)境圖片,并使用LabelImg 進(jìn)行標(biāo)定。對(duì)于車道環(huán)境中可能出現(xiàn)的標(biāo)識(shí)與物體設(shè)置了8 種標(biāo)簽,并在標(biāo)定的過(guò)程中,保持8 種標(biāo)簽的數(shù)量基本接近,以防出現(xiàn)深度學(xué)習(xí)模型過(guò)擬合的情況。每種標(biāo)簽的數(shù)量基本在200 張左右,如圖6 所示。
圖6 物體標(biāo)簽數(shù)量
②YOLO 模型訓(xùn)練
用xml 格式的標(biāo)簽以其對(duì)應(yīng)的圖片生成相對(duì)應(yīng)的train.txt 和val.txt,進(jìn)而使用開(kāi)源的YOLOV5 模型開(kāi)源代碼,將其中的訓(xùn)練參數(shù)flip_lr 參數(shù)應(yīng)該設(shè)置成0,禁止對(duì)輸入圖像進(jìn)行翻轉(zhuǎn),以防YOLO 模型區(qū)別左轉(zhuǎn)或右轉(zhuǎn)標(biāo)識(shí)時(shí)“左右不分”。最后保存模型權(quán)重文件YOLO.pt。
③TensorRT 加速推斷
將YOLO.pt 通過(guò)YOLO.onnx 轉(zhuǎn)換成YOLO.trt,進(jìn)行模型加速。分別運(yùn)行加速推斷與非加速推斷,打印耗費(fèi)時(shí)間,對(duì)比其速度。并且將推斷過(guò)程中的圖片進(jìn)行可視化,方便查看深度學(xué)習(xí)模型的推斷效果。
2.2.2 交通燈識(shí)別
在YOLO.trt 模型識(shí)別出交通燈的基礎(chǔ)上,得到交通燈BOX 的具體位置,即一個(gè)矩形BOX。對(duì)該交通燈的矩形進(jìn)行三等分割,隨后將RGB 圖像轉(zhuǎn)換成灰度圖像,計(jì)算每個(gè)色塊的灰度,取灰度最大的色塊,該色塊即亮燈的色塊。再根據(jù)交通燈的色塊順序“紅、黃、綠”,來(lái)判斷此時(shí)交通燈的信號(hào)狀態(tài)。
智能車的控制模塊由上位機(jī)和下位機(jī)組成。上位機(jī)負(fù)責(zé)圖像采集、視覺(jué)識(shí)別、行動(dòng)決策、PID 控制,下位機(jī)負(fù)責(zé)控制電機(jī)和舵機(jī),操縱智能車行動(dòng)。設(shè)計(jì)了智能車自主行駛控制決策核心的有限狀態(tài)機(jī)[13],用于接受環(huán)境信息,并對(duì)環(huán)境信息進(jìn)行分析,進(jìn)行智能決策,接著將決策信息傳給PID 控制算法模型,最后向阿克曼模型傳送速度和角度,向電機(jī)和舵機(jī)傳送信息,以控制智能車的行駛。行駛控制流程如圖7 所示。
圖7 車輛行駛控制工作流程圖
2.3.1 智能車行駛控制決策核心的有限狀態(tài)機(jī)
智能車行駛控制決策核心的有限狀態(tài)機(jī)共有五種狀態(tài),將各種狀態(tài)封裝為一個(gè)函數(shù),通過(guò)判斷環(huán)境信息來(lái)調(diào)用不同的函數(shù),進(jìn)入不同的狀態(tài),如圖8所示。
圖8 有限狀態(tài)機(jī)邏輯示意圖
①停止:此為初始狀態(tài),為了防止智能車沖撞行人或者違反交通規(guī)則,其他四個(gè)狀態(tài)都有可能變成停止?fàn)顟B(tài)。
②循跡前進(jìn):根據(jù)車道線信息,若前方無(wú)任何障礙,便循跡前進(jìn)。
③減速:遇見(jiàn)障礙物的情況下,先進(jìn)入減速狀態(tài),并進(jìn)行后續(xù)判斷。
④變道:遇見(jiàn)路障的情況下,越過(guò)虛線向旁邊車道進(jìn)行變道。
⑤轉(zhuǎn)彎:遇見(jiàn)路口的情況下,進(jìn)入轉(zhuǎn)彎狀態(tài)。
使用python3 面向?qū)ο蟮恼Z(yǔ)言特性,將狀態(tài)機(jī)封裝為一個(gè)類,將各種狀態(tài)封裝為一個(gè)函數(shù),通過(guò)判斷環(huán)境信息來(lái)調(diào)用不同的函數(shù),進(jìn)入不同的狀態(tài)。在實(shí)際編程實(shí)現(xiàn)中,代碼邏輯比較復(fù)雜,但是其思想基本符合上文中描述的行為狀態(tài)機(jī)。通過(guò)狀態(tài)機(jī),可以更方便地管理智能車的行為狀態(tài)與代碼邏輯,針對(duì)環(huán)境信息做出相應(yīng)的智能決策。
2.3.2 PID 控制算法
采用PID 控制算法來(lái)控制智能車行駛的角度與速度。輸入速度或角度信息之后,通過(guò)比例、積分和微分的調(diào)節(jié),將之傳給執(zhí)行結(jié)構(gòu)電機(jī)和舵機(jī),控制小車速度和角度,小車在行駛過(guò)程中不斷測(cè)量與車道線和其他物體的距離,將此距離傳回輸入,繼而間接對(duì)其輸出進(jìn)行調(diào)整,形成閉環(huán)控制[14]。
①控制角度
當(dāng)小車處于循跡或減速前進(jìn)狀態(tài)時(shí),需要控制其角度,保證小車沿車道線行駛,通過(guò)與物體的距離不斷調(diào)節(jié)小車的行駛角度,防止其壓線。速度則保持不變。
②控制速度
當(dāng)小車遇見(jiàn)斑馬線、行人、紅綠燈時(shí),會(huì)進(jìn)入減速狀態(tài),在減速狀態(tài)下需要控制速度,通過(guò)計(jì)算與物體的距離不斷調(diào)節(jié)智能車的速度,保證小車在斑馬線前減速。
2.3.3 阿克曼運(yùn)動(dòng)模型
采用阿克曼運(yùn)動(dòng)模型控制車輛的運(yùn)動(dòng),首先要對(duì)車輛的運(yùn)動(dòng)建立數(shù)字化模型,模型建立得越準(zhǔn)確,對(duì)車輛運(yùn)動(dòng)的描述越準(zhǔn)確,對(duì)車輛的跟蹤控制的效果就越好。
①阿克曼運(yùn)動(dòng)模型原理
小車在轉(zhuǎn)彎時(shí),后輪的行駛時(shí)間相同,但是后輪內(nèi)輪和后輪外輪行駛距離不同。轉(zhuǎn)彎的時(shí)候后輪內(nèi)輪比后輪外輪轉(zhuǎn)速慢,但是轉(zhuǎn)彎的角速度相同,故可推出后輪內(nèi)輪的轉(zhuǎn)彎半徑小于后輪外輪。傳統(tǒng)汽車的模型是使用機(jī)械差速器來(lái)輔助完成差速,近年來(lái)電動(dòng)汽車的發(fā)展為本文實(shí)現(xiàn)阿克曼模型提供了新思路。由于電動(dòng)汽車使用兩個(gè)電機(jī)直接驅(qū)動(dòng)后輪,所以可以通過(guò)對(duì)兩個(gè)電機(jī)的差速控制來(lái)實(shí)現(xiàn)等價(jià)的效果[15]。
與此同時(shí),前輪內(nèi)側(cè)輪胎的轉(zhuǎn)彎半徑小于前輪外側(cè)輪胎,前輪的內(nèi)外輪轉(zhuǎn)過(guò)的角度也不一樣。在車輛沿著彎道轉(zhuǎn)彎時(shí),利用四連桿的相等曲柄可以使內(nèi)側(cè)輪的轉(zhuǎn)向角比外側(cè)輪大約2°~4°,同時(shí)使四個(gè)輪子路徑的圓心大致上相交于后軸的延長(zhǎng)線上瞬時(shí)轉(zhuǎn)向中心,從而使車輛能夠順利轉(zhuǎn)彎。
②阿克曼模型運(yùn)動(dòng)學(xué)分析
由于只采用一個(gè)舵機(jī)帶動(dòng)曲柄來(lái)控制小車的轉(zhuǎn)向,故可以用圖9 對(duì)小車的運(yùn)動(dòng)進(jìn)行分析。
圖9 小車運(yùn)動(dòng)分析
設(shè)舵機(jī)控制轉(zhuǎn)角為θ,車前進(jìn)速度為V,前后輪中心距為L(zhǎng),后輪輪距為T,后轉(zhuǎn)彎內(nèi)測(cè)輪速度為V1,轉(zhuǎn)彎外側(cè)輪速度為V2。
四連桿的相等曲柄,使四個(gè)輪子路徑的圓心大致上相交于后軸的延長(zhǎng)線上瞬時(shí)轉(zhuǎn)向中心。
因?yàn)榻撬俣纫粯?,故有下列關(guān)系式成立:
因?yàn)槭菍?duì)速度進(jìn)行控制,對(duì)V1和V2進(jìn)行求解可以得到:
③基于阿克曼模型轉(zhuǎn)向的關(guān)鍵變量
為實(shí)現(xiàn)小車在轉(zhuǎn)向時(shí),兩個(gè)后輪的差速控制,那么根據(jù)上面推導(dǎo)出來(lái)的公式,需要兩個(gè)變量,即需要控制者給出:小車的平均轉(zhuǎn)向速度V和小車的轉(zhuǎn)向角度θ。
沿車道線行駛是車輛自主行駛最基本的功能,實(shí)時(shí)性和識(shí)別效果是重要的測(cè)試指標(biāo),基于模擬的道路場(chǎng)景在智能車搭載的Jatson Nano 平臺(tái)中設(shè)置測(cè)試方案,并將測(cè)試結(jié)果與傳統(tǒng)的計(jì)算機(jī)視覺(jué)方案進(jìn)行對(duì)比。
①速度指標(biāo)
分別運(yùn)行U-Net 方案和傳統(tǒng)視覺(jué)方案兩種程序,通過(guò)攝像頭采集圖片,圖片大小為256×256,并通過(guò)time()函數(shù)記錄處理速度,表1 列出了單張圖片的各項(xiàng)流程的處理速度。
表1 單張圖片處理速度對(duì)比
從表1 可以看出,本文提出的基于U-Net 深度學(xué)習(xí)模型方案的單張圖片處理速度能達(dá)到接近26 FPS 的處理速度,傳統(tǒng)計(jì)算機(jī)視覺(jué)方案由于手工處理后的圖片噪聲和細(xì)短直線多,導(dǎo)致霍夫變換直線檢測(cè)的速度慢,拖累了處理速度,檢測(cè)速度只有8 FPS。本文提出的模型方案在圖片處理速度上較傳統(tǒng)視覺(jué)方案有顯著提升。
②檢測(cè)效果
從圖10(a)的右側(cè)圖可以發(fā)現(xiàn)U-Net 網(wǎng)絡(luò)正確識(shí)別出了所有的車道線,在后續(xù)的圖片中通過(guò)程序?qū)嚨谰€進(jìn)行特定處理,篩選近處的車道。最右側(cè)圖表示已經(jīng)正確識(shí)別出車道線,并且能很好地抑制反光效果。而由圖10(b)的右側(cè)圖片則可以發(fā)現(xiàn)傳統(tǒng)方案的識(shí)別效果不清晰,雖然在錄像視頻上處理效果很好,但在實(shí)地測(cè)試效果中,會(huì)受到光照的影響。在行駛過(guò)程中若速度過(guò)高,會(huì)出現(xiàn)偏離道路的情況。
圖10 實(shí)際檢測(cè)效果對(duì)比
③抗干擾能力
路口存在著斑馬線,容易對(duì)識(shí)別造成干擾。首先,斑馬線與車道線的斜率一致,計(jì)算機(jī)容易將其識(shí)別成車道線。其次,智能車需停在斑馬線前往遠(yuǎn)處識(shí)別車道線,而遠(yuǎn)距離車道線識(shí)別很困難。這對(duì)于車輛自主行駛是需要克服的困難。
圖11(a)的右側(cè)圖片顯示出U-Net 網(wǎng)絡(luò)正確識(shí)別出了遠(yuǎn)處的車道線,而排除了近處的斑馬線,因此在后續(xù)的圖片中可以看到,程序?qū)嚨谰€進(jìn)行正確地處理,正確識(shí)別出車道線。但是在圖11(b)右側(cè)圖中斑馬線是一個(gè)很大的影響因素,而且遠(yuǎn)處的車道線并沒(méi)有識(shí)別出來(lái)。在實(shí)際場(chǎng)地的測(cè)試過(guò)程中,利用傳統(tǒng)計(jì)算機(jī)視覺(jué)方案的智能車在穿越路口的時(shí)候會(huì)出現(xiàn)偏離道路的情況。因此U-Net 模型方案更加穩(wěn)定。
圖11 干擾情況下檢測(cè)效果對(duì)比
3.2.1 識(shí)別道路標(biāo)識(shí)和行人
將YOLO 模型訓(xùn)練之后的進(jìn)行測(cè)試,測(cè)試效果如圖12 所示,可以看到其驗(yàn)證的損失很小,分類準(zhǔn)確率接近1,可以達(dá)到很好的識(shí)別效果。
圖12 YOLO 模型測(cè)試效果
使用保存的YOLO.pt 文件放進(jìn)平臺(tái)中進(jìn)行實(shí)地推斷測(cè)試,圖13 為YOLO 模型的實(shí)地測(cè)試效果。從圖中可以看出智能車能識(shí)別出遠(yuǎn)處的障礙、行人、左轉(zhuǎn)標(biāo)識(shí)以及紅綠燈,并打上框和標(biāo)簽,方便決策系統(tǒng)做后續(xù)的處理。
圖13 YOLO 模型實(shí)地測(cè)試效果
3.2.2 紅綠燈識(shí)別
紅綠燈實(shí)地檢測(cè)效果如圖14 所示,將紅綠燈放在斑馬線對(duì)面,智能車停在斑馬線前進(jìn)行識(shí)別,可以識(shí)別出此時(shí)綠燈的灰度最高,因此識(shí)別為綠燈,可以通行。
圖14 紅綠燈檢測(cè)效果
通過(guò)運(yùn)行該狀態(tài)機(jī),基于環(huán)境信息來(lái)管理智能車的各種狀態(tài),進(jìn)行智能決策。在模擬的道路場(chǎng)景中進(jìn)行測(cè)試,小車從指定起點(diǎn)行駛到終點(diǎn)過(guò)程中可以準(zhǔn)確完成表2 中的內(nèi)容,實(shí)現(xiàn)智能車行駛控制。
表2 車輛完成內(nèi)容
本文提出的基于深度學(xué)習(xí)的智能車行駛控制方法,可以準(zhǔn)確識(shí)別車道線和道路標(biāo)識(shí)。測(cè)試結(jié)果表明,該方法可以在模擬的道路場(chǎng)景中準(zhǔn)確完成車道線檢測(cè)和標(biāo)識(shí)識(shí)別,且在車道線檢測(cè)方面較傳統(tǒng)的計(jì)算機(jī)視覺(jué)方案在檢測(cè)速度、檢測(cè)效果及抗干擾能力等方面均得到提升。