王建云,李 訥,吳正平,雷幫軍
(1.三峽大學(xué)水電工程智能視覺(jué)監(jiān)測(cè)湖北省重點(diǎn)實(shí)驗(yàn)室,湖北 宜昌 443002;2.三峽大學(xué)計(jì)算機(jī)與信息學(xué)院,湖北 宜昌 443002)
自從Hinton提出神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)的特征進(jìn)行自動(dòng)學(xué)習(xí)以來(lái)[1],計(jì)算機(jī)視覺(jué)的研究取得了很大的成就。尤其深度卷積特征的興起,為目標(biāo)車(chē)輛的檢測(cè)帶來(lái)了新的機(jī)遇。同時(shí),基于深度學(xué)習(xí)的目標(biāo)車(chē)輛的跟蹤和計(jì)數(shù),在實(shí)際生活中也有著廣泛的應(yīng)用。如智能交通[2],視覺(jué)導(dǎo)航[3],無(wú)人駕駛[4]。
當(dāng)前的目標(biāo)檢測(cè)算法分為兩類(lèi):其中傳統(tǒng)的目標(biāo)檢測(cè)算法包括Cascade+Harr[5]、SVM+HOG[6]、DPM、NMS等,它們通過(guò)區(qū)域選擇后手動(dòng)提取特征,最后結(jié)合機(jī)器學(xué)習(xí)類(lèi)算法來(lái)實(shí)現(xiàn)。另外一種是基于深度學(xué)習(xí)的算法,其也有兩類(lèi):一類(lèi)是Two Stage目標(biāo)檢測(cè)算法如R-CNN[7]、Fast R-CNN[8]、Faster R-CNN[9]、Mask RCNN[10],通過(guò)區(qū)域提取網(wǎng)絡(luò)候選框,然后用傳統(tǒng)的機(jī)器學(xué)習(xí)算法或或另一個(gè)卷積神經(jīng)網(wǎng)絡(luò)對(duì)候選框做分類(lèi)和回歸;另一類(lèi)是One Satge目標(biāo)檢測(cè)算法,主要有YOLO系列(V1[11],V2[12],V3[13],V4[14]),SSD[15]等它們通過(guò)網(wǎng)絡(luò)直接回歸出檢測(cè)目標(biāo)的類(lèi)別和位置。
Sort算法[16]和Deepsort算法[17]都是當(dāng)前比較好的目標(biāo)追蹤算法。Sort算法是一個(gè)實(shí)用的多目標(biāo)跟蹤算法,該算法能在線且實(shí)時(shí)進(jìn)行目標(biāo)追蹤,該算法逐幀進(jìn)行目標(biāo)位置預(yù)測(cè),最終以邊界框的形式展現(xiàn)測(cè)試結(jié)果,可用于有大量車(chē)流的場(chǎng)景中。Sort算法結(jié)合了Kalman濾波追蹤和匈牙利指派算法。Deepsort算法對(duì)sort算法進(jìn)行了改進(jìn),引入了在行人重識(shí)別數(shù)據(jù)集上離線訓(xùn)練的深度學(xué)習(xí)模型,不僅改善了在目標(biāo)被遮擋情況下的追蹤效果,還解決了減少目標(biāo)ID跳變的問(wèn)題。
交通車(chē)輛的檢測(cè)一直是計(jì)算機(jī)視覺(jué)研究的一個(gè)重要領(lǐng)域。但是在夜晚光線較弱的情況下,目標(biāo)車(chē)輛的檢測(cè)精度會(huì)有一定程度的降低。受此問(wèn)題的啟發(fā),并且考慮到在晚上車(chē)輛都會(huì)打開(kāi)雙燈(包括前燈和后燈),而在夜晚光線較弱的情況下車(chē)輛雙燈的特征相比于車(chē)輛的特征更加容易被提取,因此用車(chē)輛雙燈的檢測(cè)替代對(duì)車(chē)輛的檢測(cè),檢測(cè)精度會(huì)有一定程度的提高。
YOLOv3目標(biāo)檢測(cè)算法是Redmon J等人[13]提出的YOLO系列算法的第三個(gè)版本,其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,主要由Darknet53網(wǎng)絡(luò)層和YOLO層兩部分構(gòu)成,其中Darknet53網(wǎng)絡(luò)層主要由卷積層、批量標(biāo)準(zhǔn)化及躍層連接組成,用來(lái)提取圖像特征,其網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。YOLO層用來(lái)對(duì)檢測(cè)的目標(biāo)進(jìn)行多尺度預(yù)測(cè),多尺度預(yù)測(cè)的特征增強(qiáng)了對(duì)不同大小目標(biāo)及被遮擋目標(biāo)的檢測(cè)效果。
YOLOv3 的基本組件是DBL如圖1左下角,由卷積層,BN層和LeakRelu激活函數(shù)構(gòu)成。resn結(jié)構(gòu)為 YOLOv3中的主要組成部分,n代表數(shù)字,表示這個(gè)res_block里含有多少個(gè)res_unit。該結(jié)構(gòu)中包括zero padding層和殘差結(jié)構(gòu)[18],如圖1右下角所示。圖中用紅色虛線框出的部分是骨干網(wǎng)絡(luò) Darknet53,用于提取圖像特征。
卷積層[19]的工作原理如圖2所示,其中淡藍(lán)色區(qū)域是大小為5×5的輸入圖像,綠色區(qū)域是大小為5×5的輸出圖像,深藍(lán)色區(qū)域?yàn)榇笮?×3的卷積核。為保證輸出圖像與輸入圖像大小不變,首先擴(kuò)充輸入圖像如圖中白色虛線框。隨后計(jì)算輸入圖像中左上角3×3大小的區(qū)域,通過(guò)卷積運(yùn)算將其映射到輸出圖像的第一個(gè)點(diǎn)上。最后通過(guò)滑動(dòng)卷積核來(lái)完成整個(gè)圖像的卷積操作,從而可以獲取圖像的特征。
圖1 YOLOV3結(jié)構(gòu)圖
圖2 卷積層工作原理圖
圖3 Darknet-53網(wǎng)絡(luò)結(jié)構(gòu)圖
Deepsort算法使用了逐幀的數(shù)據(jù)關(guān)聯(lián)以及遞歸的卡爾曼濾波[20,21]。算法的流程如下:
第一步利用卡爾曼濾波器對(duì)軌跡進(jìn)行預(yù)測(cè),第二步使用匈牙利算法將預(yù)測(cè)得到的軌跡和當(dāng)前幀中的檢測(cè)目標(biāo)進(jìn)行匹配;第三步是卡爾曼濾波更新。
匹配問(wèn)題上,Deepsort算法同時(shí)考慮了目標(biāo)外觀信息和運(yùn)動(dòng)信息的關(guān)聯(lián)。運(yùn)動(dòng)信息的關(guān)聯(lián)是使用檢測(cè)框與跟蹤器預(yù)測(cè)框之間的馬氏距離來(lái)描述運(yùn)動(dòng)關(guān)聯(lián)程度。如式(1)
(1)
第j個(gè)檢測(cè)框的位置用dj表示,yi用來(lái)表示第i個(gè)追蹤器對(duì)目標(biāo)的預(yù)測(cè)位置,Si表示檢測(cè)位置與平均追蹤位置之間的協(xié)方差矩陣。
如果關(guān)聯(lián)的馬氏距離小于指定的閾值t(1),作者設(shè)置閾值t(1)設(shè)為0.94877。就設(shè)置運(yùn)動(dòng)狀態(tài)關(guān)聯(lián)成功。如式(2)
(2)
(3)
如果d2(i,j)小于指定的閾值,就表示關(guān)聯(lián)不成功。使用兩種方式的加權(quán)來(lái)表示最后匹配度量如式(4)
Ci,j=μd1(i,j)+(1-μ)d2(i,j)
(4)
若Ci,j位于度量閾值的交集內(nèi)時(shí),就認(rèn)為實(shí)現(xiàn)了正確的關(guān)聯(lián)。
在本文中,使用YOLOv3來(lái)訓(xùn)練車(chē)雙燈檢測(cè)模型,并將視頻中的多目標(biāo)檢測(cè)結(jié)果作為Deepsort跟蹤器的實(shí)時(shí)輸入。高精度的檢測(cè)結(jié)果彌補(bǔ)了DeepSort自身算法的缺陷。從而完整、準(zhǔn)確實(shí)時(shí)地跟蹤視頻中的多目標(biāo)。具體流程如圖4。
圖4 YOLOv3算法與Deepsort算法融合
首先是對(duì)輸入的視頻幀中的每一幀進(jìn)行處理,通過(guò)YOLOv3目標(biāo)檢測(cè)算法讀取當(dāng)前視頻幀中待檢測(cè)車(chē)輛雙燈的檢測(cè)框的位置以及各個(gè)檢測(cè)框中圖像塊的深度特征,根據(jù)置信度對(duì)檢測(cè)框進(jìn)行篩選,即對(duì)置信度不夠高的檢測(cè)框予以刪除。然后通過(guò)卡爾曼濾波預(yù)測(cè)車(chē)輛雙燈在當(dāng)前幀中的位置,并通過(guò)級(jí)聯(lián)匹配提高精度。再接著對(duì)于未級(jí)聯(lián)匹配上的跟蹤器和未確認(rèn)狀態(tài)的跟蹤與未級(jí)聯(lián)匹配上的檢測(cè),對(duì)它們的跟蹤框和檢測(cè)框之間基于IOU進(jìn)行匹配。最后一步是對(duì)于級(jí)聯(lián)匹配上的跟蹤器,去做參數(shù)更新。
通過(guò)調(diào)用湖北省宜昌市多個(gè)車(chē)輛出行較為密集的交通路口的交通攝像頭采集數(shù)據(jù),然后對(duì)數(shù)據(jù)進(jìn)行手動(dòng)標(biāo)記。本文手動(dòng)標(biāo)記了2836張包含車(chē)燈以及整車(chē)的數(shù)據(jù)集,涉及雨天夜晚以及正向和背向多個(gè)場(chǎng)景。本數(shù)據(jù)是在夜晚場(chǎng)景同時(shí)標(biāo)記車(chē)燈vehicle_light和整車(chē)vehicle_whole兩個(gè)類(lèi)。主要為了突出對(duì)比在夜晚場(chǎng)景下,那種檢測(cè)方式更有效。手動(dòng)標(biāo)記的voc數(shù)據(jù)集如圖5。
圖5 手動(dòng)標(biāo)記的正向和背向數(shù)據(jù)
使用錨點(diǎn)框作為選取物體邊界框的參照物最早出現(xiàn)在Faster R-CNN目標(biāo)算法[23]中,主要是為了更加高效精準(zhǔn)的預(yù)測(cè)不同尺度與寬高比物體的邊界框。隨后YOLOv3等其它的目標(biāo)檢測(cè)算法均采用了錨點(diǎn)機(jī)制并取得了良好效果。
YOLOv3通過(guò)對(duì)大量的訓(xùn)練數(shù)據(jù)使用聚類(lèi)的方式獲得對(duì)于檢測(cè)車(chē)輛雙燈最好的先驗(yàn)錨點(diǎn)框。如式(5)
d(box,centroid)=1-IOU(box,centroid)
(5)
車(chē)輛雙燈位置信息會(huì)被YOLOv3算法直接預(yù)測(cè)出來(lái),預(yù)測(cè)值為4個(gè)坐標(biāo)信息tx,ty,tw,th具體如下列公式
bx=σ(tx)+cx
(6)
by=σ(ty)+cy
(7)
bw=pwetw
(8)
bh=pheth
(9)
通過(guò)上述公式可以計(jì)算得到預(yù)測(cè)框的中心點(diǎn)坐標(biāo)和寬高bx,by,bw,bh。cx和cy表示一個(gè)網(wǎng)格與圖像左上角的橫縱距離,pw和ph表示邊界框的寬和高。σ()為logistic函數(shù)。
YOLOv3算法包含了3個(gè)檢測(cè)尺度,每個(gè)檢測(cè)尺度分配3組錨框值,共需9組錨框值。原始網(wǎng)絡(luò)的9組anchor值是在訓(xùn)練原有80個(gè)類(lèi)別的數(shù)據(jù)而設(shè)定的。本文中,只需要對(duì)整車(chē)和車(chē)燈這兩個(gè)類(lèi)進(jìn)行訓(xùn)練,因此利用K-均值方法聚類(lèi)出9組錨框值比原始的9組錨框值在檢測(cè)精度上有一定提高。
k-means算法的執(zhí)行步驟可總結(jié)如下:
1)隨機(jī)選擇3個(gè)位置,作為初始聚類(lèi)中心,隨后計(jì)算圖中所有點(diǎn)到這3個(gè)初始聚類(lèi)中心的歐式距離,將每一個(gè)點(diǎn)劃入到距離其最近的初始聚類(lèi)中心。
2)將每一簇的中心位置更新為新的聚類(lèi)中心位置。重復(fù)計(jì)算步驟1),直到每個(gè)種子點(diǎn)的前后兩次的更新值之間滿足預(yù)設(shè)的閾值或迭代次數(shù)。
測(cè)試集在通過(guò)k-means聚類(lèi)后改變錨框值的YOLOv3和原始YOLOV3下的map比較見(jiàn)表1。
表1 數(shù)據(jù)在k-means聚類(lèi)錨框YOLOv3算法和原始YOLOv3算法錨框值下map的比較
本文的實(shí)驗(yàn)環(huán)境的硬件要求為Intel Core I7-9700F XCPU@4.79GZ 32運(yùn)行內(nèi)存,Nvidia Gefo-rece GTX1080ti,ubuntu18.04 64位操作系統(tǒng),Darknet深度學(xué)習(xí)框架。
本實(shí)驗(yàn)過(guò)程使用darknet深度學(xué)習(xí)框架,YOLOv3算法。batch表示每次讀取圖片數(shù)量,subdivisions表示把每次讀取的batch分成幾份進(jìn)行訓(xùn)練。由于內(nèi)存足夠,同時(shí)為提高訓(xùn)練速度,在訓(xùn)練時(shí),將batch設(shè)置為64,subdivisions設(shè)置為8。學(xué)習(xí)率learning_rate設(shè)置為0.001,學(xué)習(xí)率太大容易產(chǎn)生振蕩同時(shí)損失值爆炸,學(xué)習(xí)率太小導(dǎo)致收斂速度慢且容易產(chǎn)生過(guò)擬合現(xiàn)象。根據(jù)filters=(classes+5)*3,5表示4個(gè)坐標(biāo)和一個(gè)置信度率,(tx,ty,tw,th,c)。3表示每個(gè)cell輸出預(yù)測(cè)框的個(gè)數(shù)。本文中只有vehicle_whole和vehicle_light兩類(lèi),因此將classes設(shè)置為2,filters設(shè)置為21。
在目標(biāo)檢測(cè)上,用map(Mean Average Preci-sion),即均值平均精度,作為衡量檢測(cè)精度的指標(biāo)。在多目標(biāo)跟蹤上,用 MOTA(Multiple Object Tracking Accuracy)和MOTP(Multiple Object Tracking Precision)共同衡量算法連續(xù)跟蹤目標(biāo)的能力(即在連續(xù)幀中能準(zhǔn)確判斷目標(biāo)的個(gè)數(shù),精確的劃定其位置,從而實(shí)現(xiàn)不間斷的連續(xù)跟蹤)。
表2 vehicle_light和vehicle_whole在k-means聚類(lèi)錨框YOLOv3算法下map值
表3 vehicle_light和vehicle_whole在YOLOV3_Deepsort算法下跟蹤結(jié)果
圖6 聚類(lèi)錨框YOLOv3 loss-epochs曲線
圖7 車(chē)輛雙燈檢測(cè)結(jié)果
圖8 車(chē)輛雙燈跟蹤計(jì)數(shù)結(jié)果
利用K-means聚類(lèi)算法對(duì)聚類(lèi)出9組錨框值,相比于原始YOLOv3的錨框值,目標(biāo)檢測(cè)的平均檢測(cè)準(zhǔn)確率map有了明顯的提升。同時(shí),在夜晚環(huán)境下,利用YOLOv3算法車(chē)輛雙燈檢測(cè)的map為99.42%,車(chē)輛檢測(cè)的map為96.65%;同時(shí)在夜晚環(huán)境的條件下,車(chē)燈的檢測(cè)精度比車(chē)輛的檢測(cè)精度高2.3%。最后利用Deepsort算法對(duì)車(chē)輛雙燈進(jìn)行追蹤和計(jì)數(shù),車(chē)輛雙燈MOTA為63.6%,車(chē)輛的MOTA為59.7%,對(duì)比提升2.9%。車(chē)輛雙燈的MOTP為79.8%,整車(chē)的MOTA為79.3%,對(duì)比提升0.5%。因此得出結(jié)論,夜晚光線較暗的環(huán)境下,車(chē)輛雙燈的檢測(cè)方式比車(chē)輛的檢測(cè)方式更加有效;同時(shí)夜晚?xiàng)l件下,車(chē)輛雙燈跟蹤效果比車(chē)輛跟蹤效果好。
針對(duì)目前在夜晚環(huán)境下車(chē)輛檢測(cè)精確度不夠高的情況,本文提出了在夜晚或者光線較暗的環(huán)境下用車(chē)燈特征替代車(chē)輛特征來(lái)檢測(cè)車(chē)輛方法。同時(shí)鑒于當(dāng)前夜晚車(chē)燈數(shù)據(jù)集的不充足,本文也提供了一個(gè)標(biāo)記好的車(chē)燈數(shù)據(jù)集。經(jīng)過(guò)實(shí)驗(yàn)表明,夜晚環(huán)境下,車(chē)燈的檢測(cè)精度比車(chē)輛檢測(cè)精度更高。接著利用Deepsort算法完成對(duì)檢測(cè)車(chē)輛雙燈的跟蹤計(jì)數(shù),對(duì)研究智能交通具有重要的意義。同時(shí),本文車(chē)燈的數(shù)據(jù)集場(chǎng)景過(guò)于單一,訓(xùn)練的模型容易產(chǎn)生過(guò)擬合的現(xiàn)象。因此,在未來(lái),將采集更多不同場(chǎng)景下的車(chē)輛雙燈數(shù)據(jù),對(duì)智能交通的發(fā)展提供支撐。