顧晉,羅素云
(201620 上海市 上海工程技術(shù)大學(xué) 機(jī)械與汽車工程學(xué)院)
車輛檢測(cè)是目標(biāo)檢測(cè)的一種,目標(biāo)檢測(cè)的發(fā)展經(jīng)歷了傳統(tǒng)檢測(cè)方法、機(jī)器學(xué)習(xí)以及現(xiàn)在熱門的深度學(xué)習(xí)3 類算法階段。傳統(tǒng)的檢測(cè)方法主要由3 部分構(gòu)成滑窗區(qū)域選擇、手工設(shè)計(jì)特征并提?。ㄒ话阌蠬OG[1]、SIFT[2]等算法),分類器分類檢測(cè)(常用算法有SVM[3]、ADABOOST[4]等)。傳統(tǒng)目標(biāo)檢測(cè)方法的不足主要有:(1)滑窗區(qū)域選擇遍歷圖片效率低下,圖片的重要特征所在的部位各不相同,造成時(shí)間的浪費(fèi)嚴(yán)重;(2)手工設(shè)計(jì)特征受外部條件例如光照、陰影、目標(biāo)形態(tài)多變等影響嚴(yán)重,魯棒性差;(3)分類器受特征及樣本影響大,易產(chǎn)生假陽性,訓(xùn)練時(shí)間過長(zhǎng)等問題。
基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法,利用大量的數(shù)據(jù)完成對(duì)模型的訓(xùn)練[5],其算法的泛化能力、魯棒性更強(qiáng),更適合目標(biāo)復(fù)雜多變、背景復(fù)雜多變的實(shí)際應(yīng)用場(chǎng)景,而不是如傳統(tǒng)檢測(cè)算法一樣受限于實(shí)際應(yīng)用中的諸多因素。目前,主流的基于深度神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)方法主要分為TWO-STAGE方法和ONE-STAGE方法[6],即基于Region-proposal[7]的TWO-STAGE 方法:R-CNN,F(xiàn)ast R-CNN,MR-CNN 和基于回歸的ONE-STAGE[8]方法:YOLO,SSD。本文提出的改進(jìn)算法以YOLO v3 為骨架。YOLO 算法于2015年在CVPR2016 上出版,它避免了CNN 算法速度慢的問題,但同時(shí)也犧牲了一部分的定位精確度。相對(duì)于YOLO-v1,YOLO-9000,YOLO v3 解決了許多前身存在的問題。本文通過簡(jiǎn)化YOLO v3 的網(wǎng)絡(luò)結(jié)構(gòu),引入K-means++[9]處理數(shù)據(jù)集,用更優(yōu)秀的GIOU 損失函數(shù)代替原有的MSE 函數(shù),提升了YOLO v3 的精確度并兼具識(shí)別速度。實(shí)驗(yàn)證明,本文提出的改進(jìn)算法可取得較好的效果,Recall 值達(dá)到了88%。
YOLO 系列是基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法[10],本文以YOLO v3 算法為改進(jìn)對(duì)象進(jìn)行車輛檢測(cè)研究。
YOLO 系列算法的基本原理[11]是在圖片輸入后將其分成a×a 個(gè)柵格,當(dāng)圖片中物體的重心位置的坐標(biāo)落入某個(gè)柵格中,那么該柵格負(fù)責(zé)檢測(cè)該物體。每個(gè)格子產(chǎn)生多個(gè)預(yù)測(cè)框Bounding boxes 及其置信度object_conf,每個(gè)預(yù)測(cè)框包含5個(gè)參數(shù),即(x,y,h,w,置信度)。(x,y)預(yù)測(cè)邊界中心和對(duì)應(yīng)網(wǎng)格邊界偏移值,寬度(w,h)是幀的寬度和高度與整個(gè)圖像的寬度和高度的比值。置信度object_conf 反映是否包含物體以及準(zhǔn)確性,如式(1)所示:
式中:Pr(object)——柵格是否包含真實(shí)對(duì)象,假若柵格中包含物體則Pr(object)取值為1,若不包含則取值為0;——預(yù)測(cè)框與真實(shí)物體區(qū)域的交集區(qū)域的面積。YOLO 實(shí)現(xiàn)原理的示意圖如圖1 所示。
圖1 YOLO 實(shí)現(xiàn)原理Fig.1 Realization principle of YOLO
YOLO v3采用Darkent-53網(wǎng)絡(luò)結(jié)構(gòu)。Darknet-53 網(wǎng)絡(luò)融合了YOLO 9000 的優(yōu)點(diǎn)以及Darknet-19和新的Residual(殘差) 網(wǎng) 絡(luò)。Darknet-19 網(wǎng)絡(luò)由19 個(gè)卷積層,5 個(gè)最大池化層組成[12]。它類似于VGG 模型的傳統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu),假若YOLO v3 從傳統(tǒng)網(wǎng)絡(luò)模型增加到53 層,模型結(jié)構(gòu)會(huì)過于冗長(zhǎng)產(chǎn)生梯度消失問題,所以YOLO v3 引入了ResNet 的Residual 殘差結(jié)構(gòu),減少了訓(xùn)練難度。Darknet-19 結(jié)構(gòu)如圖2 所示,Darknet-53 網(wǎng)絡(luò)結(jié)構(gòu)如圖3 所示。
圖2 Darknet-19 網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Network structure of Darknet-19
圖3 Darknet-53 網(wǎng)絡(luò)結(jié)構(gòu)Fig.3 Network structure of Darknet-53
YOLO v3 的總體網(wǎng)絡(luò)結(jié)構(gòu)[13]主要由3 部分組成,分別為(1)輸入部分;(2)基礎(chǔ)網(wǎng)絡(luò)部分,YOLO v3 采用的是Darkent-53;(3)特征融合層。
YOLO v3 對(duì)圖片的輸入像素有一定的要求,圖中為416×416 像素,假若輸入的圖片過大,需要將圖片Resize 為合適的尺寸,否則算法中的感受野無法完整地感知到圖片。雖然Darknet-53中的卷積核帶有縮小輸出圖片尺寸的效果,但是仍然需要輸入復(fù)核尺寸的圖片,才能得到更好的檢測(cè)效果。
YOLO v3 基礎(chǔ)網(wǎng)絡(luò)部分即Darknet-53,如圖4 所示,由DBL 組件與殘差結(jié)構(gòu)res(n)組成。DBL 組件如圖4 左下角所示,它分別由卷積、BN、激活函數(shù)LeakyReLu[14]組成。卷積為1×1與3×3 組成,BN 層的計(jì)算公式[15]:
圖4 YOLO v3 總體網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.4 Total network structure of YOLO v3
式中:γ——縮放因子;μ——均值;σ2——方差;β——偏置;xconv——卷積計(jì)算結(jié)果。xconv計(jì)算公式如式(3)所示:
式中:res(n)——YOLO v3 的殘差;n——每個(gè)殘差塊中有n 個(gè)殘差單元。Darknet-53 得益于殘差簡(jiǎn)化了網(wǎng)絡(luò)結(jié)構(gòu),避免了梯度問題[16]。
殘差模型圖如圖5 所示。
圖5 殘差模型圖Fig.5 Residual model diagram
特征融合層為圖4 最右側(cè)所示。由3 個(gè)尺度組成[17],分別為(1)最小尺度Y1 層,輸入13×13 的特征圖,一共1 024 個(gè)通道,進(jìn)行一系列卷積操作,通道數(shù)減少為75 個(gè),輸出同樣為13×13 的特征圖,隨后進(jìn)行分類與回歸定位;(2)中等尺度Y2 層,對(duì)79 層的13×13,512通道的特征圖進(jìn)行卷積操作,進(jìn)行上采樣,生成26×26,256 通道的特征圖,然后將其與61 層的26×26,512 通道的中尺度特征圖進(jìn)行合并,最終輸出為26×26 大小的特征圖,75 個(gè)通道,然后在此進(jìn)行分類和定位回歸;(3)最大尺度Y3層,對(duì)91 層的26×26,256 通道的特征圖進(jìn)行卷積操作,生成26×26,128 通道的特征圖,進(jìn)行上采樣生成52×52,128 通道的特征圖,然后將其與36 層的52×52,256 通道的中尺度特征度合并,進(jìn)行一系列卷積操作,通道數(shù)最后減少為75 個(gè)。最終輸出52×52 大小的特征圖,75 個(gè)通道,最后在此進(jìn)行分類和位置回歸。
選擇K-均值聚類算法處理數(shù)據(jù)。由于K-means 并不適合車輛檢測(cè)這類位置變化頻繁的場(chǎng)景,于是采用K-means++算法優(yōu)化候選區(qū)域的選取,提高實(shí)驗(yàn)結(jié)果的精度。
means++[18]的算法步驟分別是:(1)從輸入的數(shù)據(jù)點(diǎn)集合中隨機(jī)選擇一個(gè)點(diǎn)作為第一個(gè)聚類中心;(2)對(duì)于數(shù)據(jù)集中的每一個(gè)點(diǎn)x,計(jì)算它與最近聚類中心的距離D(x);(3)重新選擇一個(gè)D(x)值比較大的數(shù)據(jù)點(diǎn)作為新的聚類中心,這樣被選為聚類中心的概率較大;(4)重復(fù)2和3 直到k 個(gè)聚類中心被選出來;(5)利用這k個(gè)初始的聚類中心來運(yùn)行標(biāo)準(zhǔn)的K-means 算法。
標(biāo)準(zhǔn)K-means 的算法過程為:(1)隨機(jī)生成初始位置;(2)將所有數(shù)據(jù)點(diǎn)分類到最近的歐氏質(zhì)心;(3)計(jì)算一個(gè)類中所有數(shù)據(jù)點(diǎn)的位置,并計(jì)算出新的質(zhì)心;(4)重復(fù)上述步驟,直到重心位置不再改變。
K-means 的聚類過程如圖6 所示。
圖6 K-means 的聚類過程圖Fig.6 Clustering procedure of K-means
K-means++可以根據(jù)實(shí)際應(yīng)用場(chǎng)景選擇合適的聚類中心,盡可能采集數(shù)據(jù)集中的數(shù)據(jù)點(diǎn),將數(shù)據(jù)集進(jìn)行分類,使其更加適合YOLO v3 對(duì)數(shù)據(jù)尺寸敏感的特點(diǎn),從而提升算法的精確度與效率。
YOLO-v3 網(wǎng)絡(luò)模型采用Darknet-53,相較于YOLO2 的Darknet-19 引入了殘差,成功簡(jiǎn)化了模型結(jié)構(gòu)。簡(jiǎn)化模型結(jié)構(gòu)的意義在于更少的參數(shù)參與算法計(jì)算,減少冗余的通道,減少內(nèi)存的浪費(fèi)。此外,訓(xùn)練過程中結(jié)點(diǎn)劃分過程不斷地重復(fù),會(huì)造成算法將訓(xùn)練集自身的特點(diǎn)當(dāng)作所有的數(shù)據(jù)都具有的一般性質(zhì),從而導(dǎo)致過擬合[19],剪枝處理也可以有效地降低這種風(fēng)險(xiǎn),降低模型的大小,加快訓(xùn)練速度。
剪枝算法主要是基于BN 層的γ參數(shù)并針對(duì)Darknet-53 中的卷積層進(jìn)行剪枝,γ參數(shù)公式如下:
原理為BN 層對(duì)通道進(jìn)行歸一化處理。
模型剪枝是為了減少卷積層中特征性較弱的神經(jīng)元,進(jìn)而達(dá)到減少不必要的計(jì)算、加快速度的目的。主要針對(duì)粗粒度剪枝中的通道剪枝。采用BN 層的參數(shù)γ[20]作為通道剪枝因子。
剪枝算法的步驟簡(jiǎn)單分為以下3 步[21]:(1)對(duì)模型進(jìn)行稀疏化訓(xùn)練,提取稀疏化后的BN 權(quán)重,統(tǒng)計(jì)得出的γ并排列,根據(jù)一定的比例制定臨界值s;(2)將小于s 的γ減掉,得到剪枝后的模型;(3)對(duì)剪枝得到的模型進(jìn)行通道調(diào)整。卷積層剪枝前后部分通道數(shù)變化如圖7 所示。
圖7 卷積層剪枝前后部分通道數(shù)變化Fig.7 Change of channel's number of convolution layer
如上文所述,在YOLO 層中存在減少通道數(shù)的操作,我們進(jìn)一步減少特征通道數(shù)量,更加精簡(jiǎn)了模型,加快了模型效率。
YOLO-v3 的損失函數(shù)采取的是MSE 回歸策略。YOLO-v3 目標(biāo)檢測(cè)算法的缺陷是對(duì)輸入圖像的尺寸非常敏感,原因就在于MSE 函數(shù)作為YOLO-v3 的損失函數(shù)對(duì)目標(biāo)的尺度非常敏感[22]。MSE 損失函數(shù)的模型圖如圖8 所示。
圖8 MSE 損失函數(shù)的模型圖Fig.8 Model diagram of MSE loss function
本文提出用GIOU 回歸策略替代MSE 回歸策略,GIOU 函數(shù)模型圖如圖9 所示。
圖9 GIOU 函數(shù)模型圖Fig.9 Diagram of GIOU model
GIOU 函數(shù)計(jì)算公式如下:
相比于MSE 與現(xiàn)如今使用較多的IOU 回歸策略,GIOU 有如下優(yōu)點(diǎn):(1)GIOU 具有作為一個(gè)度量標(biāo)準(zhǔn)的優(yōu)良性質(zhì);(2)具有尺度不變性;(3)GIOU 的值是小于IOU 的值的;(4)在A,B 沒有良好對(duì)齊時(shí),會(huì)導(dǎo)致C 的面積增大,從而使GIOU 的值變小,在矩形框沒有重疊區(qū)域時(shí)依然可以計(jì)算損失函數(shù)值,比IOU 函數(shù)更加優(yōu)秀[23]。
采用GIOU 回歸策略代替原有MSE 回歸策略可以有效解決YOLO-v3 車輛檢測(cè)算法對(duì)輸入圖形尺寸過于敏感導(dǎo)致精度差的問題。
本實(shí)驗(yàn)是在Windows 系統(tǒng)下進(jìn)行的。采用Nvidia GeForce RTX2060 顯卡,Intel 酷睿i7-10875H 8 核16 線程CPU處理器,32G內(nèi)存。深度學(xué)習(xí)框架為KERAS-YOLO v3。為了提高計(jì)算速度,減少訓(xùn)練時(shí)間,在NVIDIA 官網(wǎng)上下載CUDA-Enabled GeForce and TITAN Products 調(diào)用GPU 進(jìn)行訓(xùn)練。
本實(shí)驗(yàn)采用COCO 車輛類別數(shù)據(jù)集,共下載了80 000 張圖片。YOLO-v3 訓(xùn)練中不一定需要負(fù)樣本,我們只需標(biāo)出需要檢測(cè)的樣本即可。訓(xùn)練集,測(cè)試集,驗(yàn)證集按3∶1∶1 劃分。隨后制作標(biāo)簽覆蓋檢測(cè)圖片的正確位置。
Darknet-53 使用COCO2017 車輛類別數(shù)據(jù)集訓(xùn)練YOLO-v3 的步驟分別為:(1)將COCO 的Instances_val(train)2017.json 標(biāo)簽轉(zhuǎn)為VOC(.xml)的標(biāo)簽;(2)分別得到了訓(xùn)練集的xml 和訓(xùn)練過程中的測(cè)試集的xml 之后,我們進(jìn)一步使用腳本轉(zhuǎn)化xml 為txt,其中分為2 部分。第1 部分將所有xml 的路徑取出來放到train_all.txt 中,第2部分將得到的文件一起整理好,生成每個(gè)xml 對(duì)應(yīng)的txt 標(biāo)簽;(3)最后將擬生成的txt 標(biāo)簽放到VOC2020 的labels 的train2017 和val2017 下面就可以開始訓(xùn)練darknet 了。
對(duì)改進(jìn)過的YOLO-v3 車輛檢測(cè)算法指標(biāo)進(jìn)行了動(dòng)態(tài)記錄。平均損失函數(shù)的變化如圖10 所示。
圖10 平均損失函數(shù)的變化Fig.10 Diagram of Avg_loss
在平均準(zhǔn)確度與召回率方面,將原YOLO-v3算法和改進(jìn)過后的YOLO-v3 算法進(jìn)行了比較,兩者均在COCO 數(shù)據(jù)集上進(jìn)行測(cè)試。從表1 可以看出,本文提出的改進(jìn)的YOLO-v3 車輛檢測(cè)算法Map 值達(dá)到81.3%,原算法Map 值為75.5%。召回率改進(jìn)后的算法可以達(dá)到88.18%,原算法只有85.11%。檢測(cè)幀率也得到了提高,表明改進(jìn)后的YOLO-v3 車輛檢測(cè)算法檢測(cè)效果比原算法更高,更準(zhǔn)確。
表1 Map 值與召回率比較結(jié)果Tab.1 Results of Map and Recall comparison
利用改進(jìn)的算法對(duì)2 個(gè)視頻進(jìn)行了測(cè)試,分別為高速公路錄像視頻,以及車輛車載鏡頭視頻,測(cè)試結(jié)果如圖11 所示。
本文提出的基于YOLO-v3 的改進(jìn)算法的實(shí)際測(cè)試結(jié)果如圖11 所示。從圖(a),圖(b),圖(c),圖(d),圖(e),圖(j)中可以看出該算法對(duì)密集對(duì)象檢測(cè)效果非常好;從圖(h)中可以看出對(duì)突然出現(xiàn)的車輛檢測(cè)效果很好;從圖(g),圖(i),圖(k)中可以看出,改進(jìn)過后的算法對(duì)尺寸較小、較密集的物體檢測(cè)效果良好。
圖11 測(cè)試結(jié)果Fig.11 Result of test
基于YOLO-v3 的車輛檢測(cè)算法,利用深度學(xué)習(xí)的特點(diǎn),有效避免了傳統(tǒng)算法需要人工選擇特征的弊端。本文首先采用K-means++聚類策略處理數(shù)據(jù)有效避免了梯度問題,提高了之后的檢測(cè)效率。隨后通過模型剪枝以及采用新的回歸策略,進(jìn)一步提高了YOLO-v3 的檢測(cè)效率和精準(zhǔn)度。實(shí)驗(yàn)結(jié)果和現(xiàn)實(shí)測(cè)試結(jié)果表明,本文提出的基于改進(jìn)的YOLO-v3 車輛檢測(cè)算法比原有算法的效果有所提高。