張舒瑞
(江蘇省新海高級中學,江蘇連云港,222000)
無人駕駛作為當今人工智能領(lǐng)域的頭號研究目標,其廣闊的應(yīng)用前景使其受到世界各國的強烈關(guān)注。人們對于無人駕駛的遐想早已在19世紀20年代便初現(xiàn)端倪,那時因為還不存在人工智能的概念,人們將無人駕駛的定義僅僅局限于用無線電對其進行操控。直到半個世紀過后,智能駕駛邏輯算法的問世方才突破此領(lǐng)域中的瓶頸,從而對實現(xiàn)無人駕駛邁出關(guān)鍵性的一步。無人駕駛最受爭議的部分就是安全問題,而安全問題大部分基于對路況和突發(fā)情況的判斷,這時讓汽車擁有獨立的“思想”就尤為重要,其中目標檢測算法更為關(guān)鍵,只有擁有了成熟的目標檢測算法才可以讓無人駕駛這一技術(shù)達到更安全的保障[1]。而深度學習技術(shù)則推動了目標檢測算法的不斷進步,使無人駕駛技術(shù)在商用領(lǐng)域取得了重大進展和突破。
目標檢測屬于計算機視覺中的一個子問題。目標檢測技術(shù)主要目的是找出圖像中感興趣的物體,包含物體的定位和分類兩大任務(wù),即同時確定物體的類別和物體的位置。因此目標檢測任務(wù)可分為兩個子任務(wù):目標分類和目標定位。目標分類任務(wù)負責判斷輸入圖像或所選擇圖像區(qū)域中是否有感興趣類別的物體出現(xiàn),輸出一系列帶分數(shù)的標簽表明感興趣類別的物體出現(xiàn)在輸入圖像或所選擇圖像區(qū)域中的可能性[2]。目標定位任務(wù)負責確定輸入圖像或所選擇圖像區(qū)域中感興趣類別的物體的位置和范圍,輸出物體的包圍框、或物體中心、或物體的閉合邊界等,通常使用方形包圍盒,即Bounding Box用來表示物體的位置信息。目標檢測示意圖如圖1所示。
圖1 目標檢測示意圖
圖像分類主要采用統(tǒng)計機器學習中的有監(jiān)督學習方法,通過主動的喂給計算機關(guān)于某些特定標簽的數(shù)據(jù),并建立模型、策略、算法的統(tǒng)計機器學習三要素[3],實現(xiàn)對物體的識別過程。經(jīng)典的二分類方法主要使用Logistic Regression進行圖像分類,其算法流程如下:
首先需要將圖像數(shù)據(jù)進行預(yù)處理,圖像在計算機中以三原色的方式存儲,通過數(shù)據(jù)的拼接將單一圖片由[p_x,p_y,3]轉(zhuǎn)變?yōu)閇p_x*p_y*3,1]的一維向量。同時為每一個訓練數(shù)據(jù)指定其標簽,即物品的分類結(jié)果。
其次,在機器學習領(lǐng)域中,邏輯斯蒂回歸(Logistic Regression)可以用來實現(xiàn)分類操作,它可以看做一個沒有隱藏層的簡單神經(jīng)網(wǎng)絡(luò)。通過建立線性部分WTX+b,其中W為各節(jié)點的權(quán)重、b為偏置,并對線性部分的計算結(jié)果添加非線性的激活函數(shù)Sigmoid,從而實現(xiàn)對數(shù)據(jù)的更高維度的擬合,比如二次項等。最終建立的預(yù)測模型為[4]:
隨后,在建立了模型的基礎(chǔ)上,指定模型擬合評價的策略即損失函數(shù),該部分用來衡量參數(shù)W和b對模型擬合的效果。
最后,制定優(yōu)化損失函數(shù)的算法,較為常用的方法是梯度下降法。通過不斷更新參數(shù),從而實現(xiàn)模型的最優(yōu)化,最終得到參數(shù)W和b。
圖2 邏輯回歸算法示意
圖3所示的貓分類就是典型的分類算法,通過將圖像進行預(yù)處理和向量化,輸入到模型中,最后模型的輸出結(jié)果就是圖片為貓的置信度。
圖3 圖片分類示意圖
目標定位即準確的輸出目標所在的位置,二維的物體可以使用輸出目標的所在區(qū)域的(x,y)方框來實現(xiàn)。目標定位任務(wù)所要預(yù)測的結(jié)果是一個連續(xù)的點,因此可將其看作一個典型的回歸任務(wù)。
圖4 目標定位坐標
將其看做回歸問題,我們需要預(yù)測出(x,y,w,h)四個參數(shù)的值,從而得出方框的位置。
基于傳統(tǒng)的機器學習算法進行分類和回歸問題時,當圖片輸入維度較大時,會導致參數(shù)數(shù)量的劇增,尤其是傳統(tǒng)算法普遍使用全連接的方法,只能使用較淺的層次進行學習。在此基礎(chǔ)上,逐漸發(fā)展而來的卷積神經(jīng)網(wǎng)絡(luò)、反向傳播等算法降低了參數(shù)量和參數(shù)計算的復(fù)雜度,從而實現(xiàn)了更深層次的模型,從而可以模擬更復(fù)雜的模型,實現(xiàn)更高的精度。
深度學習是機器學習的子集,主要使用人工神經(jīng)網(wǎng)絡(luò)來妥善解決計算機網(wǎng)絡(luò)視覺效果、自然語言處理、自動語音辨識等等關(guān)鍵問題。
深度學習器由若干處理層組成,每層包含至少一個處理單元,每層輸出為數(shù)據(jù)的一種表征,且表征層次隨處理層次增加而提高。深度的定義是相對的。針對某具體場景和學習任務(wù),若學習器的處理單元總數(shù)和層數(shù)分別為M和N,學習器所保留的信息量或任務(wù)性能超過任意層數(shù)小于N且單元總數(shù)為M的學習器,則該類學習裝置為嚴格的或是狹義的深度學習裝置,其對應(yīng)的設(shè)計、訓練以及使用方式集合為嚴格的或是狹義的深度學習。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一類包括卷積運算且有著深度內(nèi)部結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò),是深度學習的代表算法之一。卷積神經(jīng)網(wǎng)絡(luò)有著表征學習能力,通過疊加深層次的網(wǎng)絡(luò),能夠擬合較為復(fù)雜的模型。
深度學習的概念起源于人工神經(jīng)網(wǎng)絡(luò),本質(zhì)上是指一類對具有深層結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)進行有效訓練的方法。神經(jīng)網(wǎng)絡(luò)是一種由許多非線性計算單元(或稱神經(jīng)元、節(jié)點)組成的分層系統(tǒng),通常網(wǎng)絡(luò)的深度就是其中不包括輸入層的層數(shù)。
卷積神經(jīng)網(wǎng)絡(luò)用于通過將原始圖像通過層轉(zhuǎn)換為類分數(shù)來識別圖像。CNN的靈感來自視覺皮層。每當我們看到某些東西時,一系列神經(jīng)元被激活,每一層都會檢測到一組特征,如線條,邊緣。高層次的層將檢測更復(fù)雜的特征,以便識別我們所看到的內(nèi)容。
深度學習CNN模型進行訓練和測試,每個輸入圖像將通過一系列帶有卷積核,Pooling,全連接層(FC)的卷積層并通過Softmax函數(shù)對目標的概率值的對象進行分類。
卷積神經(jīng)網(wǎng)絡(luò)分為多層結(jié)構(gòu):
(1)輸入層(即訓練數(shù)據(jù)):輸入圖層或輸入體積是具有以下尺寸的圖像:[寬x高x深]。它是像素值的矩陣。
圖5 RGB矩陣
(2)卷積層:卷積是從輸入圖像中提取特征的第一層,Conv層的目標是提取輸入數(shù)據(jù)的特征。卷積通過使用小方塊輸入數(shù)據(jù)學習圖像特征來保持像素之間的關(guān)系。
圖6 卷積
(3)Stride:Stride是輸入矩陣上的像素移位數(shù)。 當步幅為1時,我們將濾波器移動到1個像素。 當步幅為2時,我們一次將濾鏡移動到2個像素,以此類推。
(4)Padding(填充):有時卷積的滑動幅度不一定適合輸入圖像。我們有兩種選擇:用零填充圖片(零填充)以使其適合;刪除濾鏡不適合的圖像部分。
圖7 步幅
(5)激活函數(shù)(ReLu):ReLU代表整流線性單元,用于非線性操作。輸出是?(x)=max(0,x)ReLU的目的是在我們的卷積操作中引入非線性。 因為,現(xiàn)實世界的真實模型往往是復(fù)雜的非線性模型。
還可以使用其他非線性函數(shù),例如tanh或sigmoid代替ReLU。大多數(shù)數(shù)據(jù)科學家使用ReLU,因為ReLU的性能明顯比其他兩個更好。
(6)池化層:池化層部分將減少圖像太大時的參數(shù)數(shù)量??臻g池化也稱為子采樣或下采樣,它降低了每個圖片映射的維度,但保留了重要信息??臻g池化可以是不同類型的:最大池化;平均池化;總和池化。
圖8 空間池化
(7)全連接層:我們稱之為FC層,我們將矩陣展平為矢量并將其饋入神經(jīng)網(wǎng)絡(luò)的全連接層。
在圖9中,特征映射矩陣將被轉(zhuǎn)換為矢量(x1,x2,x3,...)。通過全連接層,我們將這些功能組合在一起以創(chuàng)建模型。最后我們通過一個激活功能,如softmax或sigmoid,將輸出分類為貓,狗,汽車,卡車等。
圖9 全連接
圖10就是通過卷積神經(jīng)網(wǎng)絡(luò)進行圖像分類的過程。
圖10 圖片分類
上述神經(jīng)網(wǎng)絡(luò)的尾部展開,也就說CNN前面保持不變,對CNN的結(jié)尾處作出改進:加了兩個頭:“分類頭”和“回歸頭”,這樣就能實現(xiàn)一個主干網(wǎng)絡(luò)進行多目標學習,即classification + regression模式。
圖11 目標分類 + 位置檢測
本論文采用PASCAL VOC 數(shù)據(jù)集,共使用20類目標分類,包含person、car、bicycle、bus等關(guān)鍵目標,樣例數(shù)據(jù)如圖12所示。
圖12 voc數(shù)據(jù)樣例
標簽文件采用xml格式的標注文件,數(shù)據(jù)標注樣例如圖13所示。
圖13 voc數(shù)據(jù)標注樣例
本文主要采用YoloV3算法,YOLOv3算法的主體結(jié)構(gòu)是一個龐大的卷積神經(jīng)網(wǎng)絡(luò)[5],YOLOv3原理圖如圖14所示。YOLOv3網(wǎng)絡(luò)的輸入層接收416×416的輸入圖像,網(wǎng)絡(luò)中有代碼體現(xiàn)出來的網(wǎng)絡(luò)層次共計252層(統(tǒng)計包括用于構(gòu)建res_block塊的add層)。從第0層到75層被統(tǒng)稱為darknet-53的部分共含有53層卷積層以及23層殘差層。這一部分網(wǎng)絡(luò)結(jié)構(gòu)不是對darknet-19的簡單加深,而是引入了殘差網(wǎng)絡(luò)的跳層連接思想[6],從76到105層是YOLOv3的特征交互和輸出層,這一部分舍棄了全連接層轉(zhuǎn)而通過連續(xù)的1×1和3×3卷積核實現(xiàn)局部特征交互,作用類似于全連接層,但全連接層實現(xiàn)的是全部像素的全局特征交互。
圖14 YOLOv3原理圖
神經(jīng)網(wǎng)絡(luò)訓練部分程序如圖15所示。
圖15 模型訓練部分程序
神經(jīng)網(wǎng)絡(luò)訓練完成后,在測試集上對算法的性能進行測試,并最終對網(wǎng)絡(luò)實時視頻檢測性能進行測試。采取的思路是先捕獲實時視頻流,從中依次截取出每一幀圖像,再調(diào)用訓練好的YOLOv3網(wǎng)絡(luò)的單張圖像檢測的函數(shù)對每幀圖像檢測目標。單張圖像檢測部分程序如圖16所示。
圖16 圖片檢測驗證代碼截圖
隨著圖像分類精度在某些領(lǐng)域達到了超越人類的水平,其應(yīng)用價值也得到了廣泛的認可從而應(yīng)用在諸多領(lǐng)域。無人駕駛汽車在行駛過程中需要對周圍的物體進行精確的識別,從而區(qū)分哪些是障礙物、哪些是行人,同時需要對行車指示牌等進行精確的劃分,從而為駕駛決策提供支持??梢灶A(yù)見,高精度的圖像分類技術(shù)將廣泛應(yīng)用在無人駕駛領(lǐng)域中??傊ㄟ^將深度學習算法運用于無人駕駛中的目標檢測算法,將會大大提升目標檢測精度及進一步加速無人駕駛技術(shù)的成熟。并結(jié)合其他傳感技術(shù),增強無人駕駛汽車的感知能力,這也就大大增加了無人駕駛汽車的安全性能,只有這樣才能夠推動無人駕駛技術(shù)的盡快落地運行。
本文通過對目標檢測算法的闡述,并運用傳統(tǒng)機器學習算法和深度學習方法進行訓練和驗證,對目標檢測算法進行了原理和實際驗證。在訓練過程中,存在著數(shù)據(jù)歸一化、過擬合等問題,后續(xù)將對參數(shù)初始化、正則化等有助于提高訓練速度、防止過擬合的問題展開研究,從而實現(xiàn)更好的對圖像數(shù)據(jù)進行分類。