徐中林,范俊宇,高暢
(滄州師范學(xué)院,河北滄州,061001)
系統(tǒng)硬件由主控板、PWM轉(zhuǎn)換板、電機(jī)、舵機(jī)、電池、輪胎。從上到下依次為控制層、電機(jī)驅(qū)動(dòng)層??刂茖右詷漭晌⑻幚砥鳛橹骺仉娐?,PWM芯片選型PCA9685,電機(jī)驅(qū)動(dòng)層主要以電機(jī)驅(qū)動(dòng)電路、電源組成,為四輪車提供動(dòng)力,在小車主控板的選擇上,可以選擇arduino,STM32,樹莓派以及英偉達(dá)的jepson 系列,樹莓派與嵌入式微控制器(STM32)和arduino相比,除了相同的IO引腳控制之外,還可以運(yùn)行相應(yīng)的操作系統(tǒng),完成更復(fù)雜的任務(wù)管理與調(diào)度,能夠支持更上層應(yīng)用的開發(fā),開發(fā)語(yǔ)言可選用Python、C語(yǔ)言,對(duì)于視覺處理、復(fù)雜數(shù)據(jù)處理有很大的優(yōu)勢(shì)。
如果有條件可以選用Jetson Xavier NX,相比樹莓派4B 系列采用的VideoCore VI是經(jīng)典的雙重Shader架構(gòu)(性能只有數(shù)+G Flops而英偉達(dá)的基于Volta架構(gòu),Jepson Xavier NX有48個(gè)Tensor內(nèi)核,提供了6.8T Flops的FP16算力。內(nèi)包含 兩 個(gè) DLA(Deep Learning Accelerator),支 持FP16和INT8,總計(jì)有21T Flops,性能相差數(shù)百倍,但是價(jià)格也很昂貴。
本文采用的是市場(chǎng)成熟廉價(jià)的樹莓派4B。文中提及兩套方案,可依據(jù)不同的處理器選用不同的算法。
小車在行駛過程中,需要大量視覺信息,故采用廣角視覺傳感器。拍攝角度為130°。
馬達(dá)以及舵機(jī)控制模塊,采用16路PWM控制模塊PAC9685模塊,該模塊可以通過I2C通信模式,實(shí)現(xiàn)對(duì)多路電機(jī)舵機(jī)控制,能耗低,調(diào)節(jié)方便。
由于下位機(jī)采用樹莓派微處理器進(jìn)行設(shè)計(jì),對(duì)于PAC9685多路PWM控制模塊擁有集成庫(kù),開發(fā)較為容易,且能耗低,在使用時(shí)僅需要讀取I2C地址,即可調(diào)用庫(kù)實(shí)現(xiàn)對(duì)電機(jī)驅(qū)動(dòng)模塊,舵機(jī)的控制。
本章內(nèi)容是全文的核心,先介紹小車系統(tǒng)的設(shè)計(jì),再介紹端到端控制系統(tǒng)算法的設(shè)計(jì)與實(shí)現(xiàn)過程,并從理論上闡述設(shè)計(jì)算法設(shè)計(jì)要素。神經(jīng)網(wǎng)絡(luò)采用RNN對(duì)轉(zhuǎn)向角預(yù)測(cè),以及網(wǎng)絡(luò)結(jié)構(gòu)、提升網(wǎng)絡(luò)訓(xùn)練能力和過擬合方法。
設(shè)計(jì)實(shí)現(xiàn)小車屬于微縮模型小車,便于攜帶、數(shù)據(jù)采集、調(diào)試方便,主要用于數(shù)據(jù)采集和模型測(cè)試,受于DAVE智能車啟發(fā),小車保持有左轉(zhuǎn)、右轉(zhuǎn)、直行功能[12]。
小車為四輪驅(qū)動(dòng)方式,裝有一臺(tái)直流電機(jī)和一臺(tái)舵機(jī),前輪具有轉(zhuǎn)向功能,后輪負(fù)責(zé)速度,無人小車運(yùn)動(dòng)坐標(biāo)系如圖1所示。其中,xoy是世界坐標(biāo)系,XOY是智能車坐標(biāo)系,θ是無人小車坐標(biāo)系和世界坐標(biāo)系之間的夾角,φ為驅(qū)動(dòng)輪之間的夾角,為φ=90°,L為無人小車中心到車輪的水平距離。
圖1 智能車坐標(biāo)系和世界坐標(biāo)系
方案一:采用3DCNN[13]網(wǎng)絡(luò),卷積核設(shè)置為3D卷積核,處理數(shù)據(jù)通常為(3,d,h,w)樣式,一般用于3D圖像數(shù)據(jù),在無人駕駛項(xiàng)目中通常結(jié)合高性能GPU使用。
方案二:采用RNN-LSTM,卷積核為2D卷積核,處理數(shù)據(jù)通常為(1,h,w)樣式,常用于計(jì)算機(jī)視覺、圖像處理領(lǐng)域。在無人駕駛項(xiàng)目中應(yīng)用時(shí)對(duì)高性能GPU要求較低。
考慮到樹莓派微處理器算力較低,使用視覺傳感器,搭載3DCNN網(wǎng)絡(luò)時(shí)性能較弱,而RNN-LSTM網(wǎng)絡(luò)對(duì)處理器算力要求較低,故采用方案二,故神經(jīng)網(wǎng)絡(luò)采用RNNLSTM網(wǎng)絡(luò)。
方案一:使用圖像處理庫(kù)PIL,在深度學(xué)習(xí)技術(shù)中通常用于PC機(jī)中,它可以存儲(chǔ)、顯示和批量處理所有圖片格式。
方案二:使用圖像處理庫(kù)OpenCV[14],它可以跨平臺(tái)開發(fā),主要用于圖像處理、計(jì)算機(jī)視覺、物體識(shí)別、運(yùn)動(dòng)跟蹤等方面。
總結(jié):考慮到任務(wù)設(shè)計(jì)的系統(tǒng)分為上位機(jī)與下位機(jī)部分,而OpenCV圖像處理技術(shù)主要與傳感器結(jié)合使用,故將方案一與方案二結(jié)合使用,上位機(jī)圖像處理時(shí),采用圖像處理庫(kù)PIL,下位機(jī)使用圖像處理庫(kù)OpenCV。
本文設(shè)計(jì)的算法采用深度學(xué)習(xí)的方式,將系統(tǒng)當(dāng)作整體進(jìn)行研究的。學(xué)習(xí)系統(tǒng)利用循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行設(shè)計(jì)的,下位機(jī)網(wǎng)絡(luò)輸入利用視覺傳感器獲取信息,輸出為一浮點(diǎn)數(shù),代表行駛決策。算法整體流程圖如圖所示。端到端控制算法結(jié)構(gòu)圖如圖2所示。
圖2 端到端控制算法結(jié)構(gòu)圖
神經(jīng)網(wǎng)絡(luò)輸入為無人小車前方視覺傳感器獲取的,輸出為預(yù)測(cè)行駛路線和轉(zhuǎn)向角度。主要設(shè)計(jì)要素為網(wǎng)絡(luò)結(jié)構(gòu)、卷積層、LSTM層、激活函數(shù)等元素。神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)技術(shù)中最為至關(guān)重要的技術(shù),本節(jié)將分別進(jìn)行闡述。
2.5.1 循環(huán)神經(jīng)網(wǎng)絡(luò)介紹與設(shè)計(jì)
循環(huán)神經(jīng)網(wǎng)(RNN)[2]是專門用于處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò),在設(shè)計(jì)時(shí)掌握過去發(fā)生的事情對(duì)現(xiàn)在事情的影響,即網(wǎng)絡(luò)將前t時(shí)刻狀態(tài)保存下來,并作為t-1時(shí)刻狀態(tài)反饋給隱藏層,最終將數(shù)據(jù)用于當(dāng)前輸出的計(jì)算中。因?yàn)镽NN存在梯度消失和梯度爆炸的問題,導(dǎo)致無法長(zhǎng)期訓(xùn)練問題。本文通過引入LSTM網(wǎng)絡(luò),即RNN-LSTM網(wǎng)絡(luò),解決了傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡(luò)梯度消失和梯度爆炸的問題。即輸入為無人小車前方廣角攝像頭拍攝的圖像,輸出為一近似實(shí)數(shù),代表預(yù)測(cè)行駛路線及行駛角度。RNN訓(xùn)練完成后,通過模型部署,無人小車在前進(jìn)行駛過程中,利用廣角相機(jī)拍攝獲得第一時(shí)間圖像,經(jīng)過RNN會(huì)映射為預(yù)測(cè)行駛路線。網(wǎng)絡(luò)共有13層,包含4個(gè)時(shí)間分布卷積層、2個(gè)LSTM層、1個(gè)池化層、1個(gè)Flatten層和5個(gè)Dense層,輸入圖片大小為160×120,通過4個(gè)3×3大小的卷積核,對(duì)特征提取,通過兩個(gè)3×3大小的卷積核,對(duì)特征提取,經(jīng)過池化、對(duì)特征信息降維,再通過LSTM層,解決訓(xùn)練的依賴問題,最終在全鏈接層輸出為一點(diǎn),代表行駛策略與角度。RNN-LSTM算法表如表1所示。
表1 RNN-LSTM算法表
2.5.2 損失函數(shù)
損失函數(shù)是指網(wǎng)絡(luò)生成模型的真實(shí)值和預(yù)測(cè)值之間的誤差[12],本文中神經(jīng)網(wǎng)絡(luò)輸出的行駛角度為連續(xù)值,故在計(jì)算網(wǎng)絡(luò)損失時(shí),采用平方差來估算損失。記a為部分訓(xùn)練數(shù)據(jù)集,b為特征的個(gè)數(shù),d為類的個(gè)數(shù),損失為L(zhǎng)。故部分訓(xùn)練數(shù)據(jù)集a構(gòu)成的特征矩陣 X ∈ (a, b),權(quán)重矩陣 W ∈ (b, d),樣本標(biāo)簽 y ∈ (a, d),損失函數(shù)表達(dá)式如式(1)所示。
2.5.3 網(wǎng)絡(luò)結(jié)構(gòu)
RNN網(wǎng)絡(luò)結(jié)構(gòu),包含輸入層、卷積層、全連接層、輸出層。輸入處理數(shù)據(jù)經(jīng)卷積層卷積后,對(duì)特征進(jìn)一步提取,再后進(jìn)入Dense層,最終輸出為一個(gè)節(jié)點(diǎn)。但RNN存在梯度消失和梯度爆炸狀況,故在RNN網(wǎng)絡(luò)中添加遺忘門,其LSTM結(jié)構(gòu)示意圖如圖3所示。
圖3 LSTM網(wǎng)絡(luò)結(jié)構(gòu)示意圖
2.5.4 激活函數(shù)
激活函數(shù)采用RELU[15]函數(shù)??梢允咕W(wǎng)絡(luò)訓(xùn)練速度加快,擁有非線性,回歸訓(xùn)練中使網(wǎng)絡(luò)具有稀疏性,防止梯度消失。通過給神經(jīng)元引入非線性元素,實(shí)現(xiàn)逼近任何非線性函數(shù),提高網(wǎng)絡(luò)建立非線性模型能力,從而應(yīng)用到更多的非線性模型中。RELU函數(shù)表達(dá)式如式2所示,RELU函數(shù)圖像如圖4所示。
圖4 激活函數(shù)圖像
2.5.5 防止過擬合
在深度學(xué)習(xí)中,過擬合是指如果訓(xùn)練模型過于針局部特征訓(xùn)練錯(cuò)過了整體要點(diǎn)。本文中無人小車的數(shù)據(jù)模型是從數(shù)據(jù)集中通過特征提取獲得的,數(shù)據(jù)集中樣本的特征又分為兩部分,即局部特征和全局特征。如果數(shù)據(jù)模型過于專注局部數(shù)據(jù)訓(xùn)練,會(huì)造成全局特征丟失,反之?dāng)?shù)據(jù)模型過于專注全局訓(xùn)練,則會(huì)丟失局部特征。在數(shù)據(jù)模型中,有些與特征數(shù)據(jù)無關(guān)的,對(duì)最終模型生成造成影響,可視為噪聲數(shù)據(jù)。如本文中無人駕駛場(chǎng)景為限定場(chǎng)景,全局特征分為:直行標(biāo)識(shí)線和轉(zhuǎn)彎標(biāo)識(shí)線,若小車行駛過快發(fā)生沖出跑道現(xiàn)象,則會(huì)丟失轉(zhuǎn)彎標(biāo)識(shí)線,在數(shù)據(jù)模型訓(xùn)練時(shí)會(huì)造成局部特征丟失,導(dǎo)致學(xué)習(xí)駕駛場(chǎng)景中局部特征過高,發(fā)生過擬合現(xiàn)象。
一般過擬合緣由通常有三種:(1)訓(xùn)練樣本數(shù)據(jù)差距過大。(2)模型容量小,訓(xùn)練數(shù)據(jù)不足。(3)訓(xùn)練模型較大,模型復(fù)雜。在合理的數(shù)據(jù)采集中,一般情況下,可以避免第一種和第二種情況發(fā)生。而實(shí)際訓(xùn)練數(shù)據(jù)集時(shí),通常由于數(shù)據(jù)集過大,即局部特征學(xué)習(xí)數(shù)據(jù)較大,對(duì)局部特征學(xué)習(xí)較多,從而造成全局特征丟失,故過擬合現(xiàn)象通常由第三種情況觸發(fā)。本文設(shè)計(jì)的無人駕駛小車,由于采用限定場(chǎng)景,采集數(shù)據(jù)集局部特征數(shù)據(jù)含有量較高,故過發(fā)生過擬合情況可能性較大。
2.5.5 .1利用更多數(shù)據(jù)訓(xùn)練
利用更多數(shù)據(jù)集訓(xùn)練是一種最為直接的辦法,通過比對(duì)過去采集數(shù)據(jù)集,人工比對(duì)數(shù)據(jù)集具體內(nèi)容,即針對(duì)丟失全局特征進(jìn)行增添。
2.5.5 .2正則化和隨機(jī)失活
正則化在深度學(xué)習(xí)技術(shù)中,通常用于降低模型復(fù)雜程度的。本文采用隨機(jī)失活(Dropout)[16]方法,在訓(xùn)練數(shù)據(jù)集中,經(jīng)過隨機(jī)刪除神經(jīng)網(wǎng)絡(luò)單元,訓(xùn)練一個(gè)模型,即可完成多個(gè)模型集成的成果。
由于本文數(shù)據(jù)集采集存在大量局部特征數(shù)據(jù),故算法經(jīng)過隨機(jī)刪除網(wǎng)絡(luò)中神經(jīng)元,在輸入時(shí)添加概率為p=0.3的Dropout。從而實(shí)現(xiàn)限制數(shù)據(jù)模型容量,減少過擬合的現(xiàn)象發(fā)生。
圖5 普通神經(jīng)網(wǎng)絡(luò)連接示意圖
圖6 添加Dropout神經(jīng)元連接示意圖
2.5.5 .3提前結(jié)束數(shù)據(jù)集訓(xùn)練
任務(wù)設(shè)計(jì)的無人駕駛場(chǎng)景,由于采用限定場(chǎng)景設(shè)計(jì)的,無人小車行駛時(shí)的角度記為r。根據(jù)實(shí)際經(jīng)驗(yàn),小車行駛時(shí),記錄數(shù)據(jù)集大多數(shù)處于直線行駛狀態(tài),即r=0°,在轉(zhuǎn)彎與非直線行駛時(shí),記r≠0°。數(shù)據(jù)集在上位機(jī)中訓(xùn)練時(shí),由于r=0°的樣本較多,r≠0°的樣本較少,即數(shù)據(jù)集樣本分布不均勻,隨著模型訓(xùn)練次數(shù)增加,致使損失函數(shù)降低十分緩慢。
設(shè)計(jì)算法采用回調(diào)函數(shù)中EarlyStopping,在模型訓(xùn)練時(shí),訓(xùn)練數(shù)據(jù)集每通過一次迭代,損失率下降,若5次迭代之后,模型損失率相差保持在0.005以內(nèi),則提前停止訓(xùn)練或訓(xùn)練損失率下降到0.005時(shí)自動(dòng)停止訓(xùn)練。
從收集數(shù)據(jù)集中本篩選1000張照片,圖片語(yǔ)義明確。例如,選擇光線充足或特征清晰圖片。手動(dòng)選擇的圖像用于網(wǎng)絡(luò)預(yù)訓(xùn)練,通過訓(xùn)練生成一個(gè)容量大、網(wǎng)絡(luò)的損失值極低的模型。通過加載預(yù)先訓(xùn)練好模型,并經(jīng)過對(duì)訓(xùn)練集的訓(xùn)練模型調(diào)整權(quán)值,從而加快網(wǎng)絡(luò)收斂速度。
經(jīng)過測(cè)試,預(yù)訓(xùn)練可以成功的解決由于初始化的不當(dāng)造成的梯度爆炸與梯度消失,致使模型訓(xùn)練速度緩慢等問題,同時(shí)使用一些經(jīng)過處理后的數(shù)據(jù)圖片輸入至網(wǎng)絡(luò)進(jìn)行預(yù)訓(xùn)練,可以加快網(wǎng)絡(luò)訓(xùn)練速度。
本文從理論角度闡述了整個(gè)系統(tǒng)神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)與實(shí)現(xiàn)方法,設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)、卷積層、LSTM層、激活函數(shù)等元素,通過采用網(wǎng)絡(luò)預(yù)訓(xùn)練的方法,解決了訓(xùn)練速度緩慢的問題。針對(duì)過擬合采用了增加更多數(shù)據(jù)、正則化和隨機(jī)失活、提前截止訓(xùn)練的方法增加了模型可信任程度。在輸入網(wǎng)絡(luò)數(shù)據(jù)時(shí),通過將人為干預(yù)控制采集的數(shù)據(jù)傳輸于上位機(jī)中,利用離線深度學(xué)習(xí)生成跑道模型,經(jīng)過下位機(jī)部署,無人小車使用廣角相機(jī)采集數(shù)據(jù)信息,進(jìn)行行駛路線預(yù)測(cè),即可實(shí)現(xiàn)限定場(chǎng)景中的無人駕駛。