呂 睿,陳興文
(大連民族大學(xué)信息與通信工程學(xué)院,遼寧 大連 116600)
自1995年提出LeNet奠定卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)結(jié)構(gòu)后[1],2010年ImageNet大賽上AlexNet的使用,使深度學(xué)習(xí)吸引大量學(xué)者研究人員的關(guān)注,并且成功應(yīng)用于圖像上。這些為無(wú)人駕駛在障礙物檢測(cè),道路、行人、車(chē)道線(xiàn)檢測(cè)等方面提供了新的思路[2],并且比傳統(tǒng)的行人檢測(cè)、道路檢測(cè)等算法在應(yīng)對(duì)復(fù)雜場(chǎng)景時(shí)要好得多。本文引入深度學(xué)習(xí)方法以人行橫道檢測(cè)為例,探討智能車(chē)輛技術(shù)在環(huán)境感知方面的應(yīng)用,其實(shí)驗(yàn)結(jié)果對(duì)于提升智能輔助駕駛的安全度、舒適度具有較好的工程應(yīng)用價(jià)值。
Anaconda是python發(fā)行的包管理工具,其中自帶python的版本,還帶很多python的包,支持Linux、mac、windows系統(tǒng),并有一個(gè)conda強(qiáng)大的執(zhí)行工具。Anaconda附帶了一大批常用數(shù)據(jù)科學(xué)包,它附帶了conda、Python和150多個(gè)科學(xué)包及其依賴(lài)項(xiàng)。因此可以用Anaconda立即開(kāi)始處理數(shù)據(jù)。
文中以Python3.6為基礎(chǔ)語(yǔ)言,它的語(yǔ)法簡(jiǎn)潔,明確,簡(jiǎn)單易懂。同時(shí),還有非常強(qiáng)大的第三方庫(kù),基本上任何想通過(guò)計(jì)算機(jī)實(shí)現(xiàn)的功能,Python官方庫(kù)里都有相應(yīng)的模塊進(jìn)行支持,直接下載調(diào)用,給開(kāi)發(fā)帶來(lái)了極大的便利。
由于Tensorflow支持多種語(yǔ)言,可在CPU或GPU上使用。對(duì)于要求計(jì)算能力的神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),部署在GPU上可以大大加快訓(xùn)練速度。文中采用tensorflow1.14為框架,以python3.6作為基礎(chǔ)語(yǔ)言搭建的神經(jīng)網(wǎng)絡(luò)。
基于深度學(xué)習(xí)的人行道檢測(cè),主要包括模型分類(lèi)訓(xùn)練和數(shù)據(jù)測(cè)試兩個(gè)階段。分類(lèi)訓(xùn)練包括數(shù)據(jù)集制作、特征提取和模型分類(lèi)訓(xùn)練。數(shù)據(jù)測(cè)試主要包括窗口選擇、特征提取和分類(lèi)輸出。具體流程如圖1所示。
數(shù)據(jù)集的制作采用了兩種方式:使用python爬蟲(chóng)技術(shù),從網(wǎng)上爬取正負(fù)樣本和采用車(chē)載攝像頭的角度分別拍攝有人行橫道和沒(méi)有人行橫道的照片。正樣本為各種情況下的人行橫道,例如有人遮擋,光照不同,人行橫道位于圖片的不同位置等。負(fù)樣本為無(wú)人行橫道的道路圖片和各種方格的圖片。
將正負(fù)樣本收集好后,調(diào)用tensorflow中的方法,將樣本打上標(biāo)簽,正樣本為0,負(fù)樣本為1。統(tǒng)一制作成為tensorflow推薦的TFRecord文件。在讀取數(shù)據(jù)時(shí)還可以加入shuffle將數(shù)據(jù)打亂讀取。部分?jǐn)?shù)據(jù)集如圖2所示。
圖1 基于深度學(xué)習(xí)的人行道檢測(cè)流程
圖2 部分?jǐn)?shù)據(jù)集
神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖3所示,由四個(gè)卷積層和兩個(gè)用于分類(lèi)的全連接層構(gòu)成。卷積層的深度分別為6,16,64,128,前三層的卷積核大小設(shè)置為5*5,最后一層卷積的卷積核大小為3*3。第一個(gè)全連接的神經(jīng)元個(gè)數(shù)為64,最終輸出有0,1兩類(lèi)。
圖3 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
由于本項(xiàng)目的訓(xùn)練集圖片大小是300*300,圖片不算太大,故而放棄了7*7的卷積核,選用5*5和3*3的卷積核相結(jié)合的方式。激活函數(shù)選用ReLu線(xiàn)性激活函數(shù),對(duì)于線(xiàn)性函數(shù)而言,ReLU的表達(dá)能力更強(qiáng),尤其體現(xiàn)在深度網(wǎng)絡(luò)中[4]。在卷積層之后的池化層使用max-pooling,即對(duì)鄰域內(nèi)特征點(diǎn)取最大,對(duì)紋理提取更好。為了防止過(guò)擬合的出現(xiàn),訓(xùn)練時(shí)在全連接層加入了丟棄概率為0.5的Dropout。
在反向傳播過(guò)程中的損失函數(shù)選用了交叉熵?fù)p失函數(shù)。交叉熵能夠衡量同一個(gè)隨機(jī)變量中的兩個(gè)不同概率分布的差異程度,在機(jī)器學(xué)習(xí)中就表示為真實(shí)概率分布與預(yù)測(cè)概率分布之間的差異[3]。交叉熵的值越小,模型預(yù)測(cè)效果就越好。
損失函數(shù)計(jì)算完成后,將結(jié)果交給梯度下降算法,求梯度同時(shí)完成反向傳播更新權(quán)值。梯度下降的方法則采用了tensorflow封裝的優(yōu)化算法,Adam優(yōu)化算法。Adam優(yōu)化算法利用梯度的一階矩估計(jì)和二階矩估計(jì)動(dòng)態(tài)調(diào)整每個(gè)參數(shù)的學(xué)習(xí)率[5]。Tensorflow提供的tf.train.AdamOptimizer可控制學(xué)習(xí)速度,經(jīng)過(guò)偏置校正后,每一次迭代學(xué)習(xí)率都有個(gè)確定范圍,使得參數(shù)比較平穩(wěn)。
整個(gè)模型的迭代次數(shù)設(shè)置為20000輪,網(wǎng)絡(luò)的初始學(xué)習(xí)率設(shè)置為0.001,使用指數(shù)衰減的方式隨著訓(xùn)練輪次的增加使得學(xué)習(xí)率不斷減小。其優(yōu)點(diǎn)是在迭代剛開(kāi)始的時(shí)候?qū)W習(xí)率較大,使得模型可以快速收斂到最優(yōu)解附近,同時(shí)隨著迭代次數(shù)的增加,學(xué)習(xí)率減小可以讓模型更加精確的尋找到最優(yōu)解,可以避免學(xué)習(xí)率較大造成在最小值左右震蕩。結(jié)果如圖4。
圖4 模型訓(xùn)練正確率與損失
經(jīng)過(guò)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練之后,將在訓(xùn)練集上表現(xiàn)最好的模型保存下來(lái),并調(diào)用該模型對(duì)測(cè)試集的圖片進(jìn)行預(yù)測(cè),其正確率達(dá)到了95%以上。圖5為不同視角和不同場(chǎng)景下(有人或車(chē))檢測(cè)到的結(jié)果??梢?jiàn)所設(shè)計(jì)的方法可以滿(mǎn)足駕駛場(chǎng)景環(huán)境感知的需求,但是對(duì)于對(duì)多目標(biāo)進(jìn)行跟蹤的計(jì)算量會(huì)隨著環(huán)境復(fù)雜度的增加而增大,降低實(shí)時(shí)處理效率。
圖5 實(shí)際測(cè)試案例