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