張 震, 王曉杰, 晉志華, 馬繼駿
(1.鄭州大學 電氣與信息工程學院,河南 鄭州 450001;2.河南省交通調度指揮中心,河南 鄭州 450001)
交通標志蘊含豐富的語義信息,這些信息或提醒或警告或禁令行駛在道路上的司機,保障行人和司機的安全。并且隨著自動駕駛技術的快速發展,行駛在道路上的車輛只有快速、準確、高效地識別車道線、交通信號燈、交通標志等關鍵信息,并綜合分析其他來源信息,才能提高自動駕駛的安全性。所以,交通標志檢測的研究對于智能駕駛相關技術具有重大意義。
隨著算力水平的提高,基于深度學習的目標檢測算法已經成為科研人員的主流選擇。兩階段目標檢測算法和單階段目標檢測算法相繼被研究學者提出。Girshick等[1]提出的R-CNN(region convolutional neural networks)被認為是兩階段檢測算法的先驅,該算法先提取候選區域,再使用卷積神經網絡和SVM分類器進行分類預測。在此基礎上,科研人員相繼提出Fast R-CNN[2]、Faster R-CNN[3]、Mask R-CNN[4]等更高效的兩階段檢測算法,但囿于其特點,兩階段算法很難達到實時檢測的要求。另一類目標檢測算法為YOLO(you only look once)系列,YOLO算法由Redmon等[5]提出,該算法創新性地將檢測視為回歸問題,使用預設錨框的方式代替候選區域選取。此后,YOLO9000[6]、YOLOv3[7]、YOLOv4[8]等YOLO的算法以及SSD(single shot multibox detector)[9]算法相繼被提出,在精度和速度方面的表現也越來越優秀。
國內外學者針對交通標志的檢測探索出不同的研究方案。Sudha等[10]通過使用新的隨機梯度動量序列和形狀特征提取方法進行檢測,然后使用卷積神經網絡(CNN)分類器對訓練輸出標簽進行分類,最后在訓練與測試階段將交通標志轉換為音頻信號,幫助視障人士解決問題。Han等[11]提出一種針對小目標交通標志檢測的Faster R-CNN,首先使用小的區域候選網絡(region proposal network, RPN)提取建議框,然后將Faster R-CNN與在線硬示例挖掘(online hard example mining, OHEM)算法相結合來提高定位小目標的能力。Wan等[12]使用改進的YOLOv3進行模型剪枝和多尺度預測,在減小模型參數量的同時提高檢測速度,但是在實時檢測時性能不高。尹靖涵等[13]使用改進YOLOv5對霧霾場景下的交通標志進行識別,運用削減特征金字塔深度、限制最高下采樣倍數、調整殘差模塊的特征傳遞深度等方法提升檢測精度。張毅等[14]在Faster R-CNN算法的基礎上進行改進,提出了一種多尺度卷積核的ResNeXt模型,使用多維特征融合的方法,在TT100K數據集上取得了90.83%的平均精度,但是算法的實時性無法保證。李宇瓊等[15]基于YOLOv5算法,增加卷積塊注意力機制,使用DIoU損失函數提升模型檢測性能,改進后模型精度更高,但同時檢測速度下降。郭繼峰等[16]將深度可分離卷積應用于YOLOv4-tiny的特征提取網絡中,使用BiFPN融合多尺度特征,在TT100K數據集上獲得87.5%的準確率,但模型參數量依然較大。
綜上所述,由于交通標志檢測的實時性要求較高,而目前模型無法同時滿足檢測速度快并且檢測精度高的要求,因此,為了在提高模型檢測速度的同時不損失檢測精度,并降低模型的參數量和計算量,本文提出一種輕量化的YOLOv5算法用于交通標志檢測。使用本文構建的GhostBottleneck替換主干網絡中的Bottleneck,并融合到主干網絡(Backbone)和頸部網絡(Neck)中,利用Ghost卷積減少計算量和參數量;為了維持模型檢測精度,本文使用雙向加權特征金字塔網絡(bidirectional feature pyramid network, BiFPN)替換PANet結構,提升網絡特征學習能力;將CIoU損失函數替換為SIoU損失函數,優化定位損失,提高算法精度。
YOLOv5是首款使用Pytorch框架編寫的YOLO系列算法,適合在生產環境中使用,更容易部署,模型參數更少。目前YOLOv5系列仍在繼續優化改進,不斷更新迭代新的版本,本文以6.1版本的YOLOv5s為基礎進行實驗和改進。
該版本的YOLOv5模型可以分為輸入端、主干網絡、頸部網絡及檢測端4個部分。數據首先在輸入端經過馬賽克數據增強,豐富了數據的多樣性,提高訓練效率。主干網絡使用C3模塊,即簡化版的BottleneckCSP,大幅減少參數量。頸部網絡借鑒PANet網絡[17],采用FPN+PAN結構,FPN結構通過將深層的語義特征傳到淺層,增強多個尺度上的語義信息。PAN結構則相反把淺層的定位信息傳導到深層,增強多個尺度上的定位能力。Neck部分還增加了快速空間金字塔池化(spatial pyramid pooling fast, SPPF)模塊,SPPF使用3個5×5的最大池化代替SPP的5×5、9×9、13×13最大池化操作,為此達到使用小卷積核大幅提升計算速度的目的。檢測端含有3個并行的卷積層,當輸入圖片大小為640×640×3時,3個卷積層的輸出分別為80×80×255,40×40×255,20×20×255。YOLOv5的網絡結構如圖1所示。

圖1 YOLOv5結構
Ghost模塊是Han等[18]在2020年提出的一種輕量級特征提取模塊,使用更少的參數量生成特征圖。Ghost模塊的基本結構是Ghost卷積,普通卷積與Ghost卷積結構如圖2所示。

圖2 普通卷積與Ghost卷積
由圖2可以看出,Ghost卷積首先對原始圖片經過一次小計算量的普通卷積操作,得到本征特征圖;然后對本征圖中的m個通道的基礎特征使用低成本的線性運算,即卷積核大小為d×d的深度卷積,得到m個新的相似特征圖;最后將本征特征圖和m個相似特征拼接,得到最終的特征圖。
普通卷積的計算量可表示為
n×h′×w′×c×k×k。
(1)
式中:n表示特征圖個數;h′和w′分別表示輸出圖片的高度和寬度;c表示輸入圖片通道數;k表示標準卷積核大小。
Ghost卷積操作的計算量可以表示為
(2)
式中:s表示本征圖參與線性變換的數量;d表示深度可分離卷積的卷積核大小。
因為d×d的卷積核與k×k的卷積核大小相似,且s< 普通卷積的參數量可以表示為 n×c×k×k。 (3) Ghost卷積的參數量可以表示為 (4) 同理,普通卷積與Ghost卷積的比值rc≈c,證明Ghost卷積比普通卷積也能在參數量上得到削減。 GhostBottleneck模塊就是以Ghost模塊為基礎構建的一款骨干網絡,Han等[18]給出了2種骨干網絡,如圖3所示。步長為1(圖3(a))與步長為2(圖3(b))都采用殘差結構,且圖3(b)在Ghost模塊中間多了1個深度卷積,并且殘差路徑由1個下采樣層和1個步長為2的深度卷積實現。 圖3 GhostBottleneck模塊 本文中采用步長為2的GhostBottleneck結構替換YOLOv5主干網絡中的C3結構的Bottleneck,從而達到進一步降低計算量和參數量的目的,如圖4所示,圖4中的CBS模塊指的是卷積+批量歸一化+SiLU激活函數。 圖4 本文使用的GhostBottleneck 基于GhostBottleneck構建的C3-Ghost結構如圖5所示,用該結構替換YOLOv5網絡中除第1個C3外的其他C3模塊。 圖5 基于C3構建的C3-Ghost模塊 由于使用Ghost卷積降低參數量和計算量的同時也造成了檢測精度下降,因此選擇將BiFPN引入YOLOv5的Neck網絡部分,構建Concat操作替換普通Concat層,通過可學習權重進一步增強網絡特征融合能力。 BiFPN[19]是谷歌大腦提出的一種加權雙向特征金字塔網絡,由于特征金字塔網絡(feature pyramid network, FPN)僅通過一條自頂向下的路徑傳遞特征,可能會遇到特征信息丟失的情況,精度不高,結構如圖6(a)所示。PANet是在上述網絡的基礎上增加一條相反的路徑,用于傳達丟失的位置信息,如圖6(b)所示。BiFPN則是在PANet的基礎上刪除只有一個輸入的節點,在不丟失重要信息的前提下簡化網絡,同時若輸入節點和輸出節點位于同一層則添加一條額外的邊,以融合更多特征,其結構如圖6(c)所示。更重要的是,BiFPN提出使用帶權重的特征融合機制,給每條路徑分配一個可學習的權重,通過對數據特征的學習不斷更新權重,從而獲取更重要的信息。以中間層P6層為例,其最終輸出可以表示為 (5) 圖6 FPN、PANet與BiFPN結構 (6) YOLOv5的損失函數包含3個部分,分別為定位損失box_loss、置信度損失obj_loss及分類損失cls_loss。定位損失用于計算預測框與真實框的誤差;置信度損失用于計算網絡的置信度;分類損失用于計算錨框與對應的標定分類是否正確。 針對定位損失,Gevorgyan[20]認為應該進一步考慮預測框與真實框的角度信息,從而提出了新的損失函數SIoU損失函數,該損失函數由預測框與真實框的角度、距離和形狀以及傳統IoU 4部分損失組成,其中角度損失可以表示為 (7) (8) (9) 距離損失可以表示為 (10) 形狀損失可以表示為 (11) 最后一項為傳統的交并比損失,因此SIoU損失函數的最終損失可以表示為 (12) 因此,為了提高因Ghost卷積丟失的檢測精度,本文選擇將用SIoU損失代替CIoU損失,更加關注真實框與預測框之間的角度位置信息,提高錨框精度。 改進后的輕量化YOLOv5模型如圖7所示,使用C3-Ghost替換原始YOLOv5中的C3模塊,在頸部網絡引入BiFPN結構,以及使用SIoU損失函數。 圖7 輕量化YOLOv5結構 改進后模型的算法流程如下。 步驟1 圖片經過輸入層的處理,計算預設錨框與真實錨框的差值并聚類得到新的一組預設錨框。 步驟2 將圖片送入新的主干網絡,利用加入Ghost卷積的模塊和卷積層提取特征。 步驟3 圖片經過在頸部網絡設計的BiFPN結構增加短接和跳躍連接,加強特征融合能力。 步驟4 圖片到達輸出層,通過使用SIoU計算真實框與預測框之間的誤差,降低定位損失。 目前開源的和針對中國實際道路的交通標志數據集有CCTSDB,以及騰訊和清華大學使用街景圖像構建的TT100K[21]數據集等。CCTSDB數據集僅僅將數據分為指示、警告和禁止標志3類,沒有詳細內容的區分。而TT100K數據集對實地采集且有詳細分類,因此選擇TT100K數據集作為本次實驗的數據集。 TT100K數據集一共包括了上百個交通標志類別,但大多數標志實例個數較少。數據集分布不均衡,有些實例的個數在3 000以上,有些實例數量僅為個位數,并且包含上百個種類,因此需要先對數據集進行篩選,將得到的交通標志實例個數在200個以上的類別進行實驗,避免由于數據集的缺陷無法得到最優模型。以下為預處理步驟。 步驟1 讀取json標注文件,遍歷標注信息,保存實例個數大于等于200的標簽。 步驟2 對原始json標注文件中的標注信息按照訓練集與驗證集為8比2的比例劃分為2個json文件。 步驟3 將劃分好的json格式標注信息轉換成YOLOv5訓練需要的TXT格式進行保存。 步驟4 根據劃分好的標注文件將原始圖片分開存放。 經過上述步驟后得到24個常見交通標志類別,共8 521張圖片,其中訓練集6 801張,驗證集1 720張,具體類別如圖8所示。 圖8 24個交通標志類別 準確率P指預測正確的正樣本數量占所有預測為正樣本數量的百分比;召回率R指預測正確的正樣本占所有正樣本的比值;平均精確率AP表示PR曲線與坐標軸所圍成的圖形面積;mAP@0.5表示在IoU閾值為0.5時所有類別AP的平均值;mAP@0.5∶0.95表示不同IoU閾值(從0.5到0.95,步長0.05)上的平均mAP;參數量用來衡量模型大小,參數量和計算量越小說明模型越輕量;幀率表示每秒刷新的圖片數,可以用來評估模型在檢測時的效率。 本次實驗使用的硬件平臺GPU為NVIDIA RTX3090,顯存24 GB,CPU為Intel(R) Xeon(R) Platinum 8350C@2.60 GHz,內存45 GB。系統環境為Linux,CUDA版本11.1,Pytorch版本1.8.1,Python版本3.8,batch-size設置為16,進行200個epoch迭代。超參設置為系統默認,即初始學習率設置為0.01,使用SGD優化器,初始動量設置為0.937,權重衰減系數設置為0.000 5。 訓練過程如圖9所示,由圖9可以看出,改進后的YOLOv5大概在130個輪次之后達到峰值并趨于穩定,而原始YOLOv5則在160個輪次之后才趨于穩定狀態,并且改進后的YOLOv5訓練過程更平穩,極少出現大幅度變化過程,說明改進后的YOLOv5具有更良好的性能。 圖9 訓練過程曲線 經過實驗分析,原始YOLOv5模型與改進后的YOLOv5模型在TT100K數據集上的結果對比如表1所示。 表1 改進后的YOLOv5模型與原始YOLOv5模型在TT100K數據集上的結果對比 由表1可以看出,改進后的YOLOv5模型的P下降了0.8百分點,R提高了2.8百分點,在參數量減少29%、計算量減少29.4%的情況下,mAP@0.5僅減少了0.1百分點,mAP@0.5∶0.95僅減少了1.0百分點,但檢測的速率提升了34幀。達到了幾乎不損失精確率的前提下,簡化YOLOv5網絡的目的。 其中每個類別的AP值如表2所示,由表2可以看出,有50%的標簽在改進后網絡中的平均精確率高于原始網絡,說明盡管參數量和計算量有所下降,但是由于BiFPN結構和SIoU損失的加入,也使得某些特征的學習能力得到加強。 表2 每個類別AP值 為了進一步研究各個模塊對網絡的影響,本文設置了消融實驗證明改進后網絡的各模塊帶來的影響,具體數據如表3所示。 表3 消融實驗 由表3可以看出,單獨增加Ghost模塊后,整體參數量和計算量都會大幅減少,但同時也會導致mAP@0.5降低2.3百分點;單獨增加BiFPN結構會在稍微提高參數量和計算量的同時提高0.6百分點的mAP@0.5;單獨增加SIoU損失函數則不會對參數量和計算量有所影響,卻能帶來0.2百分點的mAP@0.5提升。當3種改進同時添加到YOLOv5模型之后,在參數量降低29.0%、計算量降低29.4%的同時僅僅犧牲0.1百分點mAP@0.5。所以該改進方法是可行的。 本文使用SSD模型、Faster R-CNN模型、YOLOv3-tiny模型、YOLOv4模型以及本文提出的模型進行對比,實驗結果如表4所示。 表4 5種算法性能對比 由表4可知,相比其他幾項傳統的目標檢測算法,本文提出的輕量化模型在保持較高的檢測精度的基礎上,檢測速度最快、權重最小。 為了驗證輕量化模型在推理過程中的優勢,本文設計了推理過程實驗,考慮到現實使用時很少擁有高性能GPU資源,因此推理過程使用中等偏下配置的平臺。推理所使用的GPU為GeForce 1660super,CPU為Intel I5-10400,軟件環境與訓練一致。使用原始YOLOv5與輕量化模型進行對比,以模型大小和推理時間作為評價指標,實驗結果如表5所示。 表5 推理實驗 由表5可知,在推理實驗中,本文提出的輕量化模型在使用GPU推理時間相比原始模型減少了7.7 ms,使用CPU推理時間減少了57.1 ms。實驗證明改進后的輕量化模型在GPU和CPU上的推理時間均有所降低。 圖10為使用改進前后模型檢測不同圖片的結果。圖10(a)、10(b)是有多個目標的圖片檢測結果對比,可以看出除了“限低速60”的檢測精度下降之外,其標志的檢測結果均有不同幅度的提升;而“限低速100”兩次都沒被檢測出來是因為本次訓練集中未包含該標簽。圖10(c)、10(d)則是只包含單個檢測目標的圖片檢測結果對比,圖10(c)發現有誤檢結果,將遠處一個醫院的紅十字錯誤檢測成“限速50”的標志,經改進后的網絡檢測結果如圖10(d)所示,并沒有誤檢現象出現,且“禁止掉頭”的檢測精度有略微提升。 圖10 改進前后檢測結果 改進后的YOLOv5在參數量降低29.0%、計算量降低29.4%的情況下,mAP@0.5僅下降了0.1百分點,同時檢測幀率提升了34幀/s,取得較好的效果。 (1)使用參數量大幅減少的Ghost卷積和深度可分離卷積構建GhostBottleneck,替換主干網絡和頸部中的部分Bottleneck,簡化網絡參數和計算量。 (2)使用BiFPN替換原始的PANet結構,增強特征融合能力,提高檢測準確率。 (3)將原始CIoU損失替換成更關注預測框與真實框角度位置的SIoU損失,優化損失函數,提升檢測精度。 下一步將考慮在進一步降低參數量和計算量的基礎上提高檢測精度,加入注意力機制等改進方案,使模型能夠部署到移動設備進行實際運用。


2.2 加權特征融合網絡BiFPN



2.3 SIoU損失函數




2.4 改進后模型

3 實驗與結果分析
3.1 數據集預處理

3.2 評價指標
3.3 實驗平臺
3.4 實驗結果及分析







4 結論