王樹磊,趙景波,趙 杰,劉逍遙,張大煒
(常州工學(xué)院 汽車工程學(xué)院, 江蘇 常州 213032)
端到端無人駕駛決策目前主要采用深度學(xué)習(xí)(或稱為行為克隆,behavior cloning)和強(qiáng)化學(xué)習(xí)兩種研究方法[7]。深度學(xué)習(xí)方法依賴預(yù)先采集的數(shù)據(jù)集。Somda等[8]最早提出端到端駕駛模型,采用的是3層全連接網(wǎng)絡(luò)。Chen等[9]搭建了一個(gè)6層的卷積網(wǎng)絡(luò),通過安裝在機(jī)器人小車前的2個(gè)無線相機(jī)獲取的圖像進(jìn)行預(yù)測,得到小車的轉(zhuǎn)向角,從而實(shí)現(xiàn)野外環(huán)境下的避障。Chen等[6,10]通過卷積神經(jīng)網(wǎng)絡(luò)建立端到端控制模型PilotNet,并用于預(yù)測車輛在自動(dòng)駕駛時(shí)的轉(zhuǎn)向角。Wang等[11]利用長短期記憶(long shor-term memory,LSTM)神經(jīng)網(wǎng)絡(luò)提高了跟車模型的精度。田晟等[12]提出一種基于端到端學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)-長短時(shí)記憶(convolutional neural network-long short term memory,CNN-LSTM)多模態(tài)神經(jīng)網(wǎng)絡(luò)模型,采用ResNet50完成方向盤轉(zhuǎn)向角的預(yù)測,采用LSTM完成車輛速度的預(yù)測,從而實(shí)現(xiàn)自動(dòng)駕駛的橫縱向控制。
近年來,基于強(qiáng)化學(xué)習(xí)的方法也得到了較為廣泛的研究[13-14],該方法的出發(fā)點(diǎn)是通過不斷的探索和改進(jìn)來學(xué)習(xí)相應(yīng)的策略[15-16]。這種方式不需要預(yù)先采集數(shù)據(jù)集,但是高度依賴自動(dòng)駕駛仿真工具[16],如CARLA,車輛在這種仿真環(huán)境中不斷地“進(jìn)化”。黃志清等[3]基于DDPG(deep deterministic policy gradient)的深度強(qiáng)化學(xué)習(xí)算法對連續(xù)型動(dòng)作輸出的端到端駕駛決策展開研究,在建立端到端決策控制模型的基礎(chǔ)上,根據(jù)連續(xù)獲取的車輛轉(zhuǎn)向角、車輛速度、道路距離等信息,輸出駕駛動(dòng)作(加速、剎車、專項(xiàng))的連續(xù)控制量。陳鑫等[17]將改進(jìn)深度強(qiáng)化學(xué)習(xí)用于汽車的自動(dòng)泊車過程中的路徑規(guī)劃,所設(shè)計(jì)的網(wǎng)絡(luò)具有較強(qiáng)的規(guī)劃能力和健壯性。
本文針對一款人工智能小車,受He等[18]所設(shè)計(jì)的ResNet-v2啟發(fā),對PilotNet網(wǎng)絡(luò)進(jìn)行改進(jìn),通過手動(dòng)遙控小車完成圖像數(shù)據(jù)的采集,并將此時(shí)對應(yīng)的速度和橫擺角速度記錄下來作為標(biāo)簽。接下來對網(wǎng)絡(luò)進(jìn)行訓(xùn)練,從而預(yù)測出小車在特定場景下的運(yùn)動(dòng)速度和轉(zhuǎn)向角,最終通過實(shí)驗(yàn)證明所設(shè)計(jì)的網(wǎng)絡(luò)能夠較好地保證小車沿著地圖上的車道線運(yùn)動(dòng)。
使用小車為RobotCAR,如圖1所示。該小車的底盤使用基于Arduino的ATmage2560微控制器,配合4個(gè)電機(jī)驅(qū)動(dòng)器、超聲波傳感器、紅外傳感器、角加速度傳感器和電子羅盤等多種傳感器,其硬件系統(tǒng)組成如圖2所示。
圖1 RobotCAR小車
圖2 小車硬件系統(tǒng)組成
該小車以深度學(xué)習(xí)開源框架百度飛槳(PaddlePaddle)為基礎(chǔ),采用分布式、結(jié)構(gòu)化軟件設(shè)計(jì)框架,實(shí)現(xiàn)數(shù)據(jù)深度學(xué)習(xí)中的采集、訓(xùn)練和部署全過程。小車配有2個(gè)攝像頭,攝像頭1獲取的圖片用于預(yù)測小車的運(yùn)動(dòng)速度和轉(zhuǎn)向角;攝像頭2獲取的圖片用于識(shí)別交通標(biāo)志。本文重點(diǎn)針對攝像頭1獲取的數(shù)據(jù)進(jìn)行處理,以便完成小車沿車道行駛時(shí)的縱向和橫向控制。
小車的跑道如圖3所示。
圖3 跑道示意圖
獲取數(shù)據(jù)時(shí),用手柄控制小車在跑道內(nèi)移動(dòng),通過攝像頭1采集跑道圖像,攝像頭的分辨率為424×240,并將手柄發(fā)出的小車速度信號(hào)和轉(zhuǎn)向角速度信號(hào)記錄下來,作為訓(xùn)練時(shí)的標(biāo)簽。小車沿跑道運(yùn)動(dòng)1圈,可以采集到2 000多幅圖像和相應(yīng)的標(biāo)簽。之后,從其中抽出90%作為訓(xùn)練集,10%作為測試集。
采用SPSS 23.0統(tǒng)計(jì)學(xué)軟件對數(shù)據(jù)進(jìn)行處理,計(jì)量資料以“±s”表示,不同性別心肺耐力比較采用獨(dú)立樣本t檢驗(yàn),不同年齡段、體重指數(shù)和體力活動(dòng)水平的心肺耐力比較采用單因素方差分析。以P<0.05為差異有統(tǒng)計(jì)學(xué)意義。
從圖3中可以看出,跑道是由明顯的色塊組成,因此,對采集到的圖像進(jìn)行二值化處理,以便于提取對訓(xùn)練有用的跑道信息。二值化之后的圖像如圖4所示。
圖4 二值化處理后得到的圖像
PilotNet是英偉達(dá)和谷歌的工程師們共同構(gòu)建的一個(gè)網(wǎng)絡(luò),旨在讓神經(jīng)網(wǎng)絡(luò)通過學(xué)習(xí)人類的操作方式來駕駛汽車。通過對有道路分割線和無道路分割線、鄉(xiāng)間小路和高速公路以及不同光照和天氣下的道路進(jìn)行采集,最終,經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)能夠在沒有駕駛員干預(yù)的情況下駕駛實(shí)驗(yàn)用車。PilotNet的網(wǎng)絡(luò)模型架構(gòu)如圖5所示。
圖5 PilotNet網(wǎng)絡(luò)架構(gòu)
將該網(wǎng)絡(luò)的輸入設(shè)置為分辨率為120×120的圖片,此時(shí),PilotNet的網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)信息如表1所示。
表1 PilotNet網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)信息
該網(wǎng)絡(luò)需要優(yōu)化的參數(shù)共計(jì)239 419個(gè),使用均方誤差作為損失函數(shù)進(jìn)行訓(xùn)練。使用該模型時(shí),得到的訓(xùn)練結(jié)果如圖6所示。
圖6 PilotNet網(wǎng)絡(luò)的均方誤差
被控對象的車載主控電腦通過USB接口與底層的單片機(jī)進(jìn)行通訊,單片機(jī)使用PWM信號(hào)控制4個(gè)電機(jī)的運(yùn)動(dòng)。對于RobotCAR使用Pilot時(shí),其輸出僅作為轉(zhuǎn)向角信號(hào),信號(hào)的范圍為1 000~2 000,當(dāng)PWM的值為1 500時(shí),車輛直行;1 000和2 000分別表示以最大的轉(zhuǎn)向角向左轉(zhuǎn)彎和向右轉(zhuǎn)彎。對于速度信號(hào),其數(shù)據(jù)的范圍也為1 000~2 000,當(dāng)PWM的值為1 500時(shí),車輛速度為0; 1 000 和 2 000分別表示以最大的速度前進(jìn)或后退。
將圖6中測試誤差和訓(xùn)練誤差較小的epoch進(jìn)行局部放大,得到的曲線如圖7所示。
圖7 PilotNet網(wǎng)絡(luò)的均方誤差(局部放大)
從圖7可以看出,對于PilotNet,在測試集上的最小誤差為18 000左右,如果換算成轉(zhuǎn)向角的指令,平均誤差約為±134。從實(shí)際部署的效果來看,該網(wǎng)絡(luò)雖然能夠控制RobotCAR沿著跑道運(yùn)動(dòng),但是有時(shí)會(huì)出現(xiàn)壓到車道線邊沿的情況。
另外,從整體的圖像上來看,雖然網(wǎng)絡(luò)在訓(xùn)練集上的誤差隨著迭代減小,但是測試集的誤差變化較大,說明網(wǎng)絡(luò)存在過擬合的現(xiàn)象。雖然本文在 PilotNet的基礎(chǔ)上引入了2層的dropout層,但是仍然存在過擬合的現(xiàn)象,整體的測試誤差不夠理想。另外,原始的PilotNet僅能對小車的轉(zhuǎn)向角進(jìn)行預(yù)測,不能夠預(yù)測小車的運(yùn)動(dòng)速度,在實(shí)際部署時(shí),車輛一直保持一個(gè)恒定的速度運(yùn)動(dòng),當(dāng)運(yùn)動(dòng)在較為平直的路線上時(shí),車的運(yùn)動(dòng)速度較慢;而當(dāng)運(yùn)動(dòng)在彎道時(shí),運(yùn)動(dòng)速度又過快,也是導(dǎo)致被控RobotCAR在轉(zhuǎn)彎時(shí)壓到車道線的原因之一。
針對本文中的控制對象,對PilotNet進(jìn)行改進(jìn),總的思路為:在網(wǎng)絡(luò)中引入批量歸一化(batch normalization,BN)可以減輕網(wǎng)絡(luò)中的過擬合;同時(shí),適當(dāng)減小網(wǎng)絡(luò)的深度;在此基礎(chǔ)上,根據(jù)文獻(xiàn)[19]中的結(jié)論,將BN和ReLU激活函數(shù)放到卷積操作之前,可以有效解決梯度消失的問題;并且將RobotCAR的運(yùn)動(dòng)速度也作為網(wǎng)絡(luò)的輸出之一,使所設(shè)計(jì)的網(wǎng)絡(luò)具備同時(shí)控制RobotCAR縱向和橫向運(yùn)動(dòng)的能力。最終,得到圖8中所示網(wǎng)絡(luò)。
圖8 本文所設(shè)計(jì)網(wǎng)絡(luò)架構(gòu)
同樣,將該網(wǎng)絡(luò)的輸入設(shè)置為分辨率120×120的圖片,此時(shí),本文所設(shè)計(jì)的網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)信息如表2所示。
表2 本文所設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)信息
續(xù)表(表2)
模型的預(yù)測輸出由1維變成了2維,但是模型的深度較PilotNet有所減小。
使用改進(jìn)過后的模型時(shí),需要優(yōu)化的參數(shù)數(shù)量為187 686個(gè),約為PilotNet的78%,因此訓(xùn)練的速度較PilotNet快,且部署時(shí)所需要的計(jì)算量減小。同樣使用均方誤差作為損失函數(shù)進(jìn)行訓(xùn)練,所設(shè)計(jì)的網(wǎng)絡(luò)在訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集中的均方誤差如圖9所示。
圖9 所設(shè)計(jì)網(wǎng)絡(luò)的均方誤差
將圖9中轉(zhuǎn)向角曲線進(jìn)行局部放大,得出的曲線如圖10所示。
從圖10中可以看出,對于轉(zhuǎn)向角數(shù)據(jù),其均方誤差約為12 780,對應(yīng)的轉(zhuǎn)向角誤差約為113,所以轉(zhuǎn)向角的預(yù)測精度較PilotNet高。
圖10 所設(shè)計(jì)網(wǎng)絡(luò)的轉(zhuǎn)向角均方誤差
從圖11中可以看出,對于速度數(shù)據(jù),本文所設(shè)計(jì)網(wǎng)絡(luò)的均方誤差約為1 712,對應(yīng)的速度誤差約為41。
圖11 所設(shè)計(jì)網(wǎng)絡(luò)的速度均方誤差
可以看出,使用本文中設(shè)計(jì)的網(wǎng)絡(luò)結(jié)構(gòu),相比PilotNet網(wǎng)絡(luò),在訓(xùn)練集和測試集中均有較好的表現(xiàn),能夠較為正確地預(yù)測出小車的速度和轉(zhuǎn)向角。在訓(xùn)練和測試過程中,在速度誤差和轉(zhuǎn)向角誤差之和為最小的輪次對模型進(jìn)行保存,對應(yīng)的輪次為第36輪,誤差之和為131。
將上述網(wǎng)絡(luò)部署到車載電腦后,記錄RobotCAR在運(yùn)動(dòng)過程中不同網(wǎng)絡(luò)的輸出,以便進(jìn)行比較,得出的結(jié)果如圖12所示。
圖12 實(shí)物實(shí)驗(yàn)時(shí)的轉(zhuǎn)向角
從圖12中可以看出,使用本文中的網(wǎng)絡(luò)時(shí),小車跑完整個(gè)賽道的時(shí)間約為55.1 s,相比PilotNet所需的60.1 s減少了5 s,本文所設(shè)計(jì)的網(wǎng)絡(luò)能夠有效地減少跑完全程所需的時(shí)間。在轉(zhuǎn)彎時(shí),改進(jìn)網(wǎng)絡(luò)生成的轉(zhuǎn)向角速度更為超前,基本杜絕了壓車道線的情況,說明改進(jìn)網(wǎng)絡(luò)能夠較好地完成小車的縱向和橫向控制。
1) 針對RobotCAR小車,測試了谷歌和英偉達(dá)所設(shè)計(jì)的PilotNet網(wǎng)絡(luò),通過測試發(fā)現(xiàn),PilotNet僅能完成RobotCAR的橫向運(yùn)動(dòng)控制,且預(yù)測的精度不高,車輛在轉(zhuǎn)彎時(shí)存在壓車道邊沿的情況。
2) 對PilotNet的結(jié)構(gòu)進(jìn)行改進(jìn),引入BN操作,調(diào)整BN、ReLU和卷積的順序,并且減少網(wǎng)絡(luò)深度,建立新的網(wǎng)絡(luò)框架。通過網(wǎng)絡(luò)在訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集上的表現(xiàn)可以看出,相比PilotNet,所設(shè)計(jì)的網(wǎng)絡(luò)具有更高的橫向預(yù)測精度,能夠完成RobotCAR的縱向運(yùn)動(dòng)控制。
3) 將所設(shè)計(jì)的網(wǎng)絡(luò)部署在RobotCAR小車上,通過最后的物理實(shí)驗(yàn)發(fā)現(xiàn),所設(shè)計(jì)的網(wǎng)絡(luò)具有較強(qiáng)的泛化能力,能夠控制被控對象較好地沿著地圖中車道的位置行駛。
使用深度學(xué)習(xí)的技術(shù)去提高小車的自主性,理論上和實(shí)踐上都是可行的。對于不同的車輛、不同的應(yīng)用環(huán)境,需要設(shè)計(jì)相應(yīng)的網(wǎng)絡(luò)結(jié)構(gòu),才能得到較好的訓(xùn)練結(jié)果,并不是模型越復(fù)雜越好。
對于大型的載人車輛,對于安全性有很高的要求,需要對網(wǎng)絡(luò)的可解釋性和可預(yù)測性進(jìn)行深入的研究,本文的被控對象和運(yùn)行環(huán)境構(gòu)成了一個(gè)靈活、方便并高度接近車輛真實(shí)的應(yīng)用環(huán)境,下一步,將重點(diǎn)研究相關(guān)深度學(xué)習(xí)網(wǎng)絡(luò)的可解釋性,讓深度學(xué)習(xí)在車輛自主駕駛的課題上變得更加“透明”。