陳 哲,程艷云
(南京郵電大學 自動化學院、人工智能學院,江蘇 南京 210046)
近年,一般的物體檢測在PASCAL VOC和COCO數據集上取得了不錯的成就,但由于含交通標志的場景圖中目標小,因此這些一般物體的檢測方法很少能直接應用于交通標志檢測的任務中。本文的檢測方法都是基于卷積神經網絡(convolutional neural network,CNN)來進行研究的。
Lu等[1]對于街景中交通標志的檢測和分類問題,提出一種基于注意力模型的檢測框架。注意力模型被設計成為適當比例的候選區域,以更好地定位和分類小目標,雖然達到了86.8%的F1-measure,但檢測速度只有3.85 FPS;Wang等[2]提出基于級聯掩碼的小目標檢測框架方法來解決小對象特征丟失的問題。首先對多個分辨率圖像從低到高通過級聯的方式丟棄背景區域,利用Faster R-CNN[3]在前景區域內檢測目標,檢測速度也僅為9.6 FPS。
以上的檢測算法都是采用兩階段檢測,不能滿足實時檢測場景,這對于應用于自動駕駛領域的目標檢測是十分不友好的。
現如今,隨著特征融合和損失函數的不斷優化,單階段檢測的準確性可以達到兩階段的類似效果。一些學者采用單階段檢測算法SSD[4]和YOLOv3[5]對交通標志進行檢測,F1-measure分別達到了62.8%和70.7%,檢測速度分別達到了19.23 FPS和22.22 FPS。相比于兩階段檢測,速度得到了很大的提升,但精度不高;為了提高精度,Zhang等[6]使用了增強型的YOLOv3(MSA_YOLOv3)進行檢測。該方法引入多尺度空間金字塔匯集塊,并設計一條自底向上的增強型路徑,通過利用低層的細粒度特征實現目標的精確定位,該方法的F1-measure為81.8%,檢測速度達到23.81 FPS。雖然該方法的精度得到了提升,但大大增加了模型計算的復雜度。
本文針對在交通標志中常見的檢測目標小和自然環境干擾的問題,通過對FCOS(fully convolutional one-stage object detection)[7]算法進行研究和改進,設計出一個檢測精度和速度兼顧的單階段檢測算法。主要工作包括:
(1)在特征提取網絡ResNet-50[8]中引入注意力機制CBAM(convolutional block attention module)[9],更大程度上利用有效特征,減少了正負樣本不均衡的現象;
(2)引入swish函數[10]避免了一定程度的特征丟失現象,提高了檢測效率;
(3)此外通過在特征加強網絡上添加一個輕量級的多尺度特征融合來保護不同層的特征,對提高檢測精度和速度方面有很大的幫助;
(4)原FCOS算法中所用到的數據集會出現目標框重疊的情況,所以對模糊樣本進行了處理,但本文的數據集不會出現模糊樣本,因此本文對該處理進行了有效的刪減,減少了不必要的計算量。
首先,將交通標志數據集放入引用注意力機制CBAM的ResNet-50網絡中初步進行特征提取,得到C3、C4、C5有效特征層;然后調整維度大小,將有效特征層C3、C4、C5進行卷積操作得到P3、P4、P5特征層,將P5、P6進行上采樣分別得到P6、P7特征層;為了保護不同大小的特征,本文將得到的P3~P7特征層進行通道數調整后,進行一次多尺度特征融合;最后將得到的特征進行分類和回歸操作。對于遠離目標中心點所出現的低質量的預測框,本文引入了center-ness來進行抑制;此外,本文的損失函數由分類損失focal loss、回歸損失IOU loss和center-ness損失BCE構成。本文的整體結構如圖1所示。

圖1 整體結構
目前的殘差網絡ResNet系列主要有ResNet-18、ResNet-34、ResNet-50和ResNet-101等。由于本文采用的數據集的圖片中目標較小,因此需要選取較深的特征網絡。經過實驗分析,ResNet-50網絡所達到的效果不錯,而且相對于ResNet-101耗存小。因此,本文所用到特征提取的主干網絡是ResNet-50。
ResNet-50有Conv Block和Identity Block兩個基本塊,其中,Conv Block可以改變輸出特征層的寬高和通道數;Identity Block是用來加深網絡,改變通道數。如圖1所示,對于特征圖C3、C4、C5中Fi的每個位置(x,y)都可以映射到輸入圖像,計算公式如下
(1)
其中,s代表特征圖Fi的步長。
由于本文所采用的TT100K數據集中圖片的尺寸是2048*2048,交通標志占整個圖像的比例大約在0.2%~1%左右。和一般物體檢測相比,交通標志檢測的對象普遍很小。而且原FCOS算法在檢測中會出現的大量正負樣本不均衡現象,因此需要對有效特征進行保護。因此本文在ResNet-50網絡的基礎上加入了注意力模塊CBAM,如圖1所示。值得注意的是,在添加CBAM模塊時,為了維持ResNet-50的網絡結構,我們將CBAM加在ResNet-50網絡的最后卷積層和第一卷積層。


圖2 CBAM中的通道注意力模塊(上)和空間注意力模塊(下)
此外,本文在ResNet-50網絡的每一層引入了swish激活函數,替換原來的ReLU激活函數
f(x)=x·σ(βx)
(2)
其中,β為可訓練參數,可通過模型控制插值程度,當β=0時,swish激活函數變為線性函數;當β等于∞時,swish激活函數相當于ReLU函數。故swish函數可以看作是介于線性核函數和ReLU函數之間的平滑函數。
swish函數具備無上界有下界、平滑、非單調的特性,有減少梯度爆炸和梯度消失的作用,在模型效果上優于ReLU函數。ReLU激活函數和swish激活函數如圖3所示。

圖3 swish激活函數和ReLU激活函數對比
因EfficientDet[11]檢測器中的BiFPN影響,又考慮到檢測的實時性,本文采用一個輕量級多尺度特征融合提高檢測器性能。這是由于真實邊框的尺寸不同,采用此方法是為了更清晰判斷目標對象位于哪一層特征層。如圖1所示,在整體結構圖中的P3、P4、P5通過是由C3、C4、C5特征圖和1*1卷積獲取的有效特征層,從上而下連接,P6、P7層是高語義特征層,其中P6和P7分別通過P5和P6應用一個步長為2的卷積層而產生,由此構成了一個特征金字塔網絡FPN[12]。之后對多級特征進行融合,這里的Pi′(i=3,4,5,6,7) 是Pi(i=3,4,5,6,7) 經過1*1卷積調整通道數獲得,之后,對每一層進行上采樣和下采樣,具體結構如圖1所示,公式如下
Pi″=upsample(Pi′)⊕P(i+1)′i=4,5,6
(3)
Piout=upsample(P(i+1)″)⊕Pi′i=3
(4)
Piout=downsample(P(i-1)out)⊕Pi″i=4,5,6
(5)
Piout=downsample(P(i-1)out)⊕Pi′i=7
(6)
其中,Piout(i=3,4,5,6,7) 代表Pi(i=3,4,5,6,7) 的有效層,用于后面的分類和回歸操作。
對于本文的訓練損失函數,我們設置為

(7)

在損失函數中,焦點損失函數是在標準交叉熵損失(cross entropy loss)函數基礎上增加一個調制因子 (1-pt)γ, 用來解決單階段檢測中尤為顯著的類別不均衡的情況,其中,標準交叉熵損失公式如下

(8)
其中,y代表樣本的標簽,當為正樣本時,y=1,為負樣本時,y=0,p∈[0,1] 表示y=1時所對應類別的預測概率。因此,焦點損失函數的公式為
FL(pt)=-αt(1-pt)γlog(pt)
(9)
其中,γ是調制參數,且γ≥0,通過減少易分類樣本的權重,從而使得模型在訓練時更專注于難分類的樣本,α是平衡變量,當為正樣本時,αt=α,當為負樣本時,αt=1-α,通過設定α的值來控制正負樣本對總損失的共享權重,這里γ=2,α=0.25。
如果位置(x,y)落入任何一個真實邊框,并且該位置的類標簽c*是真實邊框的類標簽,則該位置是正樣本,否則為負樣本或背景類(c*=0),除此之外,點位置到邊框四邊的距離分別為l、t、r、b,如圖4所示。

圖4 點位置到邊框四邊的距離
對于低質量的樣本,本文通過一個簡單有效的方法進行抑制,如結構圖所示,添加了一個中心度centerness,定義為
(10)
其范圍在[0,1]之間,使用標準交叉熵損失函數來訓練,損失被加到式(7)的損失函數中,在測試時,通過將預測的中心度與相應的分類分數相乘來計算最終分數,對于低分數的邊界框最終在非極大抑制(NMS)被過濾掉,因此,它可以用來降低遠離對象中心邊界分數的權重,顯著提高了檢測的性能。
本實驗所采用的數據集是清華大學和騰訊公司聯合推出的TT100K(tsinghua-tencent 100K)數據集[15]。該數據集的圖像是在街景中獲取的,具有多樣性,囊括了光照、視角和天氣條件的巨大變化,相對于其它數據集(例如:GTSRB、CTSDB、CCTSDB)更接近于真實的交通道路場景。因此,本文選擇此數據集來進行實驗。TT100K數據集及部分檢測結果如圖5所示。

圖5 TT100K數據集及檢測(部分)
由于TT100K數據集實際上標注了100多個類別,考慮到類別不均衡會引起在深度學習訓練中所出現部分類別的過擬合現象,影響訓練的精度,因此,本文選取了單個類別的圖像數據大于100的45個類別來訓練。類別如圖6所示。

圖6 實例超過100的類別
2.2.1 實驗環境與設置
本實驗使用兩塊英偉達的2080ti的顯卡。采用Ubuntu 18.04的操作系統,另外配合顯卡的CUDA 10.1和CUDNN 7.6.3。該實驗的代碼編寫是在Pytorch框架進行,使用同步隨機梯度下降(SGD)優化器,初始學習率設置為0.01,批處理大小設置為8,在迭代60 K和80 K時,學習率分別降低了10倍,權重衰減和動量分別設置為0.0001和0.9。本文使用ImageNet[16]預訓練權重進行初始化,并將輸入圖片的短邊設置為800,長邊小于或等于1333。
2.2.2 結果分析
首先,本文是使用F1-measure評價指標來評價模型的好壞,公式如下
(11)
其中,P是精準率,R是召回率。F1-measure是精準率和召回率的加權調和平均。F1-measure值越高,說明實驗結果越好。
首先,考慮到原FCOS算法中所用到的數據集和本文所用到的數據集的差異性,本文并不需要考慮到目標框重疊的情況,在實驗中,本文以原本的算法和刪除對模糊樣本處理的算法進行了對比,發現刪除模糊樣本的處理并不會影響整體的性能,為了減少計算量,本文對該處理進行了有效的刪減,見表1。
此外,本文從注意力機制CBAM、swish激活函數、多尺度特征融合3個部分來分析其有效性,見表2。

表1 模糊樣本處理前后對比

表2 有效性分析
由表2可知,在僅用FCOS算法對TT100K數據集進行檢測,所達到的F1-measure是76.4%,當我們在特征提取網絡中加入了注意力模塊CBAM和swish激活函數時,這時的F1-measure提高了2.3%,和ResNet-50網絡相比,帶有注意力的ResNet-50網絡可以有效提高檢測的精度;當我們在FPN中進行了多尺度特征融合時,這時的F1-measure和FCOS算法相比,提高了5.1%,顯著提高了檢測器的檢測性能;最后,經過這三部分的改進,最終的F1-measure達到了83.2%,和最初的FCOS算法相比,整整提高了6.8%。
為了驗證所提方法的有效性,本文將我們的方法和兩階段檢測算法Faster R-CNN、單階段檢測算法SSD和MSA_YOLOv3進行對比分析,見表3。本文的方法與兩階段經典算法Faster R-CNN相比,在速度和精度方面都達到了兩階段檢測算法的水平,與一階段算法相比,本文的檢測方法在小、中、大目標分別得到了提升,其中,小目標的F1-mea-sure 對比于近期所提出的MSA-YOLOv3算法提升了2.2%,驗證了本文的多尺度特征融合對小目標檢測的有效性。
最后,為了更直觀的觀察各個類別檢測的好壞,我們對本實驗所檢測的45類交通標志分別與其它方法進行對比分析,如圖7所示,具體數據見表4。

表3 不同尺寸的交通標志的檢測結果

圖7 不同方法的檢測結果對比

表4 TT100K數據集中每個類別的F1-measure對比

表4(續)
為了提高交通標志檢測的準確性和實時性,本文以提出的FCOS算法為基礎,設計出一個多尺度特征融合的單階段無錨檢測器,用來解決交通標志檢測出現的檢測目標小、自然環境干擾等問題。通過引入注意力模塊CABM來聚合有效特征,并在特征加強網絡中進行一個輕量級的多尺度特征融合,更加完整地保存了相關特征。大量的實驗結果表明了該方法對交通標志檢測的有效性,在檢測速度方面,本文算法優于兩階段檢測算法,在檢測精度方面,本文算法的檢測精度也不遜于兩階段算法,并且,和不同主流的檢測算法相比,本文的方法在此基礎上不僅檢測精度得到提高,而且在檢測速度方面也有提升,最重要的是,本文的算法對于小尺寸的交通標志檢測友好,因此,該算法對以后的自動駕駛研究中檢測道路交通標志方面的效率有一定的幫助。在未來的工作中,將力求尋找更輕量化的模型來提高檢測的精度和速度。