梁秦嘉,劉 懷,陸 飛
(南京師范大學(xué)電氣與自動化工程學(xué)院,江蘇 南京 210023)
隨著城市建設(shè)的不斷發(fā)展,公共設(shè)施逐漸完善,城市道路上交通流量也急劇增長. 如何對交通圖像或視頻等監(jiān)控數(shù)據(jù)中的各種目標(biāo)進(jìn)行準(zhǔn)確的檢測已成為城市交通管理所面臨的主要挑戰(zhàn)[1]. 近年來,由于圖像處理單元的性能不斷提高,使得深度學(xué)習(xí)方法在目標(biāo)檢測領(lǐng)域取得了廣泛的應(yīng)用[2],如行人檢測[3]、人臉檢測[4]、航拍目標(biāo)檢測[5]等.
目前,以神經(jīng)網(wǎng)絡(luò)算法為基礎(chǔ)的目標(biāo)檢測模型主要有兩類. 一類是基于目標(biāo)候選框[6]的模型,如 R-CNN[7]、Fast-R-CNN[8]、Faster-R-CNN[9]等,這類模型采用選擇性搜索方法,尋找目標(biāo)候選區(qū)域,然后針對候選區(qū)域采用模型進(jìn)行進(jìn)一步的處理,雖然檢測精度較高,但速度較慢[10],無法達(dá)到實時性要求. 另一類是基于端到端[11]的模型,如SSD[12]、YOLOv2[13]、YOLOv3[14-15]等,此類算法直接通過卷積神經(jīng)網(wǎng)絡(luò)的全局特征判斷目標(biāo)的位置和種類,因此檢測的速度更快,但精度略低[16]. YOLOv3網(wǎng)絡(luò)模型在目標(biāo)檢測的精度與速度方面均有良好的表現(xiàn),因此在視頻目標(biāo)檢測領(lǐng)域得到了廣泛的應(yīng)用[17],但由于其網(wǎng)絡(luò)結(jié)構(gòu)的限制,導(dǎo)致原始算法較難適應(yīng)視頻中目標(biāo)在運(yùn)動時產(chǎn)生的尺度差異,易出現(xiàn)誤檢和漏檢,以及對小目標(biāo)檢測不準(zhǔn)確的問題.
本文提出一種基于改進(jìn)YOLOv3網(wǎng)絡(luò)模型的交通視頻目標(biāo)檢測算法. 首先,針對交通視頻中的目標(biāo)在運(yùn)動時會發(fā)生尺度變化的問題,將原始YOLOv3的檢測尺度從3個擴(kuò)展到4個;同時,為了在不同尺度下選擇合適的錨框大小,對數(shù)據(jù)集采用k-means++聚類算法進(jìn)行重新聚類;針對原始YOLOv3在檢測階段對視頻中目標(biāo)易出現(xiàn)漏檢及誤檢的問題,將每個尺度輸出檢測前的6個卷積層轉(zhuǎn)換為2個殘差單元,提高對目標(biāo)的檢測準(zhǔn)確率.
YOLO是一種端到端的目標(biāo)檢測網(wǎng)絡(luò)模型,可通過神經(jīng)網(wǎng)絡(luò)直接判斷目標(biāo)的所屬類別并標(biāo)示具體位置,故其檢測速度較快. YOLOv3是YOLO系列的第三代算法,其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示.
圖1 YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.1 The network of YOLOv3
為了進(jìn)行特征提取,YOLOv3使用了連續(xù)的3×3和1×1卷積層,并借鑒了殘差網(wǎng)絡(luò)的思想,設(shè)置了5個殘差塊,每個殘差塊由多個殘塊單元組成. 殘差單元結(jié)構(gòu)[18]是指在卷積神經(jīng)網(wǎng)絡(luò)的卷積層外部加入中間層實現(xiàn)與越層之間的快捷連接形成殘差模塊,從而參與后續(xù)神經(jīng)網(wǎng)絡(luò)的構(gòu)成. 假設(shè)殘差單元的輸入為變量x,其要擬合的最終輸出也即為原始映射函數(shù)L(x),同時定義殘差映射函數(shù)F(x)=L(x)-x,則有L(x)=F(x)+x.這樣即可認(rèn)為原始映射函數(shù)等于前饋網(wǎng)絡(luò)中主路徑的殘差映射函數(shù)F(x)與輸入x兩者相加. 與越層的快捷連接除改變函數(shù)計算公式外未引入其他參數(shù),也不會使神經(jīng)網(wǎng)絡(luò)算法的計算速度變慢. 殘差單元的結(jié)構(gòu)如圖2所示.
圖2 殘差單元結(jié)構(gòu)圖Fig.2 The structure of the residual unit
YOLOv3對輸入圖像進(jìn)行了5次下采樣,在預(yù)測階段采用最后3層下采樣的結(jié)果來預(yù)測3個尺度的目標(biāo). 在尺度3上,使用8倍下采樣的特征圖檢測小目標(biāo);在尺度2上,采用16倍下采樣的特征圖檢測中等大小的目標(biāo);在尺度1上,使用32倍下采樣的特征圖檢測大目標(biāo). 對于卷積神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)淺層所提取的目標(biāo)特征的細(xì)節(jié)信息較多,所檢測到的目標(biāo)位置會更為準(zhǔn)確,因此檢測的精度相對較高;而網(wǎng)絡(luò)深層可以提取目標(biāo)的語義信息,提取到的特征更全面,但目標(biāo)檢測精度較低,因此采用特征融合來檢測目標(biāo). 為了將淺層與深層所檢測到的特征進(jìn)行融合,YOLOv3模型借鑒特征金字塔(feature pyramid networks,FPN)的結(jié)構(gòu),通過上采樣的方式對更深一層的特征圖進(jìn)行大小調(diào)整,則不同尺度的特征圖將擁有相同的大小. 將來自較早層的特征與來自較深層的特征合并在一起,因而YOLOv3對不同目標(biāo)的檢測都有很好的性能.
1.2.1 網(wǎng)絡(luò)結(jié)構(gòu)的改進(jìn)
為了進(jìn)一步提高YOLOv3的性能,本文提出一種增強(qiáng)的目標(biāo)檢測算法. 原始YOLOv3使用3種尺度檢測不同大小的目標(biāo),特征層大小分別設(shè)定為13×13、26×26、52×52,但在交通視頻中由于行人及各種交通工具的目標(biāo)數(shù)量較多,運(yùn)動時目標(biāo)的尺度變化也較大,原算法不能將這些目標(biāo)很好地檢測出來. 本文將原始YOLOv3的3個檢測結(jié)構(gòu)增加為4個,根據(jù)網(wǎng)絡(luò)結(jié)構(gòu)將增加的特征層大小設(shè)定為104×104. 同時采用特征金字塔的思想,使用YOLOv3網(wǎng)絡(luò)模型中的卷積層對圖像進(jìn)行多次卷積操作. 首先通過上采樣的方法,將最底層采集到的13×13大小的特征層進(jìn)行擴(kuò)展,使其擴(kuò)大為26×26大小的特征層,之后將其與上一個檢測尺度的特征層進(jìn)行融合,將結(jié)果再次輸入回檢測層中. 對上文設(shè)計的4個尺度進(jìn)行相同的操作處理,實現(xiàn)4個不同的尺度融合. 本文設(shè)計了4個檢測尺度,將淺層獲取到的目標(biāo)細(xì)節(jié)信息和深層獲取到的高級語義信息進(jìn)行特征的拼接融合,使得網(wǎng)絡(luò)可以獲得更為準(zhǔn)確的目標(biāo)信息,同時保持網(wǎng)絡(luò)的復(fù)雜度,以更好地適用于視頻場景中復(fù)雜環(huán)境下的多目標(biāo)多尺度檢測.
對N層的卷積神經(jīng)網(wǎng)絡(luò),其訓(xùn)練過程中的網(wǎng)絡(luò)梯度變化為:
(1)
式中,Lloss為計算損失;XN為任意層的輸入;WN為該層卷積矩陣;bN為該層偏置項;FM(XNM,WNM,bNM)表示第M層的計算損失;XNM為第M層的輸入;WNM為第M層卷積矩陣;bNM為第M層偏置項. 根據(jù)式(1)可知,當(dāng)網(wǎng)絡(luò)逐漸加深時,梯度會逐漸衰落變小甚至消失.
在YOLOv3網(wǎng)絡(luò)的目標(biāo)檢測層之前,有6個卷積層. 當(dāng)卷積層數(shù)較多時,易出現(xiàn)梯度衰落甚至消失的情況,導(dǎo)致檢測精度降低. 由于殘差結(jié)構(gòu)可有效避免梯度衰落情況的發(fā)生,將卷積層轉(zhuǎn)化為殘差結(jié)構(gòu)后,網(wǎng)絡(luò)的梯度變化如式(2)所示:
(2)
受殘差網(wǎng)絡(luò)結(jié)構(gòu)的啟發(fā),同時考慮網(wǎng)絡(luò)層數(shù),本文將6個卷積層轉(zhuǎn)換為2個殘差單元,如圖3所示. 最終改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示.
圖3 卷積層到殘差結(jié)構(gòu)的轉(zhuǎn)換Fig.3 The conversion from convolution layer to residual structure
圖4 改進(jìn)YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.4 The network of improved YOLOv3
1.2.2 初始錨框的選擇
借鑒Faster R-CNN,YOLOv3中引入了錨框機(jī)制. 錨框即初始候選框,其寬度與高度是固定的,選擇合適的初始候選框?qū)δ繕?biāo)檢測的精度和速度有很大的影響. 原始YOLOv3模型是通過k-means聚類算法在數(shù)據(jù)集上自動找到好的先驗框,但由于在選擇初始的聚類點(diǎn)時,k-means聚類算法有比較大的隨機(jī)性,可能會導(dǎo)致較大的聚類偏差. 針對此問題,本文采用k-means++聚類算法,對本文所使用的數(shù)據(jù)集標(biāo)注框進(jìn)行重新聚類分析,以減小因隨機(jī)性而帶來的聚類偏差.
為了減小錨框大小對檢測的影響,本文采用平均交并比AvgIOU作為目標(biāo)聚類分析的度量指標(biāo). AvgIOU的目標(biāo)函數(shù)如下:
(3)
(4)
式中,IIOU表示真實框和預(yù)測框交集面積和并集面積的比值;box為樣本中目標(biāo)框的尺寸;centroid為聚類的簇中心;nk是第k個聚類中心的樣本數(shù)量;k是聚類中心個數(shù);n為樣本的總數(shù)量.
在UA-DETRAC數(shù)據(jù)集上應(yīng)用k-means++聚類. 圖5為不同k值下得到的AvgIOU,可以看出,隨著k的增加,目標(biāo)函數(shù)的變化越來越穩(wěn)定. 結(jié)合圖5,并考慮AvgIOU和檢測層的數(shù)量,本文選擇12個錨框. 對數(shù)據(jù)集進(jìn)行k-means++聚類生成聚類中心后,YOLOv3將這些聚類按比例平均劃分. 考慮到錨框個數(shù)給神經(jīng)網(wǎng)絡(luò)的復(fù)雜度和計算量帶來的影響,對不同尺度均選擇3個錨框. 通過k-means++聚類,得到各個錨框的寬和高維度的尺寸分別為(21,22),(32,24),(26,40),(45,40),(63,32),(62,56),(73,60),(106,57),(131,118),(92,116),(200,130),(316,181).
圖5 不同k值下的聚類分析結(jié)果Fig.5 Clustering analysis results underdifferent k values
為了檢驗錨框尺寸對檢測速度和精度的影響,本文將原本YOLOv3的9個錨框重新聚類,命名為YOLOv3-9anchors;同時,為了驗證不同尺度個數(shù)對目標(biāo)檢測精度與速度的影響,在本文改進(jìn)算法4個尺度的基礎(chǔ)上增加第5個尺度,該檢測尺度大小為208×208,其他處理方式與本文相同,與YOLOv3中同大小的特征圖相連,記為YOLOv3-5scales,對該算法選擇15個錨框.
為了驗證改進(jìn)算法模型的具體性能,本文以車輛目標(biāo)為例,采用UA-DETRAC數(shù)據(jù)集對算法進(jìn)行測試[19]. 同時,為了驗證在霧霾及陰雨等惡劣天氣情況下算法的有效性,部分視頻場景來源于自行拍攝.
本文對多目標(biāo)檢測模型的評價指標(biāo)主要有平均精度、召回率以及平均檢測時間. 其中,Precision表示視頻中所檢測的每一種目標(biāo)的檢測精度;mAP表示平均精度,即所有目標(biāo)檢測精度的平均值;平均時間為不同網(wǎng)絡(luò)模型檢測完成一幅圖像時所花費(fèi)的平均時間. 精度和召回率的計算公式為:
(5)
(6)
假設(shè)將公共汽車設(shè)定為需要檢測的目標(biāo),TP表示正確檢測的數(shù)量;FP表示將其他類型如小型汽車等被錯誤檢測為公共汽車的數(shù)量;FN表示公共汽車被錯誤檢測為其他目標(biāo)類型的數(shù)量.
本文算法是在深度學(xué)習(xí)框架keras下進(jìn)行的. 實驗的設(shè)施配置為:CPU為Intel i5-9400,主頻 2.90GHz,16GB內(nèi)存,GPU為NVIDIA 1070,8GB顯存,操作系統(tǒng)為windows 10.
本文對數(shù)據(jù)集進(jìn)行重新標(biāo)注訓(xùn)練,檢測目標(biāo)包含小型汽車(car)、公共汽車(bus)、大型貨車(truck)三類. 為了提高訓(xùn)練的效果,使用了不同角度旋轉(zhuǎn)圖像和改變圖像的飽和度、曝光和色調(diào)等數(shù)據(jù)增強(qiáng)方法. 在訓(xùn)練階段,初始學(xué)習(xí)率為0.001,權(quán)值衰減為0.000 5. 當(dāng)訓(xùn)練批次為60 000和70 000時,學(xué)習(xí)率分別降至0.000 1和0.000 01,使損失函數(shù)進(jìn)一步收斂. 由于本文算法并未使模型的復(fù)雜度明顯增加,因此訓(xùn)練時間相比原始YOLOv3沒有顯著變化.
利用改進(jìn)的YOLOv3模型對UA-DETRAC數(shù)據(jù)集中的目標(biāo)進(jìn)行檢測. 同時對上文所提到的YOLOv3-9anchors與YOLOv3-5scales算法進(jìn)行聚類以選擇合適的錨框. 針對YOLOv3-9anchors,聚類后的錨框?qū)捀叻謩e為(19,21),(30,25),(27,39),(43,41),(62,33),(63,55),(71,58),(104,57),(128,119). 針對YOLOv3-5scales,聚類后的錨框?qū)捀叻謩e為(10,18),(12,23),(22,19),(19,31),(37,19),(31,29),(31,44),(44,39),(59,26),(57,53),(92,42),(83,74),(133,59),(142,108),(267,123).
不同目標(biāo)檢測算法的測試結(jié)果如表1所示. 由表可知,改進(jìn)YOLOv3網(wǎng)絡(luò)模型的檢測精度為84.59%,相比原始YOLOv3網(wǎng)絡(luò)模型,改進(jìn)后算法的精度提高了7.91%;召回率為96.93%,相比 YOLOv3提高了4.57%. YOLOv3-tiny 的mAP 值為73.25%,召回率為90.65%,均低于改進(jìn) YOLOv3模型. 基于不同主干網(wǎng)絡(luò)ResNet101和VGG16的Faster-R-CNN算法的平均精度分別為85.03%和86.42%,比本文算法分別高了0.44%、1.83%. 在檢測速度方面,改進(jìn)YOLOv3對圖像進(jìn)行檢測的平均用時為30.72 ms,較 YOLOv3 稍有不足. 在YOLO系列檢測算法中,屬于簡化版本的YOLOv3-tiny因其主干網(wǎng)絡(luò)淺,結(jié)構(gòu)簡單,檢測速度較快,平均用時僅為6.38 ms. 而Faster-R-CNN系列算法在檢測速度方面有明顯的缺陷,平均時間這一指標(biāo)遠(yuǎn)高于YOLO模型,無法滿足交通視頻的實時性要求. YOLO模型中大部分用時在30 ms左右,檢測速度大幅提升,可實現(xiàn)實時監(jiān)測.
表1 不同算法實驗結(jié)果對比Table 1 Comparison of experimental results of different algorithms
對目標(biāo)框進(jìn)行重新聚類后的YOLOv3-9anchors相較于原始算法的mAP和召回率分別提升了5.39%和2.17%,表明初始錨框大小的選擇對目標(biāo)的檢測精度有著較大影響. 而YOLOv3-5scales的精度和召回率雖然相較于原始YOLOv3模型提高了6.88%和3.85%,與本文改進(jìn)的YOLOv3算法精度相差無幾,但檢測速度相較于本文算法明顯下降.
整體而言,改進(jìn)YOLOv3模型在上述評價指標(biāo)上均較YOLOv3更加出色. 由于采用了k-means++聚類方法,使得目標(biāo)候選框的選擇更適合于圖像類數(shù)據(jù);將檢測層前的卷積層轉(zhuǎn)化為殘差單元,避免了出現(xiàn)梯度衰落;同時檢測尺度由3個增加至4個,提高了目標(biāo)檢測精度,可有效檢測不同尺度的目標(biāo). 改進(jìn)YOLOv3方法對于候選框的分類和選擇恰當(dāng),并選擇了合適的尺度,未使網(wǎng)絡(luò)模型變得過于復(fù)雜,提高精度的同時也保持了較快的速度. YOLOv3與改進(jìn)YOLOv3模型在測試集上的目標(biāo)檢測對比效果如圖6所示.
(1)~(5)為YOLOv3檢測結(jié)果,(6)~(10)為改進(jìn)YOLOv3檢測結(jié)果圖6 白天及夜間的情況下YOLOv3模型與改進(jìn)YOLOv3模型算法檢測效果對比Fig.6 Comparison of detection effect between YOLOv3 and the improved YOLOv3 algorithmin daytime and nighttime conditions
(1)~(5)為YOLOv3檢測結(jié)果,(6)~(10)為改進(jìn)YOLOv3檢測結(jié)果圖7 惡劣天氣情況下YOLOv3模型與改進(jìn)YOLOv3模型算法檢測效果對比Fig.7 Comparison of the detection effect of YOLOv3 and the improved YOLOv3 algorithmunder severe weather conditions
由圖6可以看出,YOLOv3對很多目標(biāo)出現(xiàn)漏檢及誤檢情況. 在場景1中,雖然主車道上車輛均被檢出,但YOLOv3未檢測出右側(cè)樹后的車輛,改進(jìn)YOLOv3準(zhǔn)確地得出了檢測結(jié)果. 在場景2中,YOLOv3僅檢測出主車道上的車輛,改進(jìn)YOLOv3對上方的小目標(biāo)車輛及左側(cè)出現(xiàn)的車輛局部均能正確檢測. 在場景3中,YOLOv3將視頻下方的卡車錯檢為小型汽車,且后方的小目標(biāo)均未檢測,改進(jìn)YOLOv3正確檢測出了卡車及遠(yuǎn)處的小目標(biāo). 在場景4中,YOLOv3僅檢測出近距離的幾個目標(biāo),改進(jìn)YOLOv3對遠(yuǎn)處小目標(biāo)及兩側(cè)有遮擋存在的目標(biāo)均進(jìn)行了正確檢測. 在場景5中,YOLOv3對最左側(cè)車輛檢測出car和truck兩個結(jié)果,改進(jìn)YOLOv3可準(zhǔn)確檢測出每一個目標(biāo).
圖7所示為惡劣天氣情況下兩種模型的目標(biāo)檢測對比圖. 可以看出,YOLOv3的檢測精度依然較低. 在場景1中,YOLOv3對左側(cè)車輛檢測出car與truck兩個標(biāo)簽,改進(jìn)YOLOv3檢測正確. 在場景2中,YOLOv3僅檢測到前方3個目標(biāo),改進(jìn)YOLOv3檢測到了后方的車輛. 在場景3中,YOLOv3僅能檢測到距離較近的目標(biāo),改進(jìn)YOLOv3可以準(zhǔn)確檢測遠(yuǎn)處小目標(biāo). 在場景4中,YOLOv3對畫面中的卡車進(jìn)行誤檢. 在場景5中,由于陰雨導(dǎo)致畫面較為模糊,YOLOv3僅能檢測到少數(shù)目標(biāo),且將公共汽車誤檢為小型汽車,改進(jìn)YOLOv3依然可以檢測到畫面中的大部分車輛.
由此可見,改進(jìn)YOLOv3對小目標(biāo)的檢測及存在遮擋情況和受惡劣天氣影響的環(huán)境下,都比原始算法有更高的檢測精度.
針對當(dāng)前交通視頻中檢測目標(biāo)多、尺度不斷變化等問題,提出了基于改進(jìn)YOLOv3模型的交通視頻目標(biāo)檢測算法. 通過對YOLOv3增加檢測尺度提高對多尺度目標(biāo)的檢測精度,同時采用k-means++聚類算法選擇更適合數(shù)據(jù)集的候選框,最后為了避免網(wǎng)絡(luò)層數(shù)較多導(dǎo)致的梯度衰落,將輸出檢測層的6個卷積層轉(zhuǎn)化為2個殘差單元. 通過在UA-DETRAC數(shù)據(jù)集上與原始YOLOv3進(jìn)行比較實驗,改進(jìn)后算法的準(zhǔn)確率和召回率相比原始YOLOv3分別提高了7.91%和4.57%,同時檢測時間僅增加了0.09 ms,可以達(dá)到針對交通視頻的實時監(jiān)控要求.