梁秦嘉,劉 懷,陸 飛
(南京師范大學電氣與自動化工程學院,江蘇 南京 210023)
隨著城市建設的不斷發展,公共設施逐漸完善,城市道路上交通流量也急劇增長. 如何對交通圖像或視頻等監控數據中的各種目標進行準確的檢測已成為城市交通管理所面臨的主要挑戰[1]. 近年來,由于圖像處理單元的性能不斷提高,使得深度學習方法在目標檢測領域取得了廣泛的應用[2],如行人檢測[3]、人臉檢測[4]、航拍目標檢測[5]等.
目前,以神經網絡算法為基礎的目標檢測模型主要有兩類. 一類是基于目標候選框[6]的模型,如 R-CNN[7]、Fast-R-CNN[8]、Faster-R-CNN[9]等,這類模型采用選擇性搜索方法,尋找目標候選區域,然后針對候選區域采用模型進行進一步的處理,雖然檢測精度較高,但速度較慢[10],無法達到實時性要求. 另一類是基于端到端[11]的模型,如SSD[12]、YOLOv2[13]、YOLOv3[14-15]等,此類算法直接通過卷積神經網絡的全局特征判斷目標的位置和種類,因此檢測的速度更快,但精度略低[16]. YOLOv3網絡模型在目標檢測的精度與速度方面均有良好的表現,因此在視頻目標檢測領域得到了廣泛的應用[17],但由于其網絡結構的限制,導致原始算法較難適應視頻中目標在運動時產生的尺度差異,易出現誤檢和漏檢,以及對小目標檢測不準確的問題.
本文提出一種基于改進YOLOv3網絡模型的交通視頻目標檢測算法. 首先,針對交通視頻中的目標在運動時會發生尺度變化的問題,將原始YOLOv3的檢測尺度從3個擴展到4個;同時,為了在不同尺度下選擇合適的錨框大小,對數據集采用k-means++聚類算法進行重新聚類;針對原始YOLOv3在檢測階段對視頻中目標易出現漏檢及誤檢的問題,將每個尺度輸出檢測前的6個卷積層轉換為2個殘差單元,提高對目標的檢測準確率.
YOLO是一種端到端的目標檢測網絡模型,可通過神經網絡直接判斷目標的所屬類別并標示具體位置,故其檢測速度較快. YOLOv3是YOLO系列的第三代算法,其網絡結構如圖1所示.

圖1 YOLOv3網絡結構圖Fig.1 The network of YOLOv3
為了進行特征提取,YOLOv3使用了連續的3×3和1×1卷積層,并借鑒了殘差網絡的思想,設置了5個殘差塊,每個殘差塊由多個殘塊單元組成. 殘差單元結構[18]是指在卷積神經網絡的卷積層外部加入中間層實現與越層之間的快捷連接形成殘差模塊,從而參與后續神經網絡的構成. 假設殘差單元的輸入為變量x,其要擬合的最終輸出也即為原始映射函數L(x),同時定義殘差映射函數F(x)=L(x)-x,則有L(x)=F(x)+x.這樣即可認為原始映射函數等于前饋網絡中主路徑的殘差映射函數F(x)與輸入x兩者相加. 與越層的快捷連接除改變函數計算公式外未引入其他參數,也不會使神經網絡算法的計算速度變慢. 殘差單元的結構如圖2所示.

圖2 殘差單元結構圖Fig.2 The structure of the residual unit
YOLOv3對輸入圖像進行了5次下采樣,在預測階段采用最后3層下采樣的結果來預測3個尺度的目標. 在尺度3上,使用8倍下采樣的特征圖檢測小目標;在尺度2上,采用16倍下采樣的特征圖檢測中等大小的目標;在尺度1上,使用32倍下采樣的特征圖檢測大目標. 對于卷積神經網絡,網絡淺層所提取的目標特征的細節信息較多,所檢測到的目標位置會更為準確,因此檢測的精度相對較高;而網絡深層可以提取目標的語義信息,提取到的特征更全面,但目標檢測精度較低,因此采用特征融合來檢測目標. 為了將淺層與深層所檢測到的特征進行融合,YOLOv3模型借鑒特征金字塔(feature pyramid networks,FPN)的結構,通過上采樣的方式對更深一層的特征圖進行大小調整,則不同尺度的特征圖將擁有相同的大小. 將來自較早層的特征與來自較深層的特征合并在一起,因而YOLOv3對不同目標的檢測都有很好的性能.
1.2.1 網絡結構的改進
為了進一步提高YOLOv3的性能,本文提出一種增強的目標檢測算法. 原始YOLOv3使用3種尺度檢測不同大小的目標,特征層大小分別設定為13×13、26×26、52×52,但在交通視頻中由于行人及各種交通工具的目標數量較多,運動時目標的尺度變化也較大,原算法不能將這些目標很好地檢測出來. 本文將原始YOLOv3的3個檢測結構增加為4個,根據網絡結構將增加的特征層大小設定為104×104. 同時采用特征金字塔的思想,使用YOLOv3網絡模型中的卷積層對圖像進行多次卷積操作. 首先通過上采樣的方法,將最底層采集到的13×13大小的特征層進行擴展,使其擴大為26×26大小的特征層,之后將其與上一個檢測尺度的特征層進行融合,將結果再次輸入回檢測層中. 對上文設計的4個尺度進行相同的操作處理,實現4個不同的尺度融合. 本文設計了4個檢測尺度,將淺層獲取到的目標細節信息和深層獲取到的高級語義信息進行特征的拼接融合,使得網絡可以獲得更為準確的目標信息,同時保持網絡的復雜度,以更好地適用于視頻場景中復雜環境下的多目標多尺度檢測.
對N層的卷積神經網絡,其訓練過程中的網絡梯度變化為:
(1)
式中,Lloss為計算損失;XN為任意層的輸入;WN為該層卷積矩陣;bN為該層偏置項;FM(XNM,WNM,bNM)表示第M層的計算損失;XNM為第M層的輸入;WNM為第M層卷積矩陣;bNM為第M層偏置項. 根據式(1)可知,當網絡逐漸加深時,梯度會逐漸衰落變小甚至消失.
在YOLOv3網絡的目標檢測層之前,有6個卷積層. 當卷積層數較多時,易出現梯度衰落甚至消失的情況,導致檢測精度降低. 由于殘差結構可有效避免梯度衰落情況的發生,將卷積層轉化為殘差結構后,網絡的梯度變化如式(2)所示:
(2)
受殘差網絡結構的啟發,同時考慮網絡層數,本文將6個卷積層轉換為2個殘差單元,如圖3所示. 最終改進后的網絡結構如圖4所示.

圖3 卷積層到殘差結構的轉換Fig.3 The conversion from convolution layer to residual structure

圖4 改進YOLOv3網絡結構圖Fig.4 The network of improved YOLOv3
1.2.2 初始錨框的選擇
借鑒Faster R-CNN,YOLOv3中引入了錨框機制. 錨框即初始候選框,其寬度與高度是固定的,選擇合適的初始候選框對目標檢測的精度和速度有很大的影響. 原始YOLOv3模型是通過k-means聚類算法在數據集上自動找到好的先驗框,但由于在選擇初始的聚類點時,k-means聚類算法有比較大的隨機性,可能會導致較大的聚類偏差. 針對此問題,本文采用k-means++聚類算法,對本文所使用的數據集標注框進行重新聚類分析,以減小因隨機性而帶來的聚類偏差.
為了減小錨框大小對檢測的影響,本文采用平均交并比AvgIOU作為目標聚類分析的度量指標. AvgIOU的目標函數如下:
(3)
(4)
式中,IIOU表示真實框和預測框交集面積和并集面積的比值;box為樣本中目標框的尺寸;centroid為聚類的簇中心;nk是第k個聚類中心的樣本數量;k是聚類中心個數;n為樣本的總數量.
在UA-DETRAC數據集上應用k-means++聚類. 圖5為不同k值下得到的AvgIOU,可以看出,隨著k的增加,目標函數的變化越來越穩定. 結合圖5,并考慮AvgIOU和檢測層的數量,本文選擇12個錨框. 對數據集進行k-means++聚類生成聚類中心后,YOLOv3將這些聚類按比例平均劃分. 考慮到錨框個數給神經網絡的復雜度和計算量帶來的影響,對不同尺度均選擇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值下的聚類分析結果Fig.5 Clustering analysis results underdifferent k values
為了檢驗錨框尺寸對檢測速度和精度的影響,本文將原本YOLOv3的9個錨框重新聚類,命名為YOLOv3-9anchors;同時,為了驗證不同尺度個數對目標檢測精度與速度的影響,在本文改進算法4個尺度的基礎上增加第5個尺度,該檢測尺度大小為208×208,其他處理方式與本文相同,與YOLOv3中同大小的特征圖相連,記為YOLOv3-5scales,對該算法選擇15個錨框.
為了驗證改進算法模型的具體性能,本文以車輛目標為例,采用UA-DETRAC數據集對算法進行測試[19]. 同時,為了驗證在霧霾及陰雨等惡劣天氣情況下算法的有效性,部分視頻場景來源于自行拍攝.
本文對多目標檢測模型的評價指標主要有平均精度、召回率以及平均檢測時間. 其中,Precision表示視頻中所檢測的每一種目標的檢測精度;mAP表示平均精度,即所有目標檢測精度的平均值;平均時間為不同網絡模型檢測完成一幅圖像時所花費的平均時間. 精度和召回率的計算公式為:
(5)
(6)
假設將公共汽車設定為需要檢測的目標,TP表示正確檢測的數量;FP表示將其他類型如小型汽車等被錯誤檢測為公共汽車的數量;FN表示公共汽車被錯誤檢測為其他目標類型的數量.
本文算法是在深度學習框架keras下進行的. 實驗的設施配置為:CPU為Intel i5-9400,主頻 2.90GHz,16GB內存,GPU為NVIDIA 1070,8GB顯存,操作系統為windows 10.
本文對數據集進行重新標注訓練,檢測目標包含小型汽車(car)、公共汽車(bus)、大型貨車(truck)三類. 為了提高訓練的效果,使用了不同角度旋轉圖像和改變圖像的飽和度、曝光和色調等數據增強方法. 在訓練階段,初始學習率為0.001,權值衰減為0.000 5. 當訓練批次為60 000和70 000時,學習率分別降至0.000 1和0.000 01,使損失函數進一步收斂. 由于本文算法并未使模型的復雜度明顯增加,因此訓練時間相比原始YOLOv3沒有顯著變化.
利用改進的YOLOv3模型對UA-DETRAC數據集中的目標進行檢測. 同時對上文所提到的YOLOv3-9anchors與YOLOv3-5scales算法進行聚類以選擇合適的錨框. 針對YOLOv3-9anchors,聚類后的錨框寬高分別為(19,21),(30,25),(27,39),(43,41),(62,33),(63,55),(71,58),(104,57),(128,119). 針對YOLOv3-5scales,聚類后的錨框寬高分別為(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).
不同目標檢測算法的測試結果如表1所示. 由表可知,改進YOLOv3網絡模型的檢測精度為84.59%,相比原始YOLOv3網絡模型,改進后算法的精度提高了7.91%;召回率為96.93%,相比 YOLOv3提高了4.57%. YOLOv3-tiny 的mAP 值為73.25%,召回率為90.65%,均低于改進 YOLOv3模型. 基于不同主干網絡ResNet101和VGG16的Faster-R-CNN算法的平均精度分別為85.03%和86.42%,比本文算法分別高了0.44%、1.83%. 在檢測速度方面,改進YOLOv3對圖像進行檢測的平均用時為30.72 ms,較 YOLOv3 稍有不足. 在YOLO系列檢測算法中,屬于簡化版本的YOLOv3-tiny因其主干網絡淺,結構簡單,檢測速度較快,平均用時僅為6.38 ms. 而Faster-R-CNN系列算法在檢測速度方面有明顯的缺陷,平均時間這一指標遠高于YOLO模型,無法滿足交通視頻的實時性要求. YOLO模型中大部分用時在30 ms左右,檢測速度大幅提升,可實現實時監測.

表1 不同算法實驗結果對比Table 1 Comparison of experimental results of different algorithms
對目標框進行重新聚類后的YOLOv3-9anchors相較于原始算法的mAP和召回率分別提升了5.39%和2.17%,表明初始錨框大小的選擇對目標的檢測精度有著較大影響. 而YOLOv3-5scales的精度和召回率雖然相較于原始YOLOv3模型提高了6.88%和3.85%,與本文改進的YOLOv3算法精度相差無幾,但檢測速度相較于本文算法明顯下降.
整體而言,改進YOLOv3模型在上述評價指標上均較YOLOv3更加出色. 由于采用了k-means++聚類方法,使得目標候選框的選擇更適合于圖像類數據;將檢測層前的卷積層轉化為殘差單元,避免了出現梯度衰落;同時檢測尺度由3個增加至4個,提高了目標檢測精度,可有效檢測不同尺度的目標. 改進YOLOv3方法對于候選框的分類和選擇恰當,并選擇了合適的尺度,未使網絡模型變得過于復雜,提高精度的同時也保持了較快的速度. YOLOv3與改進YOLOv3模型在測試集上的目標檢測對比效果如圖6所示.

(1)~(5)為YOLOv3檢測結果,(6)~(10)為改進YOLOv3檢測結果圖6 白天及夜間的情況下YOLOv3模型與改進YOLOv3模型算法檢測效果對比Fig.6 Comparison of detection effect between YOLOv3 and the improved YOLOv3 algorithmin daytime and nighttime conditions

(1)~(5)為YOLOv3檢測結果,(6)~(10)為改進YOLOv3檢測結果圖7 惡劣天氣情況下YOLOv3模型與改進YOLOv3模型算法檢測效果對比Fig.7 Comparison of the detection effect of YOLOv3 and the improved YOLOv3 algorithmunder severe weather conditions
由圖6可以看出,YOLOv3對很多目標出現漏檢及誤檢情況. 在場景1中,雖然主車道上車輛均被檢出,但YOLOv3未檢測出右側樹后的車輛,改進YOLOv3準確地得出了檢測結果. 在場景2中,YOLOv3僅檢測出主車道上的車輛,改進YOLOv3對上方的小目標車輛及左側出現的車輛局部均能正確檢測. 在場景3中,YOLOv3將視頻下方的卡車錯檢為小型汽車,且后方的小目標均未檢測,改進YOLOv3正確檢測出了卡車及遠處的小目標. 在場景4中,YOLOv3僅檢測出近距離的幾個目標,改進YOLOv3對遠處小目標及兩側有遮擋存在的目標均進行了正確檢測. 在場景5中,YOLOv3對最左側車輛檢測出car和truck兩個結果,改進YOLOv3可準確檢測出每一個目標.
圖7所示為惡劣天氣情況下兩種模型的目標檢測對比圖. 可以看出,YOLOv3的檢測精度依然較低. 在場景1中,YOLOv3對左側車輛檢測出car與truck兩個標簽,改進YOLOv3檢測正確. 在場景2中,YOLOv3僅檢測到前方3個目標,改進YOLOv3檢測到了后方的車輛. 在場景3中,YOLOv3僅能檢測到距離較近的目標,改進YOLOv3可以準確檢測遠處小目標. 在場景4中,YOLOv3對畫面中的卡車進行誤檢. 在場景5中,由于陰雨導致畫面較為模糊,YOLOv3僅能檢測到少數目標,且將公共汽車誤檢為小型汽車,改進YOLOv3依然可以檢測到畫面中的大部分車輛.
由此可見,改進YOLOv3對小目標的檢測及存在遮擋情況和受惡劣天氣影響的環境下,都比原始算法有更高的檢測精度.
針對當前交通視頻中檢測目標多、尺度不斷變化等問題,提出了基于改進YOLOv3模型的交通視頻目標檢測算法. 通過對YOLOv3增加檢測尺度提高對多尺度目標的檢測精度,同時采用k-means++聚類算法選擇更適合數據集的候選框,最后為了避免網絡層數較多導致的梯度衰落,將輸出檢測層的6個卷積層轉化為2個殘差單元. 通過在UA-DETRAC數據集上與原始YOLOv3進行比較實驗,改進后算法的準確率和召回率相比原始YOLOv3分別提高了7.91%和4.57%,同時檢測時間僅增加了0.09 ms,可以達到針對交通視頻的實時監控要求.