江梟宇,李忠兵,張軍豪,彭 嬌,文 婷
(西南石油大學電氣信息學院,成都 610500)
環(huán)境感知是無人駕駛汽車路徑規(guī)劃的基礎(chǔ),無人駕駛系統(tǒng)主要通過攝像頭采集、實時檢測和獲取周邊車輛信息,對周邊環(huán)境形成認知模型,從而實現(xiàn)對環(huán)境的感知。在車輛檢測方面,傳統(tǒng)車輛檢測方法主要通過梯度直方圖(Histogram of Oriented Gradient,HOG)[1]與尺度不變特征變換(Scale-Invariant Feature Transform,SIFT)[2]提取特征信息,并使用支持向量機(Support Vector Machine,SVM)[3]、Adaboost[4]或Gradient Boosting[5]等自適應分類器進行識別,但該方法無法獲取高層語義信息。近年來,深度學習技術(shù)在車輛檢測領(lǐng)域得到廣泛應用。與傳統(tǒng)車輛檢測方法不同,基于深度學習的車輛檢測方法不是人為設(shè)置特征,而是通過反向傳播[6]自適應獲取特征,具有較好的高層語義信息描述能力,該方法主要包括One Stage 方法和Two Stage 方法。Two Stage 方法是通過預選框[7-8]確定位置,針對該位置進行識別,例如R-CNN[9]方法、Fast R-CNN[10]方法和Faster R-CNN[7]方法等。One Stage方法是端到端一次性識別出位置與類別,例如YOLO[11-12]方法、SSD[13]方法等。基于深度學習的車輛檢測方法具有較好的檢測精度,但是由于網(wǎng)絡(luò)模型復雜、參數(shù)量大以及計算周期長導致檢測實時性較差,因此其無法應用于實際車輛檢測。
為解決上述問題,文獻[14]對YOLO 網(wǎng)絡(luò)進行精簡后提出Tiny-Yolo 網(wǎng)絡(luò),但是該網(wǎng)絡(luò)部署在嵌入式設(shè)備上參數(shù)多,且計算時間較長。對此,文獻[15]采用神經(jīng)計算棒進行加速計算。本文受上述文獻的啟發(fā),使用深度可分離卷積(Depthwise Separable Convolution,DSC)[16]替換傳統(tǒng)車輛檢測算法中Tiny-YOLO 網(wǎng)絡(luò)的標準卷積,將改進的Tiny-YOLO網(wǎng)絡(luò)部署到配備NCS2 神經(jīng)計算棒的嵌入式設(shè)備上,并對目標檢測準確率與實時性進行對比與分析。
在YOLO 系列網(wǎng)絡(luò)中,YOLOV2 是在YOLOV1的基礎(chǔ)上加入1×1 卷積并采用正則化方法防止過擬合,YOLOV3 是對YOLOV2 的改進,主要包括基礎(chǔ)網(wǎng)絡(luò)Darknet53 和全卷積層[17],其中Darknet53 由包含53 個卷積層的殘差結(jié)構(gòu)[18]組成,可降低網(wǎng)絡(luò)訓練難度并提高計算效率。
將輸入的416 像素×416 像素圖像經(jīng)過Darknet53和全卷積層,得到輸出的13 像素×13 像素特征圖、26 像素×26 像素特征圖以及52 像素×52 像素特征圖。每個特征圖被分為多個網(wǎng)絡(luò)域,每個網(wǎng)絡(luò)域輸出尺寸為1×1×(B×(5+C)),其中,1×1 為最后一層卷積的大小,B為每個網(wǎng)絡(luò)域可預測的邊界框(以下稱為預測框)數(shù)量。預測框包括5+C個屬性,分別為每個預測框中心點x軸坐標的偏移值tx、中心點y軸坐標的偏移值ty、中心點寬度的偏移值tw、中心點高度的偏移值th、Objectness 分數(shù)以及C類置信度。
由于YOLOV3 網(wǎng)絡(luò)訓練會造成其梯度不穩(wěn)定,因此在MS COCO 數(shù)據(jù)集樣本中使用K-means 聚類算法[19]生成9 個不同尺度的先驗框,預測框基于這9 個先驗框進行微調(diào)。設(shè)Px、Py為特征圖中先驗框中心點的預測坐標,Pw、Ph分別為特征圖中先驗框的預測寬度和高度,Gx、Gy為特征圖中先驗框中心點的真實坐標,Gw、Gh分別為特征圖中先驗框的真實寬度和高度,其對應偏移值的計算公式如下:


先驗框高度與寬度的偏移值由真實值與預測值相除后縮放到對數(shù)空間得到。先驗框預測值和真實值之間的偏移值可用于修正先驗框和預測框的偏移關(guān)系,如圖1 所示。

圖1 先驗框和預測框的偏移關(guān)系Fig.1 The offset relationship between prior box and prediction box
圖1 中A 點為預測框中心點,B 點為預測中心點,其所在網(wǎng)絡(luò)域的坐標為(Cx,Cy),該坐標由Px和Py確定。預測框中心點的坐標值bx、by,以及中心點寬度bw、中心點高度bh由tx、ty、tw和th計算得到,相關(guān)公式如下:

其中,σ為Sigmoid 函數(shù)。網(wǎng)絡(luò)域尺寸為1×1,使用Sigmoid 函數(shù)將tx和ty縮放到0~1 范圍內(nèi),可有效確保目標中心處于網(wǎng)絡(luò)域中,防止其過度偏移。由于tw和th使用了對數(shù)空間,因此將其通過指數(shù)計算得到Gw/Pw或者Gh/Ph后再乘以真實的Pw或Ph可得到真實的寬度與高度。
Objectness 分數(shù)的計算公式如下:

其中:CObject為網(wǎng)絡(luò)域中含有車輛的自信度;PObject為目標是否存在的標記值,當存在目標時,PObject=1,否則PObject=0;IOU 為預測框和原標記框的面積交并比。
在原始YOLOV3 網(wǎng)絡(luò)中,當B=3 且C=80 時,表示一個網(wǎng)絡(luò)域需要預測3 個邊界框且有80 個類別,通過設(shè)計多個先驗框可提高先驗框預測尺寸匹配的概率。
Tiny-YOLO 網(wǎng)絡(luò)刪除了原始YOLO 網(wǎng)絡(luò)中加深網(wǎng)絡(luò)的殘差結(jié)構(gòu),在節(jié)省內(nèi)存的同時加快了計算速度,且輸出的特征圖中網(wǎng)絡(luò)域個數(shù)只有13×13 和26×26 兩個尺寸,該網(wǎng)絡(luò)中的標準卷積會增大計算量,而MobileNet[20]的深度可分離卷積可大幅減少計算量。
深度可分離卷積將標準卷積分解為深度卷積和逐點卷積,可減少計算復雜度,適用于嵌入式設(shè)備,其分解過程如圖2 所示。

圖2 深度可分離卷積分解過程Fig.2 Decomposition procedure of depthwise separable convolution
卷積計算時的輸入F∈RDf×Df×M,Df×Df為輸入特征圖的大小,M為輸入特征圖的通道數(shù);卷積K∈RDk×Dk×M×N,Dk×Dk為卷積尺寸,M和N分別為卷積的通道數(shù)和個數(shù);輸出G∈RDg×Dg×N,Dg×Dg為輸出特征圖的大小,N為輸出特征圖的通道數(shù)。標準卷積的計算公式如下:

標準卷積的計算量為:

深度卷積是在輸入特征圖的每個通道上應用單個濾波器進行濾波,其輸入F∈RDf×Df×M,卷積,計算公式如下:

深度卷積的計算量為:

與標準卷積相比,深度卷積能有效進行維度變換,其除了過濾輸入通道,還可組合創(chuàng)建新功能。因此,通過1×1 卷積創(chuàng)建線性組合生成新特征,深度可分離卷積計算量為:

深度可分離卷積計算量與標準卷積計算量比值為:

由式(15)可見,當N>1 且Dk不變時,深度可分離卷積計算量較標準卷積計算量明顯降低。
為進一步降低Tiny-YOLO 網(wǎng)絡(luò)的計算量,本文引入3×3 深度可分離卷積(S Conv)代替原始Tiny-YOLO網(wǎng)絡(luò)中9個3×3標準卷積(Conv),改進前后的Tiny-YOLO網(wǎng)絡(luò)結(jié)構(gòu)及3×3 標準卷積的具體信息分別如圖3 和表1所示。為防止池化操作導致低級特征信息丟失,本文刪除原始Tiny-YOLO 網(wǎng)絡(luò)中所有的池化層(Maxpool),并采用全卷積層進行連接。

圖3 改進前后的Tiny-YOLO 網(wǎng)絡(luò)結(jié)構(gòu)Fig.3 Structure of the Tiny-YOLO network before and after improvement

表1 原始Tiny-YOLO 網(wǎng)絡(luò)中3×3 標準卷積信息Table 1 3 × 3 standard convolution information in original Tiny-YOLO network
本文采用MS COCO 數(shù)據(jù)集作為實驗數(shù)據(jù)集,選取車輛尺度不同且角度隨機的821 張圖像,圖像高度大于400 像素。將MS COCO 數(shù)據(jù)集中的700 張圖像作為訓練集,將MS COCO 數(shù)據(jù)集中121 張圖像和VOC2007 數(shù)據(jù)集中895 張圖像作為測試集。
本文實驗采用Ubuntu 16.04 操作系統(tǒng)和Tensorflow 深度學習框架,下位機設(shè)備為樹莓派Raspberry 3b+與NCS2 神經(jīng)計算棒,上位機設(shè)備為E5 2680+GTX1066。
本文在改進Tiny-YOLO 網(wǎng)絡(luò)的基礎(chǔ)上部署NCS2 神經(jīng)計算棒對網(wǎng)絡(luò)性能進一步優(yōu)化,具體流程如圖4 所示。改進的Tiny-YOLO 網(wǎng)絡(luò)的訓練和測試圖像的輸入尺寸與原始Tiny-YOLO 網(wǎng)絡(luò)一致,通過深度可分離卷積網(wǎng)絡(luò)提取車輛特征信息,再采用兩個不同尺寸的特征圖進行預測。在上位機設(shè)備上采用Tensorflow 深度學習框架對改進的Tiny-YOLO 網(wǎng)絡(luò)進行訓練,獲得Tensorflow 模型后,用Open VINO模型優(yōu)化器將其轉(zhuǎn)換為NCS2 神經(jīng)計算棒支持的IR文件,并部署到具有NCS2 神經(jīng)計算棒的樹莓派Raspberry 3b+上。

圖4 NCS2 神經(jīng)計算棒的部署流程Fig.4 Deployment procedure of NCS2 neural computing stick
在神經(jīng)網(wǎng)絡(luò)的計算中,由于乘法計算次數(shù)遠大于加法計算次數(shù),而一次乘法的計算時間遠大于一次加法的計算時間,因此加法的總計算時間可忽略。本文將一次乘法計算記為一次計算量,則原始Tiny-YOLO 網(wǎng)絡(luò)中9 層3×3 標準卷積在替換為深度可分離卷積前后各卷積層計算量與總計算量的對比情況如圖5 所示。可以看出,標準卷積被深度可分離卷積替換后,各卷積層計算量與總計算量均大幅降低,且總計算量從2.74×109減少到0.39×109,計算量降幅約為86%。

圖5 卷積替換前后各卷積層計算量與總計算量的對比Fig.5 Comparison of the calculation amount of each convolution layer and the total calculation amount before and after convolution replacement
本文使用平均準確率(Mean Average Precision,MAP)對原始Tiny-YOLO 網(wǎng)絡(luò)、改進Tiny-YOLO 網(wǎng)絡(luò)以及NCS2 神經(jīng)計算棒部署下改進Tiny-YOLO 網(wǎng)絡(luò)的檢測準確率進行評價,并以每秒傳輸幀數(shù)(Frames Per Second,F(xiàn)PS)作為檢測實時性的評價指標。MAP 的計算公式為:

其中,P為準確率,R為召回率,P(R)為不同召回率上的平均準確率。
表2 為采用改進Tiny-YOLO 網(wǎng)絡(luò)的方法(以下稱為改進Tiny-YOLO)、原始Tiny-YOLO 網(wǎng)絡(luò)的方法(以下稱為原始Tiny-YOLO)以及NCS2 神經(jīng)計算棒部署下改進Tiny-YOLO 網(wǎng)絡(luò)的方法(以下稱為改進Tiny-YOLO+NCS2)得到的實驗結(jié)果。可以看出:改進Tiny-YOLO 在MS COCO 數(shù)據(jù)集和VOC2007 數(shù)據(jù)集上的MAP 值比原始Tiny-YOLO 分別提高0.011 2 和0.002 3,改進Tiny-YOLO 的FPS 值為原始Tiny-YOLO的2 倍;改進Tiny-YOLO+NCS2 的MAP 值略低于其他兩種方法,但其FPS 值達到12,遠高于其他兩種方法。由上述結(jié)果可知,改進Tiny-YOLO+NCS2 在犧牲少許檢測精度的情況下,其實時性較其他兩種方法大幅提高,更適合部署在無人駕駛系統(tǒng)中。

表2 3 種算法的實驗結(jié)果Table 2 Experimental results of three algorithms
將改進Tiny-YOLO與原始Tiny-YOLO在VOC2007數(shù)據(jù)集上的檢測效果進行對比,結(jié)果如圖6 所示,其中每組左、右兩側(cè)圖像分別由原始Tiny-YOLO 和改進Tiny-YOLO 檢測得到。可以看出:當車輛尺寸不同時,原始Tiny-YOLO 較改進Tiny-YOLO 更易丟失小目標信息;當車輛被遮擋時,原始Tiny-YOLO 無法獲取被遮擋的車輛信息,改進Tiny-YOLO 可準確檢測到被遮擋的車輛信息;在惡劣環(huán)境與夜間環(huán)境下,原始Tiny-YOLO較改進Tiny-YOLO 易受環(huán)境和光線干擾。上述結(jié)果表明,改進Tiny-YOLO 的車輛檢測效果要優(yōu)于原始Tiny-YOLO。

圖6 2 種方法在不同場景下的檢測效果對比Fig.6 Comparison of detection effect of two methods in different scenes
本文提出一種結(jié)合改進Tiny-YOLO 網(wǎng)絡(luò)與NCS2 神經(jīng)計算棒的車輛檢測方法。采用深度可分離卷積代替原始Tiny-YOLO 網(wǎng)絡(luò)標準卷積,使用NCS2 神經(jīng)計算棒為低性能嵌入式設(shè)備提供深度學習加速功能。實驗結(jié)果表明,采用該方法檢測每秒傳輸幀數(shù)達到12,實時性較原始Tiny-YOLO 網(wǎng)絡(luò)大幅提高。后續(xù)將對改進Tiny-YOLO 網(wǎng)絡(luò)進行量化壓縮提高計算速度,以應用于STM32 等常用嵌入式設(shè)備。