邢鎮(zhèn)委, 伋 淼, 張夢(mèng)龍
(安徽理工大學(xué) 電氣與信息工程學(xué)院, 安徽 淮南 232001)
隨著自動(dòng)駕駛、實(shí)時(shí)監(jiān)控系統(tǒng)和智能交通系統(tǒng)等技術(shù)的快速發(fā)展,對(duì)于道路車(chē)輛檢測(cè)的研究也越來(lái)越廣泛?,F(xiàn)有的車(chē)輛檢測(cè)算法主要分為基于運(yùn)動(dòng)模型的算法、基于特征模型的算法和基于卷積神經(jīng)網(wǎng)絡(luò)的算法3種,其中基于卷積神經(jīng)網(wǎng)絡(luò)的道路車(chē)輛檢測(cè)算法實(shí)用性最強(qiáng)[1]?;诰矸e神經(jīng)網(wǎng)絡(luò)的車(chē)輛檢測(cè)算法可以分為兩類(lèi):一類(lèi)檢測(cè)精度高,但計(jì)算量大,導(dǎo)致檢測(cè)速度慢,典型的有RCNN、Fast RCNN、Faster RCNN等;另一類(lèi)通過(guò)對(duì)邊界框進(jìn)行回歸,將圖像中目標(biāo)所在的位置進(jìn)行框選,這類(lèi)算法復(fù)雜性低,能夠在更短的時(shí)間內(nèi)檢測(cè)出目標(biāo),但檢測(cè)準(zhǔn)確率會(huì)有所下降,典型的有YOLO系列、SSD等[2]。
目前,對(duì)于車(chē)輛檢測(cè)效果的影響主要是光照條件和視頻質(zhì)量。在白天,車(chē)輛的邊緣和角落等特征很容易被檢測(cè)到,但是在光照條件差的環(huán)境下,這些特征是不容易被檢測(cè)到的。此外,一些距離很遠(yuǎn)的車(chē)輛在圖像中占據(jù)的區(qū)域很小,檢測(cè)過(guò)程中經(jīng)常容易被漏檢[3]。針對(duì)以上問(wèn)題,提出了一種改進(jìn)YOLOv3-tiny的道路車(chē)輛檢測(cè)算法,設(shè)計(jì)一種魯棒性強(qiáng)更加輕量化的車(chē)輛檢測(cè)模型。同時(shí),使用k-means++聚類(lèi)算法選取錨點(diǎn)預(yù)測(cè)邊界框,可以有效地解決道路車(chē)輛檢測(cè)過(guò)程中檢測(cè)速率和檢測(cè)精度不能同時(shí)滿足的問(wèn)題。
YOLOv3-tiny是YOLOv3目標(biāo)檢測(cè)網(wǎng)絡(luò)的簡(jiǎn)化版本,網(wǎng)絡(luò)復(fù)雜性更低,檢測(cè)速度更快。YOLOv3和YOLOv3-tiny都能夠同時(shí)檢測(cè)多個(gè)類(lèi)別的物體,并且在MS COCO數(shù)據(jù)集上進(jìn)行測(cè)試都取得較好的效果[4]。原始YOLOv3-tiny通過(guò)卷積層對(duì)車(chē)輛特征進(jìn)行提取,在每一個(gè)卷積層后都會(huì)有一個(gè)最大池化層,由此構(gòu)成了該網(wǎng)絡(luò)的特征提取部分。最大池化層中,前5個(gè)層中的步長(zhǎng)為2,最后一個(gè)層的步長(zhǎng)為1。輸入不同尺寸的圖像,經(jīng)過(guò)7個(gè)不同卷積層的處理之后輸出的大小也不一樣[5],模型中特征提取網(wǎng)絡(luò)最后輸出的特征圖尺寸為13×13。YOLOv3-tiny網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
目標(biāo)檢測(cè)技術(shù)在實(shí)際應(yīng)用中,容易受復(fù)雜環(huán)境影響,導(dǎo)致各種檢測(cè)算法的性能都不一樣。因此,需要相關(guān)的參數(shù)來(lái)評(píng)價(jià)檢測(cè)算法的性能。本文主要選用檢測(cè)速率和均值平均精度(mAP)這兩種指標(biāo)來(lái)評(píng)價(jià)算法性能。
圖1 YOLOv3-tiny網(wǎng)絡(luò)結(jié)構(gòu)
檢測(cè)速率計(jì)算公式:
均值平均精度計(jì)算公式:
其中:Pclass是對(duì)每張圖像進(jìn)行檢測(cè),檢測(cè)出來(lái)圖像所屬類(lèi)別的精度;Ntotal為全部測(cè)試集圖像里面含有車(chē)輛圖像的張數(shù);PclassAve代表對(duì)于不同車(chē)輛類(lèi)型檢測(cè)的平均精度;Nclasses代表車(chē)輛類(lèi)型個(gè)數(shù);mAP大小在[0,1]區(qū)間內(nèi),數(shù)值越大,分類(lèi)器性能越好,檢測(cè)算法精度越高[6]。
YOLOv3-tiny算法在目標(biāo)檢測(cè)方面有較好的性能,但對(duì)于復(fù)雜道路環(huán)境的車(chē)輛檢測(cè)并不完全適用,需要對(duì)YOLOv3-tiny網(wǎng)絡(luò)的特征提取部分進(jìn)行改進(jìn),以建立更加精確的車(chē)輛檢測(cè)模型。改進(jìn)后的的YOLOv3-tiny算法由13個(gè)卷積層和4個(gè)shortcut層組成,特征圖每經(jīng)過(guò)一次shortcut層相當(dāng)于經(jīng)歷了一次下采樣,shortcut層在網(wǎng)絡(luò)中起到殘差連接的作用。將最大池化層從原始的YOLOv3-tiny網(wǎng)絡(luò)中移除,在特征提取網(wǎng)絡(luò)部分后面加入空間金字塔池化(SPP)。改進(jìn)后的網(wǎng)絡(luò)在保持檢測(cè)速度的同時(shí),能夠提取豐富的特征進(jìn)行檢測(cè);SPP不用反復(fù)處理卷積層的特征,可以在整張圖片的單個(gè)通道內(nèi)提取特征,能夠降低計(jì)算的復(fù)雜程度,因此在使用SPP之后特征提取速度能夠改善。改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
k-means聚類(lèi)算法通過(guò)對(duì)檢測(cè)對(duì)象的距離屬性進(jìn)行劃分聚類(lèi),算法簡(jiǎn)單易懂,被許多網(wǎng)絡(luò)模型廣泛采用。YOLOv3-tiny使用k-means算法來(lái)選擇錨點(diǎn)框(anchor boxes),必須提前指定k個(gè)聚類(lèi),在有噪聲的圖像中表現(xiàn)效果差。本文采用k-means++算法來(lái)計(jì)算anchor[7],算法步驟如下:
(1)打亂數(shù)據(jù)選擇聚類(lèi)中心;
(2)計(jì)算最近聚類(lèi)中心與每個(gè)樣本的距離;
(3)選擇距離較大的樣本作為新的聚類(lèi)中心;
(4)重復(fù)步驟(2)和步驟(3),直到選出k個(gè)聚類(lèi)中心;
(5)根據(jù)這k個(gè)中心進(jìn)行標(biāo)準(zhǔn)k-means聚類(lèi)。
本文輸入圖像的尺寸大小為416×416,用k-means++算法計(jì)算出來(lái)的6個(gè)錨點(diǎn)分別(16×15)、(42×40)、(95×73)、(115×165)、(256×168)、(329×14)。圖像中的每個(gè)單元格通過(guò)3個(gè)錨點(diǎn)框預(yù)測(cè)邊界框,前3個(gè)錨點(diǎn)用于最后的YOLO層檢測(cè)較小的車(chē)輛,后3個(gè)錨點(diǎn)用于在第一個(gè)YOLO檢測(cè)層檢測(cè)較大的車(chē)輛。
圖2 改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)
車(chē)輛檢測(cè)的準(zhǔn)確性主要依賴于邊界框回歸,選擇一種合適的損失函數(shù)用于邊界框回歸是一項(xiàng)十分重要的任務(wù)。本文使用目標(biāo)定位損失、目標(biāo)類(lèi)別損失以及目標(biāo)置信度損失來(lái)構(gòu)成改進(jìn)后網(wǎng)絡(luò)總體損失函數(shù)[8]。其中,目標(biāo)定位損失Lloc采用DIoU損失代替原有的均方差損失,能夠優(yōu)化總損失,改善回歸精度。改進(jìn)后網(wǎng)絡(luò)總體損失函數(shù)公式:
其中:ρ2(b,bgt)是真實(shí)框和預(yù)測(cè)框中心點(diǎn)之間的歐氏距離;IoU是真實(shí)框和預(yù)測(cè)框面積的交并比;c是覆蓋真實(shí)框和預(yù)測(cè)框的最小封閉區(qū)域的對(duì)角線長(zhǎng)度。
實(shí)驗(yàn)中制作的數(shù)據(jù)集是從3個(gè)公開(kāi)數(shù)據(jù)集PASCAL VOC2007、PASCAL VOC2012、MS COCO2014中抽取出來(lái)的,主要包括3類(lèi)car、bus和truck,包含訓(xùn)練樣本4 000張、測(cè)試樣本1 000張。實(shí)驗(yàn)計(jì)算機(jī)配置如表1所示。
表1 實(shí)驗(yàn)計(jì)算機(jī)配置
模型訓(xùn)練時(shí)的網(wǎng)絡(luò)配置參數(shù)如表2所示。模型訓(xùn)練過(guò)程中總共迭代50 200次,損失函數(shù)的變化曲線如圖3所示。從圖3可以看出,網(wǎng)絡(luò)迭代在2 500次之前,Loss值下降迅速;網(wǎng)絡(luò)迭代到4 500次左右時(shí)收斂曲線慢慢變平緩[9]。
表2 實(shí)驗(yàn)網(wǎng)絡(luò)配置
圖3 損失函數(shù)收斂曲線
為了驗(yàn)證改進(jìn)后算法的檢測(cè)性能,將改進(jìn)后的YOLOv3-tiny算法與改進(jìn)前的算法、SSD算法、Faster-RCNN算法進(jìn)行比較。4種算法模型使用同一個(gè)數(shù)據(jù)集進(jìn)行訓(xùn)練,訓(xùn)練完成之后使用檢測(cè)速率和均值平均精度(mAP)來(lái)對(duì)比分析其檢測(cè)性能。實(shí)驗(yàn)結(jié)果如表3所示。
表3 4種算法的性能對(duì)比
由表3可以看出:改進(jìn)后YOLOv3-tiny算法的mAP為89.57%,相比于原YOLOv3-tiny算法的mAP提升了6.32%,網(wǎng)絡(luò)對(duì)車(chē)輛識(shí)別的精度有所提升;當(dāng)模型的檢測(cè)速率保持在25幀/s以上時(shí),能夠滿足目標(biāo)檢測(cè)實(shí)時(shí)性的要求。改進(jìn)后YOLOv3-tiny網(wǎng)絡(luò)在檢測(cè)速率上相比于原網(wǎng)絡(luò)稍微有所下降,這是由于改進(jìn)后算法網(wǎng)絡(luò)層數(shù)增加所導(dǎo)致的,但改進(jìn)后的算法對(duì)車(chē)輛的檢測(cè)速度可以保持在29.7幀/s,能夠滿足需求。綜合各方面來(lái)看,改進(jìn)后YOLOv3-tiny算法可以在保證檢測(cè)速率的基礎(chǔ)上,提高識(shí)別的精度,所以本文提出改進(jìn)后YOLOv3-tiny算法適用于道路車(chē)輛檢測(cè)的場(chǎng)景中[10]。
為了更直觀的展示改進(jìn)后算法的檢測(cè)性能并驗(yàn)證其在實(shí)際場(chǎng)景中的應(yīng)用效果,選取包含小目標(biāo)、目標(biāo)相互遮擋、霧天環(huán)境等情況的圖像,不同檢測(cè)算法得到的檢測(cè)結(jié)果如圖4和圖5所示。從圖4和圖5可以看出,原始YOLOv3-tiny和SSD算法對(duì)于小目標(biāo)車(chē)輛、車(chē)輛相互遮擋以及霧天環(huán)境下車(chē)輛特征不突出這幾種情況下的檢測(cè)效果不太理想,很容易產(chǎn)生漏檢,甚至還會(huì)出現(xiàn)誤檢現(xiàn)象,如圖4(c)中SSD算法誤將卡車(chē)檢測(cè)為公交車(chē)。改進(jìn)后的YOLOv3-tiny算法對(duì)于以上幾種情況的車(chē)輛檢測(cè)效果可以與Faster-RCNN算法相媲美,由于Faster-RCNN算法對(duì)車(chē)輛的檢測(cè)速率過(guò)于低下,根本無(wú)法滿足對(duì)于車(chē)輛實(shí)時(shí)性檢測(cè)的需求。因此,在道路車(chē)輛檢測(cè)的任務(wù)中綜合各方面情況來(lái)看,改進(jìn)后的YOLOv3-tiny算法的整體性能高于Faster-RCNN、原始YOLOv3-tiny以及SSD算法。
(a)改進(jìn)后的YOLOv3-tiny (b)YOLOv3-tiny
(c)SSD (d)Faster-RCNN
(a)改進(jìn)后的YOLOv3-tiny (b)YOLOv3-tiny
(c)SSD (d)Faster-RCNN
在YOLOv3-tiny目標(biāo)檢測(cè)算法的基礎(chǔ)上,筆者提出了一種改進(jìn)YOLOv3-tiny車(chē)輛檢測(cè)算法。將空間金字塔池化添加到網(wǎng)絡(luò)結(jié)構(gòu)中的特征提取部分,使網(wǎng)絡(luò)能夠提取更加完善的圖像特征;使用k-means++聚類(lèi)算法實(shí)現(xiàn)錨點(diǎn)預(yù)測(cè)車(chē)輛的邊界框,能夠大大提升網(wǎng)絡(luò)檢測(cè)速率;在損失函數(shù)中,用DIoU損失和均方差損失,減少邊界框回歸的誤差,增強(qiáng)網(wǎng)絡(luò)模型的性能。實(shí)驗(yàn)結(jié)果表明,本文提出的改進(jìn)YOLOv3-tiny車(chē)輛檢測(cè)算法平均精度均值達(dá)到89.57%,在一些復(fù)雜道路環(huán)境下能取得不錯(cuò)的檢測(cè)效果。