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