江梟宇,李忠兵,張軍豪,彭 嬌,文 婷
(西南石油大學(xué)電氣信息學(xué)院,成都 610500)
環(huán)境感知是無(wú)人駕駛汽車(chē)路徑規(guī)劃的基礎(chǔ),無(wú)人駕駛系統(tǒng)主要通過(guò)攝像頭采集、實(shí)時(shí)檢測(cè)和獲取周邊車(chē)輛信息,對(duì)周邊環(huán)境形成認(rèn)知模型,從而實(shí)現(xiàn)對(duì)環(huán)境的感知。在車(chē)輛檢測(cè)方面,傳統(tǒng)車(chē)輛檢測(cè)方法主要通過(guò)梯度直方圖(Histogram of Oriented Gradient,HOG)[1]與尺度不變特征變換(Scale-Invariant Feature Transform,SIFT)[2]提取特征信息,并使用支持向量機(jī)(Support Vector Machine,SVM)[3]、Adaboost[4]或Gradient Boosting[5]等自適應(yīng)分類(lèi)器進(jìn)行識(shí)別,但該方法無(wú)法獲取高層語(yǔ)義信息。近年來(lái),深度學(xué)習(xí)技術(shù)在車(chē)輛檢測(cè)領(lǐng)域得到廣泛應(yīng)用。與傳統(tǒng)車(chē)輛檢測(cè)方法不同,基于深度學(xué)習(xí)的車(chē)輛檢測(cè)方法不是人為設(shè)置特征,而是通過(guò)反向傳播[6]自適應(yīng)獲取特征,具有較好的高層語(yǔ)義信息描述能力,該方法主要包括One Stage 方法和Two Stage 方法。Two Stage 方法是通過(guò)預(yù)選框[7-8]確定位置,針對(duì)該位置進(jìn)行識(shí)別,例如R-CNN[9]方法、Fast R-CNN[10]方法和Faster R-CNN[7]方法等。One Stage方法是端到端一次性識(shí)別出位置與類(lèi)別,例如YOLO[11-12]方法、SSD[13]方法等?;谏疃葘W(xué)習(xí)的車(chē)輛檢測(cè)方法具有較好的檢測(cè)精度,但是由于網(wǎng)絡(luò)模型復(fù)雜、參數(shù)量大以及計(jì)算周期長(zhǎng)導(dǎo)致檢測(cè)實(shí)時(shí)性較差,因此其無(wú)法應(yīng)用于實(shí)際車(chē)輛檢測(cè)。
為解決上述問(wèn)題,文獻(xiàn)[14]對(duì)YOLO 網(wǎng)絡(luò)進(jìn)行精簡(jiǎn)后提出Tiny-Yolo 網(wǎng)絡(luò),但是該網(wǎng)絡(luò)部署在嵌入式設(shè)備上參數(shù)多,且計(jì)算時(shí)間較長(zhǎng)。對(duì)此,文獻(xiàn)[15]采用神經(jīng)計(jì)算棒進(jìn)行加速計(jì)算。本文受上述文獻(xiàn)的啟發(fā),使用深度可分離卷積(Depthwise Separable Convolution,DSC)[16]替換傳統(tǒng)車(chē)輛檢測(cè)算法中Tiny-YOLO 網(wǎng)絡(luò)的標(biāo)準(zhǔn)卷積,將改進(jìn)的Tiny-YOLO網(wǎng)絡(luò)部署到配備N(xiāo)CS2 神經(jīng)計(jì)算棒的嵌入式設(shè)備上,并對(duì)目標(biāo)檢測(cè)準(zhǔn)確率與實(shí)時(shí)性進(jìn)行對(duì)比與分析。
在YOLO 系列網(wǎng)絡(luò)中,YOLOV2 是在YOLOV1的基礎(chǔ)上加入1×1 卷積并采用正則化方法防止過(guò)擬合,YOLOV3 是對(duì)YOLOV2 的改進(jìn),主要包括基礎(chǔ)網(wǎng)絡(luò)Darknet53 和全卷積層[17],其中Darknet53 由包含53 個(gè)卷積層的殘差結(jié)構(gòu)[18]組成,可降低網(wǎng)絡(luò)訓(xùn)練難度并提高計(jì)算效率。
將輸入的416 像素×416 像素圖像經(jīng)過(guò)Darknet53和全卷積層,得到輸出的13 像素×13 像素特征圖、26 像素×26 像素特征圖以及52 像素×52 像素特征圖。每個(gè)特征圖被分為多個(gè)網(wǎng)絡(luò)域,每個(gè)網(wǎng)絡(luò)域輸出尺寸為1×1×(B×(5+C)),其中,1×1 為最后一層卷積的大小,B為每個(gè)網(wǎng)絡(luò)域可預(yù)測(cè)的邊界框(以下稱(chēng)為預(yù)測(cè)框)數(shù)量。預(yù)測(cè)框包括5+C個(gè)屬性,分別為每個(gè)預(yù)測(cè)框中心點(diǎn)x軸坐標(biāo)的偏移值tx、中心點(diǎn)y軸坐標(biāo)的偏移值ty、中心點(diǎn)寬度的偏移值tw、中心點(diǎn)高度的偏移值th、Objectness 分?jǐn)?shù)以及C類(lèi)置信度。
由于YOLOV3 網(wǎng)絡(luò)訓(xùn)練會(huì)造成其梯度不穩(wěn)定,因此在MS COCO 數(shù)據(jù)集樣本中使用K-means 聚類(lèi)算法[19]生成9 個(gè)不同尺度的先驗(yàn)框,預(yù)測(cè)框基于這9 個(gè)先驗(yàn)框進(jìn)行微調(diào)。設(shè)Px、Py為特征圖中先驗(yàn)框中心點(diǎn)的預(yù)測(cè)坐標(biāo),Pw、Ph分別為特征圖中先驗(yàn)框的預(yù)測(cè)寬度和高度,Gx、Gy為特征圖中先驗(yàn)框中心點(diǎn)的真實(shí)坐標(biāo),Gw、Gh分別為特征圖中先驗(yàn)框的真實(shí)寬度和高度,其對(duì)應(yīng)偏移值的計(jì)算公式如下:
先驗(yàn)框高度與寬度的偏移值由真實(shí)值與預(yù)測(cè)值相除后縮放到對(duì)數(shù)空間得到。先驗(yàn)框預(yù)測(cè)值和真實(shí)值之間的偏移值可用于修正先驗(yàn)框和預(yù)測(cè)框的偏移關(guān)系,如圖1 所示。
圖1 先驗(yàn)框和預(yù)測(cè)框的偏移關(guān)系Fig.1 The offset relationship between prior box and prediction box
圖1 中A 點(diǎn)為預(yù)測(cè)框中心點(diǎn),B 點(diǎn)為預(yù)測(cè)中心點(diǎn),其所在網(wǎng)絡(luò)域的坐標(biāo)為(Cx,Cy),該坐標(biāo)由Px和Py確定。預(yù)測(cè)框中心點(diǎn)的坐標(biāo)值bx、by,以及中心點(diǎn)寬度bw、中心點(diǎn)高度bh由tx、ty、tw和th計(jì)算得到,相關(guān)公式如下:
其中,σ為Sigmoid 函數(shù)。網(wǎng)絡(luò)域尺寸為1×1,使用Sigmoid 函數(shù)將tx和ty縮放到0~1 范圍內(nèi),可有效確保目標(biāo)中心處于網(wǎng)絡(luò)域中,防止其過(guò)度偏移。由于tw和th使用了對(duì)數(shù)空間,因此將其通過(guò)指數(shù)計(jì)算得到Gw/Pw或者Gh/Ph后再乘以真實(shí)的Pw或Ph可得到真實(shí)的寬度與高度。
Objectness 分?jǐn)?shù)的計(jì)算公式如下:
其中:CObject為網(wǎng)絡(luò)域中含有車(chē)輛的自信度;PObject為目標(biāo)是否存在的標(biāo)記值,當(dāng)存在目標(biāo)時(shí),PObject=1,否則PObject=0;IOU 為預(yù)測(cè)框和原標(biāo)記框的面積交并比。
在原始YOLOV3 網(wǎng)絡(luò)中,當(dāng)B=3 且C=80 時(shí),表示一個(gè)網(wǎng)絡(luò)域需要預(yù)測(cè)3 個(gè)邊界框且有80 個(gè)類(lèi)別,通過(guò)設(shè)計(jì)多個(gè)先驗(yàn)框可提高先驗(yàn)框預(yù)測(cè)尺寸匹配的概率。
Tiny-YOLO 網(wǎng)絡(luò)刪除了原始YOLO 網(wǎng)絡(luò)中加深網(wǎng)絡(luò)的殘差結(jié)構(gòu),在節(jié)省內(nèi)存的同時(shí)加快了計(jì)算速度,且輸出的特征圖中網(wǎng)絡(luò)域個(gè)數(shù)只有13×13 和26×26 兩個(gè)尺寸,該網(wǎng)絡(luò)中的標(biāo)準(zhǔn)卷積會(huì)增大計(jì)算量,而MobileNet[20]的深度可分離卷積可大幅減少計(jì)算量。
深度可分離卷積將標(biāo)準(zhǔn)卷積分解為深度卷積和逐點(diǎn)卷積,可減少計(jì)算復(fù)雜度,適用于嵌入式設(shè)備,其分解過(guò)程如圖2 所示。
圖2 深度可分離卷積分解過(guò)程Fig.2 Decomposition procedure of depthwise separable convolution
卷積計(jì)算時(shí)的輸入F∈RDf×Df×M,Df×Df為輸入特征圖的大小,M為輸入特征圖的通道數(shù);卷積K∈RDk×Dk×M×N,Dk×Dk為卷積尺寸,M和N分別為卷積的通道數(shù)和個(gè)數(shù);輸出G∈RDg×Dg×N,Dg×Dg為輸出特征圖的大小,N為輸出特征圖的通道數(shù)。標(biāo)準(zhǔn)卷積的計(jì)算公式如下:
標(biāo)準(zhǔn)卷積的計(jì)算量為:
深度卷積是在輸入特征圖的每個(gè)通道上應(yīng)用單個(gè)濾波器進(jìn)行濾波,其輸入F∈RDf×Df×M,卷積,計(jì)算公式如下:
深度卷積的計(jì)算量為:
與標(biāo)準(zhǔn)卷積相比,深度卷積能有效進(jìn)行維度變換,其除了過(guò)濾輸入通道,還可組合創(chuàng)建新功能。因此,通過(guò)1×1 卷積創(chuàng)建線(xiàn)性組合生成新特征,深度可分離卷積計(jì)算量為:
深度可分離卷積計(jì)算量與標(biāo)準(zhǔn)卷積計(jì)算量比值為:
由式(15)可見(jiàn),當(dāng)N>1 且Dk不變時(shí),深度可分離卷積計(jì)算量較標(biāo)準(zhǔn)卷積計(jì)算量明顯降低。
為進(jìn)一步降低Tiny-YOLO 網(wǎng)絡(luò)的計(jì)算量,本文引入3×3 深度可分離卷積(S Conv)代替原始Tiny-YOLO網(wǎng)絡(luò)中9個(gè)3×3標(biāo)準(zhǔn)卷積(Conv),改進(jìn)前后的Tiny-YOLO網(wǎng)絡(luò)結(jié)構(gòu)及3×3 標(biāo)準(zhǔn)卷積的具體信息分別如圖3 和表1所示。為防止池化操作導(dǎo)致低級(jí)特征信息丟失,本文刪除原始Tiny-YOLO 網(wǎng)絡(luò)中所有的池化層(Maxpool),并采用全卷積層進(jìn)行連接。
圖3 改進(jìn)前后的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 標(biāo)準(zhǔn)卷積信息Table 1 3 × 3 standard convolution information in original Tiny-YOLO network
本文采用MS COCO 數(shù)據(jù)集作為實(shí)驗(yàn)數(shù)據(jù)集,選取車(chē)輛尺度不同且角度隨機(jī)的821 張圖像,圖像高度大于400 像素。將MS COCO 數(shù)據(jù)集中的700 張圖像作為訓(xùn)練集,將MS COCO 數(shù)據(jù)集中121 張圖像和VOC2007 數(shù)據(jù)集中895 張圖像作為測(cè)試集。
本文實(shí)驗(yàn)采用Ubuntu 16.04 操作系統(tǒng)和Tensorflow 深度學(xué)習(xí)框架,下位機(jī)設(shè)備為樹(shù)莓派Raspberry 3b+與NCS2 神經(jīng)計(jì)算棒,上位機(jī)設(shè)備為E5 2680+GTX1066。
本文在改進(jìn)Tiny-YOLO 網(wǎng)絡(luò)的基礎(chǔ)上部署NCS2 神經(jīng)計(jì)算棒對(duì)網(wǎng)絡(luò)性能進(jìn)一步優(yōu)化,具體流程如圖4 所示。改進(jìn)的Tiny-YOLO 網(wǎng)絡(luò)的訓(xùn)練和測(cè)試圖像的輸入尺寸與原始Tiny-YOLO 網(wǎng)絡(luò)一致,通過(guò)深度可分離卷積網(wǎng)絡(luò)提取車(chē)輛特征信息,再采用兩個(gè)不同尺寸的特征圖進(jìn)行預(yù)測(cè)。在上位機(jī)設(shè)備上采用Tensorflow 深度學(xué)習(xí)框架對(duì)改進(jìn)的Tiny-YOLO 網(wǎng)絡(luò)進(jìn)行訓(xùn)練,獲得Tensorflow 模型后,用Open VINO模型優(yōu)化器將其轉(zhuǎn)換為NCS2 神經(jīng)計(jì)算棒支持的IR文件,并部署到具有NCS2 神經(jīng)計(jì)算棒的樹(shù)莓派Raspberry 3b+上。
圖4 NCS2 神經(jīng)計(jì)算棒的部署流程Fig.4 Deployment procedure of NCS2 neural computing stick
在神經(jīng)網(wǎng)絡(luò)的計(jì)算中,由于乘法計(jì)算次數(shù)遠(yuǎn)大于加法計(jì)算次數(shù),而一次乘法的計(jì)算時(shí)間遠(yuǎn)大于一次加法的計(jì)算時(shí)間,因此加法的總計(jì)算時(shí)間可忽略。本文將一次乘法計(jì)算記為一次計(jì)算量,則原始Tiny-YOLO 網(wǎng)絡(luò)中9 層3×3 標(biāo)準(zhǔn)卷積在替換為深度可分離卷積前后各卷積層計(jì)算量與總計(jì)算量的對(duì)比情況如圖5 所示??梢钥闯觯瑯?biāo)準(zhǔn)卷積被深度可分離卷積替換后,各卷積層計(jì)算量與總計(jì)算量均大幅降低,且總計(jì)算量從2.74×109減少到0.39×109,計(jì)算量降幅約為86%。
圖5 卷積替換前后各卷積層計(jì)算量與總計(jì)算量的對(duì)比Fig.5 Comparison of the calculation amount of each convolution layer and the total calculation amount before and after convolution replacement
本文使用平均準(zhǔn)確率(Mean Average Precision,MAP)對(duì)原始Tiny-YOLO 網(wǎng)絡(luò)、改進(jìn)Tiny-YOLO 網(wǎng)絡(luò)以及NCS2 神經(jīng)計(jì)算棒部署下改進(jìn)Tiny-YOLO 網(wǎng)絡(luò)的檢測(cè)準(zhǔn)確率進(jìn)行評(píng)價(jià),并以每秒傳輸幀數(shù)(Frames Per Second,F(xiàn)PS)作為檢測(cè)實(shí)時(shí)性的評(píng)價(jià)指標(biāo)。MAP 的計(jì)算公式為:
其中,P為準(zhǔn)確率,R為召回率,P(R)為不同召回率上的平均準(zhǔn)確率。
表2 為采用改進(jìn)Tiny-YOLO 網(wǎng)絡(luò)的方法(以下稱(chēng)為改進(jìn)Tiny-YOLO)、原始Tiny-YOLO 網(wǎng)絡(luò)的方法(以下稱(chēng)為原始Tiny-YOLO)以及NCS2 神經(jīng)計(jì)算棒部署下改進(jìn)Tiny-YOLO 網(wǎng)絡(luò)的方法(以下稱(chēng)為改進(jìn)Tiny-YOLO+NCS2)得到的實(shí)驗(yàn)結(jié)果??梢钥闯觯焊倪M(jìn)Tiny-YOLO 在MS COCO 數(shù)據(jù)集和VOC2007 數(shù)據(jù)集上的MAP 值比原始Tiny-YOLO 分別提高0.011 2 和0.002 3,改進(jìn)Tiny-YOLO 的FPS 值為原始Tiny-YOLO的2 倍;改進(jìn)Tiny-YOLO+NCS2 的MAP 值略低于其他兩種方法,但其FPS 值達(dá)到12,遠(yuǎn)高于其他兩種方法。由上述結(jié)果可知,改進(jìn)Tiny-YOLO+NCS2 在犧牲少許檢測(cè)精度的情況下,其實(shí)時(shí)性較其他兩種方法大幅提高,更適合部署在無(wú)人駕駛系統(tǒng)中。
表2 3 種算法的實(shí)驗(yàn)結(jié)果Table 2 Experimental results of three algorithms
將改進(jìn)Tiny-YOLO與原始Tiny-YOLO在VOC2007數(shù)據(jù)集上的檢測(cè)效果進(jìn)行對(duì)比,結(jié)果如圖6 所示,其中每組左、右兩側(cè)圖像分別由原始Tiny-YOLO 和改進(jìn)Tiny-YOLO 檢測(cè)得到??梢钥闯觯寒?dāng)車(chē)輛尺寸不同時(shí),原始Tiny-YOLO 較改進(jìn)Tiny-YOLO 更易丟失小目標(biāo)信息;當(dāng)車(chē)輛被遮擋時(shí),原始Tiny-YOLO 無(wú)法獲取被遮擋的車(chē)輛信息,改進(jìn)Tiny-YOLO 可準(zhǔn)確檢測(cè)到被遮擋的車(chē)輛信息;在惡劣環(huán)境與夜間環(huán)境下,原始Tiny-YOLO較改進(jìn)Tiny-YOLO 易受環(huán)境和光線(xiàn)干擾。上述結(jié)果表明,改進(jìn)Tiny-YOLO 的車(chē)輛檢測(cè)效果要優(yōu)于原始Tiny-YOLO。
圖6 2 種方法在不同場(chǎng)景下的檢測(cè)效果對(duì)比Fig.6 Comparison of detection effect of two methods in different scenes
本文提出一種結(jié)合改進(jìn)Tiny-YOLO 網(wǎng)絡(luò)與NCS2 神經(jīng)計(jì)算棒的車(chē)輛檢測(cè)方法。采用深度可分離卷積代替原始Tiny-YOLO 網(wǎng)絡(luò)標(biāo)準(zhǔn)卷積,使用NCS2 神經(jīng)計(jì)算棒為低性能嵌入式設(shè)備提供深度學(xué)習(xí)加速功能。實(shí)驗(yàn)結(jié)果表明,采用該方法檢測(cè)每秒傳輸幀數(shù)達(dá)到12,實(shí)時(shí)性較原始Tiny-YOLO 網(wǎng)絡(luò)大幅提高。后續(xù)將對(duì)改進(jìn)Tiny-YOLO 網(wǎng)絡(luò)進(jìn)行量化壓縮提高計(jì)算速度,以應(yīng)用于STM32 等常用嵌入式設(shè)備。