王 浩,雷印杰,陳浩楠
四川大學 電子信息學院,成都 610065
隨著科技發展,自動駕駛乃至無人駕駛正逐漸成為現實,交通標志的檢測與識別在行車安全中扮演著重要角色。但在真實自然場景下,交通標志檢測精度受光照、自然環境、遮擋等因素等影響[1],并且考慮到實際場景對于檢測速度的要求,設計的算法需要兼顧高精度、實時、對于環境變化魯棒性強的特點。
目前基于卷積神經網絡的各類目標檢測算法在準確性和模型泛化性上都遠超傳統圖像處理方法。主流的檢測算法可以分為以Faster R-CNN[2]為代表的雙階段檢測算法,和以YOLOV3(you only look once)[3]為代表的單階段檢測算法。前者先篩選出包含目標的ROI(region of interest),再送入分類器進行分類和回歸;而單階段目標檢測算法則省略生成ROI的步驟,直接利用CNN提取特征,完成目標的分類和位置定位。
張建明團隊[4]提出了融合注意力機制的Cascaded R-CNN算法,在CCTSDB數據集上準確率超過99%,但檢測速度僅為7.6 frame/s;而YOLOV3算法因其檢測速度快的特點,在交通標志檢測任務中有著廣泛應用。江金洪等[5]在YOLOV3結構中引入深度可分離卷積,減少模型參數量,同時引入GIoU(generalized intersection over union)[6]和focal loss代替原始MSE損失,雖然精度相較YOLOV3提升8%,但檢測速度僅為12 frame/s;陳立潮等[7]引入密集卷積連接,雖然提高了YOLOV3的精度,但檢測時間相對較長;白士磊等[8]為了能在嵌入式平臺上部署YOLOV3模型,通過剪枝算法壓縮模型權重,減少了模型占用內存空間,但精度下降了4.3%;鮑敬源等[9]引入FireModule以及short-cut對模型進行壓縮優化,雖然提高了檢測速度,但精度有較大損傷;李旭東等[10]采用YOLOV3-tiny作為基礎網絡,提出了一種三尺度嵌套殘差結構,相較原始結構保留了更豐富的空間信息,提高精度的同時,檢測速度高達200 frame/s。
針對道路交通標志檢測任務,YOLOV3及各種改進算法一般都無法同時兼顧精度與速度,為此本文提出一種兼具高檢測精度和速度的改進YOLOV3算法EYOLO(enhanced YOLOV3)。主要工作如下:
(1)采用跨階段局部網絡(cross stage partial network,CSPNet)[11]來代替YOLOV3中Darknet-53[3],通過將梯度的變化從頭到尾集成到特征圖中,在減少了模型計算量的同時可以保證網絡的學習能力,CSPNet是一種處理的思想,可以和ResNet[12]、ResNeXt[13]結合,考慮到減少參數量,本文將CSPNet和ResNeXt結合,作為主干網絡。
(2)為了提高目標框的定位能力,采用路徑聚合網絡(path aggregation network,PAN)[14]來預測回歸目標框,通過增加自下而上的信息流通路徑,來提供坐標回歸所需要的細節信息,提高了目標框坐標的回歸精度。
(3)引入完備交并比(complete intersection over union,CIoU)[15]損失函數,通過最小化預測框與目標框間的中心距離以及加入與寬高比相關的懲罰項,使得模型可以快速收斂,并且提高回歸精度。
YOLOV3是Redmon等[3]在YOLOV2[16]提出的Darknet-19基礎上借鑒ResNet的思想,加入殘差模塊,并進一步加深網絡,構建了Darknet-53,同時參考FPN(feature pyramid network)[17],從不同尺度提取特征。相比YOLOV2,YOLOV3提取3種不同尺度的特征圖,通過將頂層特征上采樣到與低層特征圖相同大小,然后拼接,再進一步在各個尺度特征圖上分別獨立預測。多尺度特征融合有效提升了對于小目標的檢測效果。實際推理時則通過非極大值抑制(non maximum suppression,NMS)過濾掉不同尺度上多余的輸出框,留下最終得預測框。YOLOV3結構示意圖如圖1。

圖1 YOLOV3結構示意圖Fig.1 YOLOV3 structure diagram
殘差模塊雖然緩解了網絡過深帶來的梯度消失問題[12],提升了網絡學習能力,但隨著網絡層次加深,常規卷積帶來的龐大計算量和參數量則對模型的實際部署提出嚴峻考驗。采用深度可分離卷積雖然可以減少模型參數量和計算量,但性能也隨之下降。
受DenseNet啟發,CSPNet[11]設計了一種新型網絡結構,如圖2(a),在減少計算量和冗余梯度信息的同時,實現更豐富的梯度組合,保證網絡的學習能力。本文選擇ResNeXt與CSPNet結合,構建了新的特征提取模塊BottleXNeck,如圖2(c)。在BottleXNeck中,輸入為來自上一層輸出特征圖,被分別送入左右兩個分支,左側分支為簡單的1×1卷積操作,輸出通道數減半;右側分支包含了ResNeXtBlock,其采用了分組卷積,大大減少計算量,并且為了保證最終輸出通道數不變,添加1×1卷積層,降低左側分支輸出的通道數為輸入通道數一半。最后將左右跨階段分層的特征拼接在一起,通過這種方式使得梯度流在不同的網絡路徑中傳播,在緩解梯度消失的同時,拼接的操作也使得傳播的梯度信息可以有很大的相關性差異[11],避免了類似DenseNet中過多的重復梯度信息。
以輸入特征圖大小Ci×H×W,輸出特征圖相同尺寸為例,在不考慮偏置的情況下,BottleXNeck的計算量為,其中g為分組數;若將BottleXNeck替換成圖2(b)ResBlock,計算量為算量壓縮系數本文取g=32,則,計算量減少了約38.46%。

圖2 三種特征提取模塊Fig.2 Three feature extraction module
為提高算法對小目標檢測的精度,YOLOV3中采用了FPN結構來實現多尺度特征融合,如圖3中藍色虛線框中內容,FPN自頂向下,將高層的語義特征傳遞下來,對整個特征金字塔進行增強,但單一自頂向下路徑只能增強語義信息,而缺少對于定位有效的信息。低層級的特征可以幫助目標定位,但如圖3中綠色虛線所示,低層級特征和高層級特征之間有很長的傳播路徑,增加了準確訪問定位信息的難度。基于上述問題,PAN[14]在FPN之外,增加了自下而上的特征金字塔,如圖3中紅色虛線所示,新增加的結構縮短了高層級特征和低層級特征間的信息路徑,來自低層級的準確定位信息可以沿此路徑增強整個特征金字塔。

圖3 EYOLO網絡結構圖Fig.3 EYOLO network structure
EYOLO整個網絡結構如圖3所示。受YOLOV3中Darknet-53結構啟發,并考慮到模型大小,減少了原結構中特征提取模塊的重復次數,為了彌補網絡學習能力,以1.2節中的BottleXNeck作為特征提取模塊,替代ResBlock,同時引入1.3節的PAN來提高模型對于低層級特征的準確訪問,改善模型對于目標的定位能力。圖中各個模塊含義如下:BottleXNeck(Co,n),Co代表模塊最終輸出的通道數,n代表模塊重復的次數;Conv(Ci,Co,k,s),Ci代表輸入通道數,Co代表輸出通道數,k代表卷積核尺寸,s代表卷積核滑動間隔;SPP(Ci,[k1,k2,k3]),代表空間金字塔池化(spatial pyramid pooling,SPP)[18],Ci為輸入通道,[k1,k2,k3]代表三種尺寸的最大池化層,結構示意圖如圖4;Upsample代表最近鄰插值。

圖4 SPP Fig.4 SPP
YOLOV3在訓練過程中,針對目標框坐標回歸采用了均方誤差(mean square error,MSE)損失函數,而類別和置信度則采用了交叉熵損失函數,具體形式分別如下:


整個網絡的損失函數為:

其中,λcoord、λ(no)obj、λclass分別代表坐標損失、(不)含object的置信度損失以及類別損失占總loss的權重;表示第i個網格的第j個anchor是否負責該目標(1或0);(x i,yi,w i,hi,ci,pi)分別代表真實目標框的中心坐標和寬高、置信度、類別;(x^i,y^i,w^i,h^i,c^i,p^i)則依次代表預測目標框的中心坐標、寬高、置信度、類別。
然而對于目標框坐標回歸采用的MSE損失函數(即L2損失),其并不能準確反映預測框和目標框之間的IoU,如圖5(a)、(b)、(c)所示,三種情況下具有相同的L2損失,但IoU卻不同,且L2損失對于尺度敏感,不具有尺度不變性[15]。
IoU是目標檢測中最常用的指標,通過將目標的形狀屬性(如寬度、高度、位置)編碼成歸一化度量來衡量預測框與目標框之間的相似度,因此其具有尺度不變性。其計算過程如式(5),其中B與Bgt分別是預測框與目標框的面積。

但若以lbox=1-IoU作為損失函數,會有以下缺點:
(1)若預測框與目標框之間沒有相交,則IoU為0,lbox=1,不能反映兩者之間的差異。
(2)IoU無法精確地反映二者的重合程度,如圖5(b)、(d)所示,兩者IoU相同,但可以看出d的重合程度更高。

圖5 IoU對比Fig.5 IoU comparison
針對上述問題,GIoU[6]提出新的度量標準,如式(6)所示,其中M是目標框與預測框的最小閉包區域面積。式(6)不僅關注兩者的重疊區域,也關注了兩者非重疊區域,其避免了目標框和預測框沒有交集時IoU=0導致梯度無法更新的缺點。

但由圖5(b)、(d)可以看出當預測框在目標框內部時,GIoU便退化成IoU,且GIoU嚴重依賴IoU項,在訓練前期會傾向先增加預測框的尺寸,以使得兩者出現交集,因此需要迭代更久才能收斂[15]。



圖6 CIoU Fig.6 CIoU
CIoU考慮了目標框坐標回歸中的三個重要因素:重疊面積、中心點距離、寬高比,作為度量標準,與GIoU類似,均滿足非負性、對稱性和三角不等性[10];且對尺度不敏感,具有尺度不變性;由式(7)可以所知,當目標框和預測框重疊時,CIoU=1,lbox=0;而兩者無交集且無限遠時,由于αυ∈[0,1],故CIoU∈[-2,-1],lbox∈[2,3]。
本文實驗是在Ubuntu16.04系統下進行,采用PyTorch 1.6深度學習框架,硬件配置為NVIDIA GeForce GTX 1080 Ti,12 GB顯存,Intel Xeon?CPU E5-1650 v4@3.60 GHz×12,62 GB RAM。訓練過程中參數設置如下:輸入大小512×512;采用SDG優化器,初始學習速0.01,動量大小0.937,權重衰減系數0.000 5,學習率采用余弦降火衰減策略,訓練110個epoch,批量大小72。
本文在德國交通標志檢測數據集(German traffic sign detection benchmark,GTSDB)[19]上進行了消融實驗,驗證前文所述方法的提升效果,同時在規模更大的長沙理工大學中國交通標志檢測數據集(CSUST Chinese traffic sign detection benchmark,CCTSDB)[4]上進行訓練和測試,驗證了EYOLO算法整體結構的優勢。
GTSDB包含900張高分辨率圖片,分辨率1 360×800,其中600張用作訓練,其余300張作為測試,如圖7(a)所示,包含危險、禁止、指示三種類型標志。考慮到數據量過少,本文在訓練時通過對單一圖片添加噪聲、模糊、亮度變化、仿射變換等11種增強技巧,最終得到訓練集7 200張。另外考慮到圖片中的標志大小僅為16~120像素,屬于小目標,且圖片中數量較少(0~2個),為此在訓練時將4張隨機抽取的圖片組合在一起,如圖7(c),并對相應的標簽進行處理,不僅可以提高圖片中小目標的數量,還可以豐富檢測物體的背景,增強網絡對于小目標的檢測能力。
CCTSDB分為訓練集15 724張圖片,測試集400張圖片,如圖7(b)所示,包含警告、禁止、指示三種類型標志。

圖7 交通標志Fig.7 Traffic sign
本文使用多個標準來評估不同算法的性能,包括召回率(recall,R)、準確率(precision,P)、F1值、平均精度均值(mean average precision,mAP),以及檢測速率幀每秒(frame per second,FPS)。mAP是計算所有類別的平均精度(average presison,AP)的均值得到,計算過程如式(8),其中TP為預測正確的正樣本數量,FN為預測錯誤正樣本的數量,FP為將負樣本預測為正樣本的數量,p(rc)表示在c類召回率為r c時的準確率。

3.4.1消融實驗
為了驗證前述方法的有效性,本文在GTSDB數據集上進行消融實驗,構建baseline網絡(通過替換EYOLO中的BottleXNeck為ResBlock以及移除PAN中自下而上的金字塔結構得到),組合使用前述的CSPNet、PAN、CIoU,來驗證不同模塊對于網絡性能的提升。測試集結果如表1所示。

表1 GTSDB數據集上消融實驗結果Table 1 Results of ablation study on GTSDB
表1列出了precision、recall、F1和mAP(IoU閾值取0.5)四種指標。對比baseline和模型A、B、C可知,CSPNet、PAN、CIoU對于模型的性能均有所提升,在mAP上分別提高了1.77%、1.22%、2.99%。而集合三種模塊的EYOLO則在precision、recall、F1、mAP上均取得最優結果,與baseline相比,分別提升了5.36%、4.97%、5.16%、5.21%。
根據消融實驗結果可知,CSPNet、PAN、CIoU損失對于網絡的性能提升是有效的。
3.4.2與其他目標檢測算法對比
本文選取Cascaded R-CNN、YOLV3、改進YOLOV3-tiny[10]三種目標檢測算法與EYOLO算法進行對比,對比實驗在CCTSDB數據集上進行,選擇precision、recall、F1、mAP、FPS五項指標對各算法進行評價,實驗結果如表2所示(除YOLOV3,其余結果均來自原論文)。在precision上,2階段目標檢測算法Cascaded R-CNN排在首位,但速度太慢;改進的YOLOV3-tiny在recall、FPS取得最優,但precision僅為88.6%;雖然在recall和precision上,EYOLO未取得最佳,但在F1和mAP上取得最優,說明了EYOLO算法對于目標識別準確率和位置定位準確性的兼顧;EYOLO檢測精度為95.2%mAP,檢測速度達到113.6 frame/s,滿足實時性對于檢測速度的要求,相比YOLOV3,mAP提高了2.37%,速度提高1.42倍。同時在Intel?CoreTMi5-4210H CPU資源受限型平臺上EYOLO檢測速度依舊可以達到6.1 frame/s而YOLOV3僅為1.7 frame/s。
為解決交通標志檢測中存在的精度低和速度慢問題,本文針對YOLOV3提出了改進算法EYOLO。選取CSPNet來構建新的特征提取模塊BottleXNeck,減少計算量的同時,提高推理速度;引入PAN,增加自下而上的信息傳播路徑,提高對于低層級特征的準確訪問。采用CIoU損失函數,更符合目標框的回歸機制,提高了目標定位精度。在GTSDB上的消融實驗上可以看出三種模塊對于baseline性能的提升的有效性;與其他檢測算法在CCTSDB上的對比實驗中,組合三種模塊的EYOLO算法在F1、mAP指標上取得最佳,反映了其在precision和recall上取得很好的平衡;EOYOLO的mAP為95.2%,檢測速度達到113.6 frame/s,與YOLOV3算法相比,分別提升2.37%和142%。