周萬奇,李丹
(四川大學(xué)錦城學(xué)院,四川成都,611731)
中國是一個(gè)領(lǐng)土面積大且人口數(shù)量眾多的國家,隨著人們的生活水平不斷提高家家戶戶都擁有汽車。因此交通問題便是人們所關(guān)心的問題例如:車與車之間的矛盾、人與車之間的矛盾。若是用人去解決這樣的矛盾,這需要花費(fèi)很多的人力。因此我們需要去用智能化的方法去解決這樣的問題。
對于目前來說,能做智能化的去感知交通情況的相關(guān)算法有很多。都可以去完成目標(biāo)檢測。例如較為經(jīng)典的R-CNN、Faster R-CNN等基于候選框生成檢測的。這些較為經(jīng)典的算法對于目標(biāo)檢測來說都有很高的精確度,但是他們的速度相對于Yolo V4來說使比較慢的。但是在車流量都較為密集的地方,我們還是需要一個(gè)速度較為塊,且精度不低的算法去實(shí)現(xiàn)目標(biāo)的快速檢測。因此選擇Yolo V4是一個(gè)不錯(cuò)的選擇,它基于Yolo V3進(jìn)行的改進(jìn)。不僅在速度得到了提升,在精度方面也得到了提升。進(jìn)而更好的對人和車進(jìn)行檢測。
大多數(shù)基于CNN的目標(biāo)檢測只能使用在推薦的系統(tǒng)上。雖然精確但是較為緩慢。但是車流量和人流量高的地方,這是需要快速去識別的。因此選擇Yolo v4相對于來說是比較符合需求的。Yolo V4是一種單階段目標(biāo)檢測的算法,該算法在Yolo v3的基礎(chǔ)上添加了一些新的改進(jìn)思路并且在原論文中給出兩個(gè)很好的概念Bag of freebies(目標(biāo)檢測器在不用增加推理成本,讓精確度更好)和Bag of specials(僅增加少量推理成本但可以顯著的提高對象檢測準(zhǔn)確性),同時(shí)YOLO V4在coco數(shù)據(jù)集上不僅達(dá)到了43.5%Ap而且能達(dá)到65FPS。使得其速度與精度都得到了極大的性能提升。Yolo V4算法主要有三個(gè)大部分組成。第一個(gè)部分就是其主干網(wǎng)絡(luò)部分,主干網(wǎng)絡(luò)采用的是CSPDarkNet53用來提取模型中的特征還有DropBlock,馬賽克數(shù)據(jù)增強(qiáng)。第二個(gè)部分是脖子部分(neck)包括SPP和PANet。第三個(gè)部分就是Yolo head部分,里面包含損失函數(shù)GIOU_Loss。圖1是YoloV4的整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)。
圖1 Yolo V4網(wǎng)絡(luò)結(jié)構(gòu)
在主干網(wǎng)絡(luò)部分,YoloV4沒有繼續(xù)的沿用YoloV3的主干網(wǎng)絡(luò)DarkNet,而是采用了CSPDarknet53網(wǎng)絡(luò)。該網(wǎng)絡(luò)的輸入圖像大小為608*608,圖片輸入到網(wǎng)絡(luò)中后,會(huì)對圖片進(jìn)行預(yù)處理,也就是把輸入的圖片大小縮放到網(wǎng)絡(luò)的輸入大小。同時(shí)網(wǎng)絡(luò)中擁有52個(gè)卷積。輸入的圖片先經(jīng)過有32個(gè)過濾器的卷積核去卷積,將得到的特征層在經(jīng)過5個(gè)殘差單元,并且在每個(gè)單元中會(huì)去進(jìn)行重復(fù)的卷積操作且多是先進(jìn)行1*1在繼續(xù)進(jìn)行一個(gè)3*3的卷積操作,而且每個(gè)單元分別重復(fù)卷積操作的次數(shù)為(1、2、8、8、4),再將在這一步分得到的3個(gè)輸出結(jié)果分別做不同的處理,使用CSPDarknet53的優(yōu)點(diǎn)有三方面1:增強(qiáng)了CNN的學(xué)習(xí)能力,在輕量化的同時(shí)保持準(zhǔn)確性、2:降低了計(jì)算瓶頸、3:降低內(nèi)存成本。雖然整個(gè)的主干網(wǎng)絡(luò)看起來和Yolo v3差不多,但是再DarknetConv2D中把激活函數(shù)進(jìn)行了替換,改為了Mish函數(shù)。
使用Mish函數(shù)是因?yàn)镸ish函數(shù)是個(gè)無界函數(shù),同時(shí)梯度更加的平滑,能讓更好的信息進(jìn)入到神經(jīng)網(wǎng)絡(luò)中去。
此外除了激活函數(shù)的改變,還將殘差網(wǎng)絡(luò)的結(jié)構(gòu)也進(jìn)行了改變。使用的是CSPNet網(wǎng)絡(luò),將殘差塊拆分成兩個(gè)部分。主要部分就繼續(xù)進(jìn)行殘差堆疊,另一邊則是一個(gè)殘差邊,最后與主要部分進(jìn)行結(jié)合輸出。CSPNnet結(jié)構(gòu)如圖2所示
圖2 CSPNet結(jié)構(gòu)以及對比圖
在主干網(wǎng)絡(luò)部分,會(huì)對3個(gè)特征層進(jìn)行利用,分別是主干網(wǎng)絡(luò)中的倒數(shù)3層如圖1所示。其中(19,19,1024)的特征層會(huì)被送入到SPP采用1*1、1*5、9*9、13*13的最大池化方式,進(jìn)行多尺度融合。SPP可以將模型的感受野增大,將最顯著的上下文特征分離出來。然后將得到的特征層,和(76,76,256)、(38,38,512)一同放入到 PANet。進(jìn)入到PANet中的特征層,會(huì)完成特征金字塔從下到上和從上到下的的特征提取,在里面不斷的拼接、卷積、上采樣與下采樣。最后得到3個(gè)輸出,也就是圖1中的yolo head。
在yolo head中anchor機(jī)制與yoloV3相同,主要改進(jìn)的是訓(xùn)練時(shí)損失函數(shù)。使用的是CIou_loss。為什么要選擇CIOU_Loss呢?在選擇IOUloss的情況下當(dāng)預(yù)測框和目標(biāo)框不相交時(shí),IOU=0,無法反映兩個(gè)框之間的距離,無法進(jìn)行優(yōu)化,若時(shí)當(dāng)兩框進(jìn)行完全重合時(shí),無法區(qū)分兩者相交的情況。而GIOU_Loss雖然可以解決梯度消失的問題,但會(huì)消耗大量的時(shí)間在預(yù)測框與真實(shí)框接觸上,影響收斂的速度。
CIOU_Loss是在DIOU_loss的基礎(chǔ)上進(jìn)行改進(jìn)的,加入了影響因子,將目標(biāo)框回歸函數(shù)該考慮的重要因素:重疊面積、中心距離、長寬都考慮進(jìn)去了。采用這樣的回歸方式,使得預(yù)測框回歸的速度和精度要更高一些。
在數(shù)據(jù)集制作方面,在網(wǎng)絡(luò)上收集了1000張不同車況的圖像(收集的照片未被標(biāo)注)。并且自己使用Label Image進(jìn)行手動(dòng)標(biāo)注。分別制作了兩個(gè)數(shù)據(jù)集。數(shù)據(jù)集1:前500張,訓(xùn)練集:驗(yàn)證集:測試集比為8:1:1、數(shù)據(jù)集2:全部1000張圖像,訓(xùn)練集:驗(yàn)證集:測試集比為8:1:1。
圖3 數(shù)據(jù)集制作
本文采用的是數(shù)據(jù)集是在網(wǎng)上進(jìn)行收集的圖片,并且自己進(jìn)行手動(dòng)標(biāo)簽。一共1000張圖片。
本實(shí)驗(yàn)平臺(tái)配置為:顯卡為英偉達(dá)1050Ti,顯存為4G,CPU為Inter Core i7-8750H,內(nèi)存為16g,Windows10操作系統(tǒng),環(huán)境為Pyortch。
由于實(shí)驗(yàn)平臺(tái)的問題,在訓(xùn)練數(shù)據(jù)集1時(shí),應(yīng)為數(shù)量較少輸入圖像大小為608*608,數(shù)據(jù)集2輸入圖像大小為416*416。應(yīng)為本文主要針對的汽車的檢測,因此在分類上只分了car的類輸入網(wǎng)絡(luò)中去訓(xùn)練。但在數(shù)據(jù)集中,車的類型并不只是單一的只有小型汽車,還有卡車消防車等汽車類型。同時(shí)為了在一些復(fù)雜化環(huán)境下也可以檢測到汽車,在數(shù)據(jù)集中放入了一些惡劣環(huán)境下的汽車圖片。同時(shí)在進(jìn)行預(yù)測時(shí)還使用到視頻去預(yù)測。因此本模型不僅可以在靜態(tài)的圖片上進(jìn)行預(yù)測,同時(shí)也可以在視頻上進(jìn)行檢驗(yàn)。
同時(shí)在元數(shù)據(jù)的基礎(chǔ)上使用了Yolo V4的小ticks,在原有的數(shù)據(jù)上進(jìn)一步的進(jìn)行了數(shù)據(jù)增廣,通過mosaic的方法對圖像進(jìn)行了隨機(jī)裁剪,縮放等一些操作,這樣可以為模型更好的去增加魯棒性。在訓(xùn)練時(shí)訓(xùn)練了不同的模型,對有的模型加入了平滑標(biāo)簽,有的沒有加入。
同時(shí)在訓(xùn)練自己的數(shù)據(jù)集之前,我還對VOC的數(shù)據(jù)集進(jìn)行了訓(xùn)練,epoch為30,學(xué)習(xí)率為0.0001同時(shí)進(jìn)行了預(yù)測。同時(shí)采用了YOLOv4的權(quán)重文件作為車輛檢測的預(yù)訓(xùn)練模型,并且采用了自己制作的數(shù)據(jù)集中944張圖片作為訓(xùn)練集。圖4分別時(shí)在VOC數(shù)據(jù)集上訓(xùn)練的LOSS變化(右)和在自己數(shù)據(jù)集上訓(xùn)練的Loss變化(左)??梢钥闯龅胶竺嬖浇咏Y(jié)束時(shí)Loss值趨近于收斂。由于在本次實(shí)驗(yàn)在中沒有進(jìn)行對損失進(jìn)行歸一化處理所以損失值看來較為大。但影響不大,最終看的還是Loss是否趨于收斂。
在實(shí)驗(yàn)中對于自己數(shù)據(jù)集訓(xùn)練,訓(xùn)練了2個(gè)模型。模型1:學(xué)習(xí)率為0.00001,沒有平滑標(biāo)簽,輸入網(wǎng)絡(luò)的圖像大小為608*608,epoch為30數(shù)據(jù)集圖片數(shù)量只有446張圖像進(jìn)行訓(xùn)練和檢驗(yàn)。模型二學(xué)習(xí)率為0.0001、平滑標(biāo)簽為0.01、epoch為50、輸入網(wǎng)絡(luò)的圖像大小為418*418,用于訓(xùn)練和檢驗(yàn)圖像增加到944。兩模型Batch_size都為4,且對于兩個(gè)模型,在訓(xùn)練時(shí)都是進(jìn)行了凍結(jié)的處理目的都是對為了讓模型在訓(xùn)練數(shù)據(jù)集的時(shí)候加快模型的訓(xùn)練,讓我們更快的看見結(jié)果。圖5為兩個(gè)模型loss值得變化的對比。
圖4 左:制作的數(shù)據(jù)集,右:VOC數(shù)據(jù)集
圖5 左圖為模型2,右圖為模型1
之后得到了模型選取較為好的權(quán)重文件,放入到預(yù)測部分去對同一張圖去進(jìn)行對車輛在路口的識別。圖6為兩個(gè)模型識別的對比圖。
圖6 左圖為模型1下進(jìn)行的檢測、右圖為模型2下進(jìn)行的檢測
從圖中可以看出模型二的識別效果時(shí)較為好的,能識別出大部分的車車輛,且精確度也要相較于模型2有所提升。而模型1由于數(shù)據(jù)集較為小的原因,并不能完全的都將車輛的全部識別。對于有些遮擋的車輛并不能很好的識別出來,只能前面比較清晰的車輛識別出。
擁擠路段車輛檢測應(yīng)用流程如圖7所示。系統(tǒng)與各路口的攝像頭相連,通過路口的攝像頭返回實(shí)時(shí)的圖像或者視頻,將視頻或圖像進(jìn)行處理后放入模型中進(jìn)行檢測、統(tǒng)計(jì)車流量。將統(tǒng)計(jì)的車車流量返回到系統(tǒng)中進(jìn)行判斷,是否發(fā)出超量預(yù)警。因此系統(tǒng)能較好的實(shí)時(shí)統(tǒng)計(jì)車流量,并告知出行人員讓其自行判斷出行路線。
圖7 擁擠路段車輛檢測應(yīng)用流程圖
從上述實(shí)驗(yàn)結(jié)果看來,將Yolo V4算法運(yùn)用在擁擠道路上對于車輛檢測是較為有效的。能夠較好的去識別車輛,并且能統(tǒng)計(jì)車輛數(shù)。
因?yàn)樵诒敬螌?shí)驗(yàn)中所用的數(shù)據(jù)的量較為小,在精準(zhǔn)度方面并不是特別的突出,若是收集更多的數(shù)據(jù),在更好的設(shè)備上進(jìn)行數(shù)據(jù)的訓(xùn)練,相信精確度和速度都會(huì)得到更多的提升,對于模型的評估也會(huì)更好。對于訓(xùn)練出更好的模型我們也可以運(yùn)用在更多更復(fù)雜的環(huán)境下從而讓其實(shí)用性變得更加強(qiáng)。