吳新淼,趙一洲,程廷豪
(四川大學(xué)電子信息學(xué)院,成都610065)
目標(biāo)檢測(cè)是計(jì)算機(jī)視覺研究領(lǐng)域中的一個(gè)重要的研究分支[1],它是目標(biāo)跟蹤和行為識(shí)別的基礎(chǔ)實(shí)現(xiàn)環(huán)節(jié)。隨著無(wú)人駕駛這一概念火爆的提出,車輛的目標(biāo)檢測(cè)就成為了當(dāng)前的熱點(diǎn)研究話題,其目標(biāo)是通過車載攝像頭將錄取到的實(shí)時(shí)路況的視頻信息進(jìn)行分幀拆分成一幅幅圖片,然后通過目標(biāo)檢測(cè)算法,對(duì)圖片進(jìn)行分析,從不同復(fù)雜程度的背景中返回車輛交通分析中所需要的目標(biāo)的空間位置和物體類別,從而針對(duì)不同的交通情況進(jìn)行自動(dòng)緊急剎車或者轉(zhuǎn)彎。
近幾年,深度學(xué)習(xí)逐漸走入我們的視野中,當(dāng)前的目標(biāo)檢測(cè)模型大多是基于two-stage和one-stage分類的。其中基于two-stage的算法模型有R-CNN[2]、SPP-Net[3]、Fast R-CNN[4]和Faster R-CNN[5],這些算法都是需要先生成候選區(qū)域,然后在候選區(qū)域里面進(jìn)行特征的提取,然后將特征圖送入分類器中進(jìn)行類別的判定和邊框回歸。而基于one-stage的算法模型有YOLOv3[6]和SSD[7],這些算法通過回歸,解決了目標(biāo)框定位問題,輸入圖片進(jìn)網(wǎng)絡(luò)中直接輸出圖片中物體的類別跟位置。相對(duì)于two-stage的目標(biāo)檢測(cè)方法,one-stage的方法具有檢測(cè)速度更快的優(yōu)勢(shì),但是其檢測(cè)精度卻沒有two-stage好,但是YOLOv3算法很好地平衡了檢測(cè)速度跟精度的問題,可以滿足交通路況的實(shí)時(shí)檢測(cè)。故本文選擇YOLOv3作為目標(biāo)檢測(cè)算法對(duì)交通路況進(jìn)行研究。
YOLOv3算法是將輸入的圖片經(jīng)過一定比例的寬高縮放之后,將其輸入到特征提取網(wǎng)絡(luò)DarkNet53進(jìn)行卷積,經(jīng)過卷積后將得到的特征圖尺度劃分為大小一致的網(wǎng)格,每個(gè)網(wǎng)格設(shè)置3個(gè)瞄點(diǎn)框,每個(gè)瞄點(diǎn)框用來(lái)預(yù)測(cè)一個(gè)邊界框。YOLOv3的網(wǎng)絡(luò)預(yù)測(cè)過程如圖1所示。
圖1 YOLOv3框架圖
在進(jìn)行特征提取的過程中受到FPN[8]的思想啟發(fā),低層特征圖的分辨率高,有利于提取小的目標(biāo),高層特征圖的語(yǔ)義信息豐富,有利于提取大目標(biāo),通過融合這些不同層的特征圖可以達(dá)到在滿足大目標(biāo)檢測(cè)的同時(shí)兼顧小目標(biāo)的檢測(cè)。在YOLOv3中設(shè)置了13×13、26×26、52×52這三個(gè)層次的特征進(jìn)行目標(biāo)的檢測(cè),其中13×13負(fù)責(zé)檢測(cè)大尺寸目標(biāo),26×26和52×52負(fù)責(zé)檢測(cè)中、小尺度目標(biāo),并且將其中的13×13和26×26的特征圖分別進(jìn)行一次上采樣跟前期同尺度的特征圖進(jìn)行融合,將融合的結(jié)果來(lái)進(jìn)行預(yù)測(cè)。
如果經(jīng)過特征提取后的圖片中的某一物體的中心在網(wǎng)格中,那么這個(gè)網(wǎng)格就負(fù)責(zé)預(yù)測(cè)這個(gè)物體,則該網(wǎng)格中的三個(gè)瞄點(diǎn)框都會(huì)輸出三類參數(shù)。第一類參數(shù)為坐標(biāo)參數(shù),其中tx,ty,tw,th代表預(yù)測(cè)框中心坐標(biāo)跟寬高,第二類參數(shù)為預(yù)測(cè)框的置信度c,第三類參數(shù)為物體的類別概率數(shù)組p。其中為了方便計(jì)算過程中的網(wǎng)絡(luò)的收斂,本文需要對(duì)坐標(biāo)參數(shù)進(jìn)行一個(gè)變換,變換公式如圖2所示。
圖2 預(yù)測(cè)框示意圖
其中pw和ph為本文通過K-means[9]算法得出的瞄點(diǎn)框的寬和高,cx和cy為網(wǎng)絡(luò)負(fù)責(zé)預(yù)測(cè)物體的網(wǎng)格的左上點(diǎn)在整張圖中的坐標(biāo),其中sigmoid函數(shù)的作用是將原先輸出的預(yù)測(cè)框的中心坐標(biāo)進(jìn)行一個(gè)非線性歸一化變換,將中心坐標(biāo)偏移壓縮到[0,1]之間,可以確保將要檢查的物體中心處于執(zhí)行預(yù)測(cè)的網(wǎng)絡(luò)單元格中間,防止出現(xiàn)物體中心偏移出要檢測(cè)的網(wǎng)絡(luò)單元格。其中的bx,by,bw,bh為最終預(yù)測(cè)的框中心坐標(biāo)和寬高。而置信度c則是當(dāng)前輸出的預(yù)測(cè)框中有物體的概率pr(object)和該預(yù)測(cè)框框跟真實(shí)框的交并比(IOU)的乘積。其具體公式如下:
(1)
其中cij表示的時(shí)第i個(gè)網(wǎng)格的第j個(gè)預(yù)測(cè)框的置信度,置信度是用來(lái)在訓(xùn)練過程中挑選出我們需要訓(xùn)練的最優(yōu)box。最后將圖片中某一物體的所有預(yù)測(cè)框進(jìn)行NMS[10](非極大值抑制),就是獲取屬于某一類別的所有預(yù)測(cè)框的概率p,然后獲取其中概率最大的框,計(jì)算剩下的框跟概率最大的框的IOU,然后將IOU大與我們?cè)O(shè)定的閾值的框給刪掉,在剩下的框中重復(fù)進(jìn)行上面的操作,最后就可以得到一個(gè)最符合當(dāng)前目標(biāo)的預(yù)測(cè)框。
YOLOv3中間的特征提取網(wǎng)絡(luò)為5組重復(fù)使用的殘差卷積單元,每個(gè)卷積單元里面為一個(gè)1×1和3×3的卷積層,每個(gè)卷積后面都會(huì)跟一個(gè)BN層和一個(gè)LeakyReLU層,其中1×1的卷積層通過固定輸出的通道數(shù)可以降低參數(shù)的數(shù)量,3×3的卷積核可以滿足卷積單元的輸出跟輸入維度一致,通過交替使用這樣的殘差卷積單元可以在保證有效提取特征的前提下減少訓(xùn)練的參數(shù),達(dá)到減少訓(xùn)練時(shí)間和計(jì)算量的目的。在交替使用殘差卷積單元的時(shí)候就是采用ResNet[11]思想,采用跳層的方法,將殘差卷積單元的輸入層跟輸出層進(jìn)行相加,這樣一來(lái)就可以解決網(wǎng)絡(luò)層度太深導(dǎo)致的梯度爆炸跟梯度消失問題。其中DarkNet-53的網(wǎng)絡(luò)結(jié)構(gòu)圖如圖3所示。
圖3 DarkNet-53網(wǎng)絡(luò)結(jié)構(gòu)
傳統(tǒng)的YOLOv3中每個(gè)預(yù)測(cè)框都會(huì)輸出三類參數(shù),分別為目標(biāo)的坐標(biāo)信息、目標(biāo)是否存在的置信度和目標(biāo)屬于某個(gè)特定類別的置信度。其中坐標(biāo)信息tx,ty,tw,th代表預(yù)測(cè)框的坐標(biāo)值,就是用預(yù)測(cè)出的框的位置來(lái)逼近真實(shí)框,其中目標(biāo)是否存在跟目標(biāo)是否屬于某個(gè)類別都是用概率來(lái)表示的,概率值跟1的逼近程度代表著YOLOv3進(jìn)行預(yù)測(cè)的可靠性大小,越靠近1,代表我們的預(yù)測(cè)值越可靠。但是我們輸出的坐標(biāo)值就是單純的數(shù)字信息,并不是概率值,不能預(yù)測(cè)當(dāng)前框的可靠性,受到高斯函數(shù)的鐘形啟發(fā),本文用高斯模型對(duì)輸出的坐標(biāo)信息進(jìn)行建模。其中高斯模型為:
(2)
其中μ代表著函數(shù)分布的均值,σ2代表著方差,函數(shù)在μ處取得最高值,但是當(dāng)μ相同的時(shí)候σ2越大,均值處的取值就會(huì)越低。將這個(gè)思想融入到預(yù)測(cè)框的坐標(biāo)中去,將輸出的預(yù)測(cè)框的坐標(biāo)數(shù)字代表高斯模型中的均值,將坐標(biāo)的方差值來(lái)估計(jì)坐標(biāo)信息的可靠性,這樣一來(lái)可以在確定定位精度的前提下通過降低方差值來(lái)提升預(yù)測(cè)坐標(biāo)值的可靠性,隨之而來(lái)的就是由傳統(tǒng)的YOLOv3的坐標(biāo)輸出值將會(huì)由4個(gè)變?yōu)?個(gè),其具體代表式如下:
(3)
圖4 融合高斯模型參數(shù)示意圖
在對(duì)輸出框的坐標(biāo)值進(jìn)行修改之后,本文也需要對(duì)原先的坐標(biāo)損失函數(shù)進(jìn)行修改,在預(yù)測(cè)框的坐標(biāo)都滿足均值為μ方差為σ2的高斯分布之后,本文摒棄了傳統(tǒng)的均方誤差[12]的(MSE)作為坐標(biāo)定位損失函數(shù),而是使用了負(fù)對(duì)數(shù)似然損失(Negative Log Likelihood Loss)[13]作為重建的定位損失函數(shù)。其具體定義如下:
(4)
(5)
(6)
目標(biāo)檢測(cè)中最后輸出的是一個(gè)帶有邊框的物體檢測(cè)圖形,而物體邊框的形成是需要在訓(xùn)練中不斷的對(duì)邊框損失函數(shù)進(jìn)行一個(gè)收斂,這個(gè)過程也就是邊框回歸過程。YOLOv3中是采用預(yù)測(cè)框跟真實(shí)框的交并比IOU(Intersection Over Union)作為邊框定位損失函數(shù),其中IOU定義如下:
(7)
Dis(box,centroid)=1-IOU(box,centroid)
(8)
其中boxpred是目標(biāo)的預(yù)測(cè)框,boxtruth是目標(biāo)的真實(shí)框,IOU是真實(shí)框跟預(yù)測(cè)框面積之間的交并比。但是當(dāng)采用IOU作為度量和損失的定義會(huì)存在一些問題,例如當(dāng)預(yù)測(cè)框跟真實(shí)框的IOU為0的時(shí)候,這個(gè)時(shí)候定位損失函數(shù)就不會(huì)進(jìn)行收斂,無(wú)法對(duì)預(yù)測(cè)框的偏移進(jìn)行優(yōu)化。針對(duì)于兩框不相交的情況,本文將預(yù)測(cè)框跟真實(shí)框之間的中心距離也添加到進(jìn)去,采用了一種新的定位損失函數(shù)D-IOU,如公式(10):
(9)
其中c為同時(shí)覆蓋預(yù)測(cè)框和目標(biāo)框的最小矩形的對(duì)象線距離,d=ρ2(b,bgt)代表了預(yù)測(cè)框跟真實(shí)框的中心的歐氏距離。如圖5所示。
圖5 DIOU示意圖
采用D-IOU[14]可以有效解決當(dāng)預(yù)測(cè)跟真實(shí)框不相交時(shí)出現(xiàn)的損失函數(shù)不能收斂的情況,并且在一開始收斂的時(shí)候直接將預(yù)測(cè)框跟真實(shí)框之間的中心距離考慮進(jìn)去,從而可以更快更有效更穩(wěn)定地收斂。
在BDD100K數(shù)據(jù)集中,包含10萬(wàn)張道路目標(biāo)邊界框圖片(訓(xùn)練集7萬(wàn)、測(cè)試集2萬(wàn)、驗(yàn)證集1萬(wàn)),大小為1280×720 ,數(shù)據(jù)庫(kù)涵蓋了不同的天氣條件,包括晴天、陰天和雨天,以及白天和晚上的不同時(shí)段,圖片的注釋信息中包含了:類別標(biāo)簽、大小(起始坐標(biāo)、結(jié)束坐標(biāo)、寬度和高度)、遮擋和交通燈等信息。數(shù)據(jù)集中的真實(shí)目標(biāo)框共有10個(gè)類別,總共約有184萬(wàn)個(gè)定位框。分別為:Bus、Light、Sign、Person、Bike、Truck、Motor、Car、Train、Rider。
表1 實(shí)驗(yàn)環(huán)境配置表
在進(jìn)行實(shí)驗(yàn)的時(shí)候,本文batch設(shè)置為64,subdivision為32,decay為權(quán)重衰減正則項(xiàng),為了防止在訓(xùn)練過程中出現(xiàn)過擬合,故在每次訓(xùn)練完之后將學(xué)習(xí)到的參數(shù)進(jìn)行0.5的比例降低。learning_rate為學(xué)習(xí)率,代表著權(quán)重的更新速度,在進(jìn)行梯度下降的過程中,該值就決定著梯度下降的步伐,如果設(shè)置太大了,就有可能會(huì)直接越過最優(yōu)解,如果設(shè)置太小了,就會(huì)導(dǎo)致下降的速度很慢,也就是我們收斂的時(shí)間會(huì)很長(zhǎng)。本文中實(shí)驗(yàn)設(shè)置總共跑10000個(gè)epoch,剛開始訓(xùn)練的時(shí)候我們的學(xué)習(xí)率可以設(shè)置大一些為0.001,等實(shí)驗(yàn)進(jìn)行到8000和9000個(gè)epoch的時(shí)候?qū)W習(xí)率設(shè)置為以前的1/10。
其中本文實(shí)驗(yàn)的評(píng)價(jià)指標(biāo)為AP和mAP,在計(jì)算AP的時(shí)候需要先計(jì)算精準(zhǔn)率P和召回率R,其中他們的定義如下:
(10)
(11)
Tp為真正例,即預(yù)測(cè)為正樣本實(shí)際為正樣本。Fp為假正例,預(yù)測(cè)為負(fù)實(shí)際為正。FN為假負(fù)例,預(yù)測(cè)為負(fù)實(shí)際為正。則P為預(yù)測(cè)為正實(shí)際為正占預(yù)測(cè)為正的比例,可以視作是模型找出來(lái)的數(shù)據(jù)正確的能力。R是預(yù)測(cè)為正實(shí)際為正占總體樣本的比例,可以視作是模型在數(shù)據(jù)集中檢測(cè)出目標(biāo)類型數(shù)據(jù)的能力,通常情況下用P-R曲線來(lái)顯示目標(biāo)網(wǎng)絡(luò)在精準(zhǔn)率和召回率之間的平衡,對(duì)于數(shù)據(jù)集中的每一個(gè)物體類別的平均準(zhǔn)確率AP就是該類別的P-R曲線下方的面積,而mAP就是指所有類的平均準(zhǔn)確率的均值。其中AP和mAP的計(jì)算公式如下所示:
(12)
(13)
由于不同的數(shù)據(jù)集里面物體的分布跟形狀不一樣,本文使用了K-means算法重新計(jì)算錨點(diǎn)框的尺寸,合適的瞄點(diǎn)框的大小可以有效地加快邊框的回歸,更新的預(yù)定義錨點(diǎn)框的值分別如表2所示。
表2 錨點(diǎn)框分配表
共9個(gè)預(yù)測(cè)錨點(diǎn)框,因?yàn)橛腥齻€(gè)不同尺寸的特征圖,所以每個(gè)中心點(diǎn)可預(yù)測(cè)三個(gè)不同尺度的預(yù)測(cè)框。對(duì)比于YOLOv3原始設(shè)計(jì)的先驗(yàn)錨框尺寸與本文通過K-means得到的尺寸進(jìn)行比較如下圖所示:
圖6 新舊錨點(diǎn)框尺寸比較
將YOLOv3、Gaussian-YOLOv3、DIOU-YOLOv3、Gaussian-DIOU-YOLOv3算法分別應(yīng)用新的錨點(diǎn)框之后在BDD100k數(shù)據(jù)集上進(jìn)行訓(xùn)練跟測(cè)試,其中最后的實(shí)驗(yàn)結(jié)果如表3。
表3 實(shí)驗(yàn)結(jié)果對(duì)比表
可以看出在融合了D-IOU和高斯模型之后,GD-YOLOv3相對(duì)與原始的YOLOv3,mAP提升了4.42%,雖然FPS由69降低為63,但是還是能夠滿足實(shí)時(shí)檢測(cè)的需求。
由圖7的(a)、(b)對(duì)比可以看出,引入D-IOU后目標(biāo)圖片中檢測(cè)到的物體相對(duì)與原始的YOLOv3變多了,但是存在一些錯(cuò)誤的物體識(shí)別,例如將交通燈識(shí)別為交通標(biāo)識(shí)。對(duì)比(a)、(c)可以看出,加入預(yù)測(cè)框的不確定性之后,就能夠正確地檢測(cè)到交通燈了,但是卻漏檢了一些物體,最后從(d)可以發(fā)現(xiàn)融合了高斯模型跟D-IOU之后,模型能夠有效地檢測(cè)出小的交通燈,并且可以檢測(cè)出一些原本檢測(cè)不出來(lái)的車跟行人。從表4可以看出,改進(jìn)后的算法模型相對(duì)與原始的模型,F(xiàn)P值有很大幅度的降低,這表明模型誤檢的概率在降低,并且TP的提升證明模型可以對(duì)更多的正樣本進(jìn)行檢測(cè)。
圖7 實(shí)驗(yàn)結(jié)果對(duì)比圖
表4 模型數(shù)值評(píng)價(jià)表
本文在針對(duì)復(fù)雜路況情況下傳統(tǒng)的YOLOv3算法檢測(cè)交通物體預(yù)測(cè)框定位的精度不足問題,提出了一種改進(jìn)型YOLOv3模型,首先通過K-means算法計(jì)算出適應(yīng)于BDD100k的先驗(yàn)錨框,接著在YOLOv3的預(yù)測(cè)層加入對(duì)預(yù)測(cè)框的不確定性回歸并且重新改進(jìn)了新的損失函數(shù),然后將改進(jìn)后的算法添加新的錨點(diǎn)框進(jìn)行訓(xùn)練,實(shí)驗(yàn)結(jié)果表明引入預(yù)測(cè)框的不確定性回歸后,訓(xùn)練出來(lái)的模型可以有效降低對(duì)物體的定位誤差,新定位損失函數(shù)引入預(yù)測(cè)框跟真實(shí)框之間的中心距離,在加快預(yù)測(cè)框跟真實(shí)框之間的收斂的同時(shí)也解決了當(dāng)二者交并比為0情況下不收斂的問題。經(jīng)過對(duì)比可以發(fā)現(xiàn)改進(jìn)后的算法可以檢測(cè)出原始算法檢測(cè)不到的物體,并且框的定位更加的準(zhǔn)確,適合復(fù)雜場(chǎng)景下的自然交通路況檢測(cè)。
由于本文的改進(jìn)方法都是針對(duì)于預(yù)測(cè)框的定位精度提升,而沒有對(duì)交通物體類別檢測(cè)精度的改進(jìn)。后續(xù)的研究中,本文將從如何提升物體類別的精度出發(fā),從主干網(wǎng)絡(luò)入手,在提升網(wǎng)絡(luò)的特征提取能力的前提之下減少網(wǎng)絡(luò)的參數(shù)量,進(jìn)一步提升模型的檢測(cè)能力。