王茂琦 李 軍 馬佶辰 徐康民
(南京理工大學(xué)自動(dòng)化學(xué)院 南京 210094)
隨著傳感器、半導(dǎo)體等技術(shù)的進(jìn)步,使用無(wú)人機(jī)航拍視頻檢測(cè)道路中的車輛正在成為許多學(xué)者研究的熱點(diǎn)。無(wú)人機(jī)無(wú)論是在民用生活還是在軍事方面都有著重要的作用,使用航拍視頻對(duì)道路中的車輛進(jìn)行檢測(cè),不僅可以對(duì)道路的車流量進(jìn)行統(tǒng)計(jì),而且還可以對(duì)檢測(cè)出的車輛進(jìn)一步追蹤分析,檢測(cè)車輛有無(wú)違反交通情況等[1]。
傳統(tǒng)的目標(biāo)檢測(cè)是基于人工設(shè)計(jì)特征和淺層分類器,它不僅在檢測(cè)精度方面有著很大的提升空間,而且魯棒性也不盡人意[2]。直到2012年,Hilton課題組使用AlexNet深度卷積網(wǎng)絡(luò)在ImageNet大賽上不僅取得了第一名的成績(jī),而且在分類效果上要遠(yuǎn)超過(guò)第二名[3],才使得許多學(xué)者開(kāi)始對(duì)深度學(xué)習(xí)展開(kāi)了更深一步的研究。近些年來(lái),在目標(biāo)檢測(cè)領(lǐng)域出現(xiàn)了許多優(yōu)秀的深度學(xué)習(xí)算法。像2014年Ren等 提 出 的R-CNN[4]算 法,它 使 用selective search算法結(jié)合卷積操作替代了傳統(tǒng)的圖像特征提取算法,將平均目標(biāo)檢測(cè)精度提升了30%。之后Girshick和Ren等又在R-CNN的基礎(chǔ)上進(jìn)行改善,提出了Fast R-CNN[5]和Faster R-CNN[6]算法,在檢測(cè)精度和速度上均有很大提高。YOLO(You Only Look Once)算法最早是Redmon等在2015年提出的基于端到端的目標(biāo)檢測(cè)算法[7],其檢測(cè)速度達(dá)到了實(shí)時(shí)檢測(cè)水平(45f/s)。隨后Redmon等又在YOLO算法基礎(chǔ)上,提出了YOLO v2[8],YOLO v3[9]等算法,其中YOLO v3算法能夠在保持檢測(cè)速度的同時(shí)取得較好的檢測(cè)精度。2016年,W Liu等[10]提出了SSD(Single Shot MultiBox Detector)檢測(cè)算法,該算法在檢測(cè)速度和精度上均取得了不錯(cuò)的效果。
目前廣泛使用的深度學(xué)習(xí)網(wǎng)絡(luò)主要可以分為兩類:第一類是基于區(qū)域檢測(cè)的算法,像R-CNN,F(xiàn)ast-RCNN,F(xiàn)aster-RCNN等算法;第二類是基于回歸的目標(biāo)檢測(cè)算法,像SSD、YOLO等算法[11]。其中第二類目標(biāo)檢測(cè)算法采用的是端到端的目標(biāo)檢測(cè)方式,在檢測(cè)速度上有很大的提升,可以適用于許多需要實(shí)時(shí)檢測(cè)的場(chǎng)景。
本文設(shè)計(jì)的深度卷積網(wǎng)絡(luò)是基于YOLO v3算法的一種實(shí)時(shí)檢測(cè)小汽車算法。它以YOLO v3網(wǎng)絡(luò)架構(gòu)為基礎(chǔ),將航拍下的小汽車作為檢測(cè)目標(biāo),對(duì)YOLO v3網(wǎng)絡(luò)進(jìn)行改進(jìn),并且針對(duì)航拍下的小汽車檢測(cè)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)一步優(yōu)化,設(shè)計(jì)出一種帶有混合深度卷積[12]的YOLO深度學(xué)習(xí)網(wǎng)絡(luò)。本次實(shí)驗(yàn)測(cè)試仿真平臺(tái)使用的是Nvidia 1060顯卡,測(cè)試結(jié)果表明:所提出的算法在檢測(cè)精度和速度上相較于原始的YOLO v3均有提高。在航拍的視頻檢測(cè)中,AP(Average Precision)達(dá)到了91.60%,比原始算法提高了2.4%;檢測(cè)速率提高到41.6f/s,比原始算法提高了32.5%。
YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)是通過(guò)全卷積實(shí)現(xiàn)的。它的輸入圖像大小會(huì)重新調(diào)整為416×416,并采用3×3和1×1的連續(xù)卷積核對(duì)輸入圖像進(jìn)行特征提?。?3]。為了檢測(cè)不同大小的目標(biāo),YOLO v3采用多尺度特征融合來(lái)增強(qiáng)網(wǎng)絡(luò)檢測(cè)的魯棒性,特征圖的大小分別為13×13、26×26、52×52。YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)如圖1和圖2所示,圖1為FPN網(wǎng)絡(luò)結(jié)構(gòu),圖2為特征提取網(wǎng)絡(luò)結(jié)構(gòu)。A、B和C代表連接點(diǎn),殘差代表殘差網(wǎng)絡(luò)塊,Convs代表連續(xù)卷積模塊。
圖1 YOLO v3 FPN結(jié)構(gòu)圖
圖2 YOLO v3特征提取網(wǎng)絡(luò)結(jié)構(gòu)
YOLO v3在損失函數(shù)設(shè)計(jì)上一共分為三個(gè)部分,分別是坐標(biāo)、分類和置信度損失,最終的損失由三部分相加所得,如式(1)所示:
其中cooError代表預(yù)測(cè)數(shù)據(jù)與標(biāo)定數(shù)據(jù)之間的坐標(biāo)損失,cla Error代表分類損失,conError代表置信度損失。
坐標(biāo)損失包含目標(biāo)框坐標(biāo)(x,y,w,h)和預(yù)測(cè)框坐標(biāo)四個(gè)元素的均方和誤差,其中表示各自預(yù)測(cè)框中是否存在待檢測(cè)的物體,和IOU值大小有關(guān)系。s2為網(wǎng)絡(luò)輸入圖片劃分網(wǎng)格個(gè)數(shù),B為每個(gè)網(wǎng)格產(chǎn)生候選框(anchor box)個(gè)數(shù)。坐標(biāo)損失如式(2)所示:
原始的YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)都是采用大小為1×1,3×3的卷積核連續(xù)進(jìn)行卷積操作,在速度和精度上雖然都取得了較好的效果,但是仍有許多改進(jìn)空間。本文在YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上,首先修改了YOLO v3網(wǎng)絡(luò)結(jié)構(gòu),用混合深度卷積代替了原有的深度卷積;然后為了增強(qiáng)航拍下的小目標(biāo)識(shí)別能力,將深層特征與更淺層特征相融合,縮小卷積核的感受野;最后在損失函數(shù)上進(jìn)行改進(jìn),使用GIOU[14]代替了傳統(tǒng)的IOU計(jì)算損失。
在原始的YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)中,每一次的卷積操作只對(duì)應(yīng)了唯一大小的卷積核。單一卷積核不僅運(yùn)算量較大、而且對(duì)圖像特征提取也比較單一。在改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)后,一次混合深度卷積中使用不同大小的卷積核對(duì)輸入的圖像進(jìn)行特征提取,首先將輸入張量分成n維虛擬張量,然后依次使用不同卷積核分別對(duì)輸入虛擬張量進(jìn)行特征提取,最后將不同卷積核提取的特征向量合并。提供選擇的卷積核大小有3×3,5×5,7×7,9×9。在使用混合深度卷積后,不僅減少了網(wǎng)絡(luò)參數(shù)計(jì)算量,而且提取到的圖像特征將更豐富,從而改善了網(wǎng)絡(luò)的檢測(cè)精度和速度?;旌仙疃染矸e的結(jié)構(gòu)如圖3所示。
圖3 混合深度卷積結(jié)構(gòu)
具體的混合深度卷積過(guò)程如下:
1)假設(shè)輸入張量為X(w,h,c),w為輸入空間寬度,h為輸入空間高度,c通道大小。首先將輸入張量平均劃分為n組的虛擬張量X(w,h,c1),X(w,h,c2)…X(w,h,cn),其中所有的虛擬張量和輸入張量有相同的寬度和高度,并且有c=c1+…+cn。
2)假設(shè)原始的卷積核為W(k,k,c),k為卷積和大小,c為輸入通道大小,在將輸入張量平均劃分好之后,再將卷積核也對(duì)應(yīng)劃分為同樣的n組虛擬卷積核W(k1,k1,c1),W(k2,k2,c2)…W(kn,kn,cn)。其中c=c1+…+cn ki∈{3,5,7,9},i=1,2···n。
3)對(duì)于相對(duì)應(yīng)的兩組輸入張量和卷積核,得到底t組虛擬輸出張量如下:
4)最終的輸出張量Y(x,y,z)是將所有的虛擬輸出張量串聯(lián),即:
在原網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上,融合混合深度卷積,將原始大小為3×3的卷積核替換成大小為3×3、5×5等的混合深度卷積核。為了適應(yīng)改進(jìn)后網(wǎng)絡(luò)參數(shù)學(xué)習(xí),將網(wǎng)絡(luò)的輸入圖片大小重整為224×224。改進(jìn)后的網(wǎng)絡(luò)對(duì)比于原先的YOLO v3網(wǎng)絡(luò)則需要計(jì)算更少的網(wǎng)絡(luò)參數(shù),減小了網(wǎng)絡(luò)模型,加速了網(wǎng)絡(luò)的檢測(cè)速度。
為了改善算法對(duì)小目標(biāo)的檢測(cè)效果,網(wǎng)絡(luò)在yolo檢測(cè)層融合不同尺度特征,在不同的特征圖上進(jìn)行預(yù)測(cè)。與YOLO v3檢測(cè)網(wǎng)絡(luò)結(jié)構(gòu)不同的是,改進(jìn)后網(wǎng)絡(luò)重新修改了yolo層檢測(cè)尺度,將第四次下采樣大小為14×14的特征圖進(jìn)行4倍上采樣與第二次下采樣的特征圖進(jìn)行特征融合。網(wǎng)絡(luò)最終輸出了3個(gè)不同大小的特征圖進(jìn)行目標(biāo)檢測(cè),其大小分別為7×7,14×14,56×56。多尺度融合后的網(wǎng)絡(luò)使得相同的卷積核在原圖中的感受野減小,改善網(wǎng)絡(luò)對(duì)于小目標(biāo)的檢測(cè)精度。改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)如圖4、5所示。
圖4 改進(jìn)后的FPN網(wǎng)絡(luò)結(jié)構(gòu)
IOU(Intersaction over Union)是YOLO v3回歸損失中使用的一個(gè)損失度量,其計(jì)算公式如式(7)所示:
其中Bgb為目標(biāo)框(ground bounding box),Bpb為預(yù)測(cè)框(predicted bounding box)。它可以表示預(yù)測(cè)框和目標(biāo)框之間的距離,在回歸損失中常使用IOU來(lái)作為一種損失度量。
圖5 改進(jìn)后的特征提取網(wǎng)絡(luò)結(jié)構(gòu)
在直接使用IOU作為度量標(biāo)準(zhǔn)時(shí),如果Bgb與Bpb沒(méi)有相交,此時(shí)的IOU就不能反應(yīng)真實(shí)的距離以及無(wú)法進(jìn)行梯度回傳,導(dǎo)致無(wú)法進(jìn)行訓(xùn)練學(xué)習(xí)。此外,IOU也無(wú)法精準(zhǔn)反應(yīng)兩個(gè)框的重合大小?;谏鲜鰡?wèn)題,對(duì)于航拍下的小汽車檢測(cè)采用GIOU作為一種新的損失度量。GIOU的計(jì)算過(guò)程如下。
1)對(duì)于任意Bgb、Bpb?Rn,有最小的一個(gè)閉集C,使得Bgb、Bpb?C?Rn。
對(duì)于IOU而言,其值域?yàn)椋?,1],而GIOU的值域?yàn)椋?1,1]。在兩個(gè)形狀完全重合時(shí),有GIOU=IOU=1,當(dāng)兩個(gè)形狀沒(méi)有重疊部分時(shí),IOU為0,GIOU為-1。在使用GIOU代替IOU作為一種新的損失度量后,即使Bgb與Bpb沒(méi)有相交,此時(shí)的GIOU仍然有損失進(jìn)行梯度回傳,依然可以進(jìn)行優(yōu)化。
為了提高算法在不同環(huán)境下的檢測(cè)效果,本次訓(xùn)練中使用的圖像由大疆公司發(fā)布的四旋翼無(wú)人機(jī)Mavic Pro在不同天氣、角度、遮擋等情況下拍攝。無(wú)人機(jī)飛行高度50m~100m,相機(jī)拍攝角度垂直向下。視頻共拍攝1000張照片,其中訓(xùn)練組900張,測(cè)試組100張。帶標(biāo)簽小汽車總數(shù)為23316輛。仿真平臺(tái)配置見(jiàn)表1。
表1 測(cè)試平臺(tái)配置表
在環(huán)境配置完成后,對(duì)YOLO v3和改進(jìn)后的YOLO v3分別進(jìn)行訓(xùn)練,訓(xùn)練批次為10000輪。采用隨機(jī)梯度下降算法對(duì)網(wǎng)絡(luò)模型參數(shù)進(jìn)行更新直至收斂。為了加快網(wǎng)絡(luò)模型的收斂速度,將權(quán)值的初始學(xué)習(xí)率設(shè)置為0.01、8000和9000輪后學(xué)習(xí)衰減系數(shù)分別設(shè)置為0.1。
分別對(duì)YOLO v3和改進(jìn)的YOLO v3進(jìn)行訓(xùn)練時(shí),每1000次訓(xùn)練迭代保存一次最新的網(wǎng)絡(luò)權(quán)值參數(shù)文件。在訓(xùn)練過(guò)程中發(fā)現(xiàn),經(jīng)過(guò)9000輪的訓(xùn)練,網(wǎng)絡(luò)的精度和損失幾乎沒(méi)有變化,均達(dá)到穩(wěn)定狀態(tài)。圖6和圖7分別顯示了訓(xùn)練過(guò)程中的AP和平均損失(Avg Loss)。
圖6 訓(xùn)練過(guò)程中AP對(duì)比圖
圖7 訓(xùn)練過(guò)程中損失對(duì)比圖
為了更準(zhǔn)確地比較兩種算法的檢測(cè)精度和速度。訓(xùn)練結(jié)束后,利用網(wǎng)絡(luò)保存的7000輪、8000輪、9000輪的參數(shù)權(quán)重文件,比較檢測(cè)精度和速度。在比較兩種算法性能時(shí),采用控制變量法分別計(jì)算了相同硬件配置下兩種算法的AP和檢測(cè)速度。通過(guò)比較不同訓(xùn)練迭代的權(quán)重文件,改進(jìn)后的YOLO v3具有更高的檢測(cè)精度。結(jié)果見(jiàn)表2。
表2 迭代次數(shù)與AP對(duì)比表
在對(duì)不同網(wǎng)絡(luò)結(jié)構(gòu)的AP進(jìn)行測(cè)試后,選擇兩種網(wǎng)絡(luò)結(jié)構(gòu)中AP的最高權(quán)值文件,在相同配置下測(cè)試檢測(cè)速度。在檢測(cè)同一視頻文件時(shí),YOLO v3的平均檢測(cè)速度約為31.4f/s,而改進(jìn)后的YOLO v3的平均檢測(cè)速度約為41.6f/s。
為了驗(yàn)證改進(jìn)算法對(duì)小目標(biāo)檢測(cè)的準(zhǔn)確性,將無(wú)人機(jī)飛行高度定位在70m處,并在視頻上測(cè)試了小車檢測(cè)效果。圖8顯示了YOLO v3下的檢測(cè)效果,圖9顯示了改進(jìn)的YOLO v3檢測(cè)效果。從圖10的放大圖可以看出,與右圖相比,左圖中標(biāo)記為A、B、C的車具有更精確的檢測(cè)框。改進(jìn)YOLO v3算法可以檢測(cè)出D車,而YOLO v3算法不能檢測(cè)到D車。結(jié)果表明,改進(jìn)YOLO v3算法比YOLO v3算法具有更高的檢測(cè)精度。
圖8 YOLO v3檢測(cè)圖
圖9 改進(jìn)YOLO v3檢測(cè)圖
圖10 局部放大圖
從對(duì)比結(jié)果來(lái)看,在準(zhǔn)確度方面,改進(jìn)后的YOLO v3略有提高,比YOLO v3提高了2.4%。在檢測(cè)速度上,改進(jìn)后的速度提高了32.5%。
為了驗(yàn)證改進(jìn)的YOLO v3算法的有效性,我們將當(dāng)前主流的深度學(xué)習(xí)算法使用相同的訓(xùn)練樣本與改進(jìn)的YOLO v3算法進(jìn)行了比較,并將其他算法參數(shù)設(shè)置為默認(rèn)值。比較結(jié)果用檢測(cè)AP與速度進(jìn)行評(píng)價(jià),結(jié)果如表3和圖11所示。
表3 不同算法實(shí)驗(yàn)結(jié)果對(duì)比表
圖11 不同算法速度和精度對(duì)比圖
本文提出的改進(jìn)YOLO v3算法應(yīng)用于航拍下的小汽車檢測(cè),解決了以往算法中檢測(cè)精度和實(shí)時(shí)性不足的問(wèn)題。改進(jìn)YOLO v3算法在YOLO v3的網(wǎng)絡(luò)基礎(chǔ)上,將原始的單一深度卷積核替換為更適合特征提取的混合深度卷積核并且修改了檢測(cè)特征圖尺度大小,因此模型學(xué)習(xí)參數(shù)減少了,整體的網(wǎng)絡(luò)檢測(cè)速率也得到提升。在回歸損失函數(shù)設(shè)計(jì)時(shí),使用GIOU代替IOU度量損失,提高了算法的檢測(cè)精度。測(cè)試結(jié)果表明,改進(jìn)YOLO v3算法更適用于航拍下的小汽車檢測(cè)。