蔡 軍,邱會然,譚 靜,楊平安
(重慶郵電大學 自動化學院,重慶 400065)
交通標志檢測與識別技術是自動駕駛系統(tǒng)的重點研究方向之一,對保障交通順暢和駕駛安全起著至關重要的作用。盡管交通標志識別已經(jīng)取得了一些可喜的成果,但在實際交通場景中快速有效地檢測出小型交通標志仍存在許多問題:① 交通標志距離較遠所占圖像的比例較小,特征不明顯[1];② 受環(huán)境影響較大[2]。
目前針對交通標志檢測的方法研究主要分為兩大類:基于傳統(tǒng)手工特征的方法和基于深度學習的方法?;趥鹘y(tǒng)手工特征的方法主要有基于顏色[3]特征的方法、基于形狀[4]特征的方法以及多特征融合[5]的方法。傳統(tǒng)的方法實時性好、魯棒性強,但容易受到環(huán)境、光照的影響,并且人為設計的特征不具備良好的表達能力,對于小型交通標志中的細微差別沒有足夠的前述特征來表示,使得傳統(tǒng)算法往往不能滿足實際需要。因此,隨著計算機視覺的快速發(fā)展,基于深度學習的交通標志檢測方法應運而生。
基于深度學習的交通標志檢測方法可分為兩類:一類是Two-Stage檢測方法,代表算法有Faster-RCNN[6-7]、SNIPER[8]、DetNet[9]等。此類算法使用候選區(qū)域網(wǎng)絡在特征層上生成候選框,再利用候選框中的卷積特征信息進行分類和目標框定位,雖然精度相對較高,但由于計算量過大,速度較慢;另一類是One-Stage檢測方法,代表算法有SSD[10-11]、YOLO[12-13]、FCOS[14]等。此類算法將目標框的定位回歸和分類回歸同時進行,最后由卷積神經(jīng)網(wǎng)絡在輸出層上一次性完成預測,雖然檢測速度較快,但因為少了一次目標框的回歸,對交通標志的定位準確度較差。
基于以上研究,本文針對自然場景下交通標志檢測漏檢和虛警問題,提出了一種提高檢測精度的多尺度上下文融合的網(wǎng)絡結構,本文算法以YOLOv3算法框架為基礎進行改進。改進思路如下:① 將特征金字塔[15]的深層特征信息融合進更淺層特征層,更好地利用目標的細節(jié)信息;② 通過上下文模塊(Global Context Block,GCB)[16]重新分配交通標志特征圖的上下文信息權重,使注意力特征映射轉移到更深層的網(wǎng)絡中,增強目標特征信息的表達能力;③ 為了降低圖像背景與目標比例嚴重失衡對檢測精度所造成的影響,使用融合預測目標置信度的網(wǎng)絡損失函數(shù)進行端到端的訓練,改善交通標志邊界框的回歸置信度,避免算法由于梯度消失而出現(xiàn)學習速率下降的問題。
YOLOv3借鑒Resnet的殘差結構思想,設計了Darknet53作為特征提取的骨干網(wǎng)絡,如圖1所示。
圖1 YOLOv3網(wǎng)絡結構Fig.1 Schematic diagram of YOLOv3 network structure
圖1中DBL表示為卷積層、Batch Normalization(BN)層和激活層的組合;Res為殘差結構,殘差結構的數(shù)值表示殘差個數(shù);上采樣使用2倍上采樣的方式擴大特征尺寸;Concat操作為通道的拼接。
Darknet53通過多個卷積疊加形成深層次卷積層。在不同卷積層上分別采用1×,2×,8×,8×,4×多個類的殘差結構,保證Darknet53在較深的情況下,仍能快速收斂。同時采用多尺度預測的方法,在3個不同尺度的特征圖上使用3個不同大小的目標檢測框進行識別。
YOLOv3算法在目標識別時,各個卷積層輸出的特征圖所包含的信息不同,淺層特征圖包含大量目標紋理信息和邊界信息,如圖2所示。隨著網(wǎng)絡的加深,特征圖所包含的語義信息增多,但細節(jié)信息減少,即越淺層的特征圖所包含的目標輪廓、形狀等表觀信息越多;越深層的特征圖所包含的語義信息越多。因此可以將淺層的細節(jié)信息與深層的高級語義信息結合,提升小型交通標志的檢測精度。
(a) Res1特征圖
YOLOv3損失函數(shù)(Loss)分為3部分:定位損失(Lloc)、置信度損失(Lconf)和分類損失(Lcls),其中定位損失采用平方差損失函數(shù)計算真實框和預測框之間的誤差;置信度損失和分類損失采用交叉熵損失函數(shù)計算分類正確的概率,具體公式如下:
(wt-wp)2+(ht-hp)2],
(1)
(2)
ln(1-pp)],
(3)
Loss=Lloc+Lconf+Lcls,
(4)
在YOLOv3網(wǎng)絡中,小尺度預測的輸出尺度為13×13,以TT100K數(shù)據(jù)集中的2048 pixel×2048 pixel的圖片為例,當圖像被下采樣至13×13時,圖像中尺寸小于158×158的目標被壓縮至小于一個像素,而數(shù)據(jù)集中的大部分交通標志小于158×158,因此,YOLOv3網(wǎng)絡中的小尺度預測對交通標志檢測的意義不明顯。
基于上述原因,為了充分利用網(wǎng)絡中淺層特征包含的細節(jié)特征信息,將特征金字塔結構中尺度為13×13的預測特征層去除,使用Darknet-53中第二次下采樣的特征圖與第三尺度上采樣的融合特征圖堆疊融合,充分還原淺層特征圖的細節(jié)特征信息,得到具有豐富特征信息的高分辨率融合特征圖,輸入到尺度為104×104檢測層中進行預測,有助于提高檢測的精確度,改進特征金字塔結構如圖3所示。
圖3 改進特征金字塔結構Fig.3 Improved feature pyramid structure diagram
圖3中,通過卷積核大小為1×1的卷積操作將第三尺度256的卷積深度降低為128,以保證與第二次下采樣的深度對齊,然后設定空間上采樣因子為2,完成52×52深層特征往104×104淺層特征的分辨率特征映射。最后通過融合堆疊的方法將上采樣映射與第二次下采樣映射在深度方向拼接,由于要減少上采樣映射的堆疊影響,在拼接后添加了4個1×1的卷積和3個3×3的卷積來生成最終特征圖。
GCnet是繼NLnet[17]和SEnet[18]后的又一注意力機制結構,即能像NLnet一樣有效地對全局上下文建模,又能夠像SEnet一樣輕量。GCnet通過學習的方式獲取特征空間和通道的重要程度,根據(jù)重要程度分配不同的權重,使有用的特征權重系數(shù)大,無效或效果較小的特征權重系數(shù)小,提升網(wǎng)絡在復雜環(huán)境中的小目標檢測能力,GCnet模塊的結構如圖4所示。
圖4 上下文模塊結構Fig.4 Global context module structure
圖4中,C×H×W分別表示通道、輸入特征的高度和寬度;Conv表示卷積層;LN表示歸一化層;ReLU表示修正線性激活函數(shù)。
在序列變換中,一組映射到輸出的特征通過注意力機制的全局依賴性連接到輸入序列。當注意機制用于圖像識別時,注意力機制模塊處理的信息被包含在一個序列式中:
x=(x1,x2,…,xn),xn∈RD,
(5)
式中,n為特征向量個數(shù);D為維度。
上下文模塊如下:
(6)
Y=wv2ReLU(LN(wv1F)),
(7)
Zi=x+Y,
(8)
式中,F(xiàn)為Softmax函數(shù)產(chǎn)生的全局注意力權值;Y為瓶頸變換結果;Np表示輸入特征映射的維數(shù)。為了進一步突出空間信息,在不考慮其他通道信息的情況下,壓縮全局注意力池的通道維數(shù)。GCB采用1×1卷積wk和Softmax函數(shù)來生成注意權值,獲得全局上下文特征??臻g中每個像素點的重要性被視為一個概率,相應全局注意力特征圖的每個權重就是空間加權的概率。為了確保每個預測的概率之和等于1,使用Softmax函數(shù)確保重要的信息權值沒有超出范圍。
在瓶頸變換中,增加了雙卷積來提高通道的注意力性能。文本建模后,分別由卷積層wv1、歸一化 (LN)層、修正線性單元(ReLU)和最后的卷積層wv2處理得到注意力特征圖。wv1和wv2是2個1×1卷積層,在瓶頸變換中輸入特征映射大小為1×1,通道數(shù)量為rC。C表示輸入特征映射的通道,r表示維數(shù)的約簡比,其中r=1/4。在卷積層之間插入ReLU層表示其非線性。由于雙卷積使優(yōu)化更加困難,為了簡化網(wǎng)絡,在修正線性單元前面加入LN層,便于泛化。
當GCB的輸入特征圖非常大時,Softmax函數(shù)計算后的張量(Batchsize,C,H×W)與原始的輸入特征相乘會消耗大量的內存和計算量,不能有效地處理大量的輸入特征。為了避免由于輸入的特征圖過多而造成的計算冗余,GCB被放置在特征提取網(wǎng)絡和改進特征金字塔網(wǎng)絡之間,而不是嵌入在骨干提取網(wǎng)絡中,改進后的網(wǎng)絡結構如圖5所示。
圖5 改進后的YOLOv3_C網(wǎng)絡結構簡圖Fig.5 Improved schematic diagram of YOLOv3_C network structure
在實際交通環(huán)境中,由于交通標志物理尺寸較小,并且大部分樣本中最多出現(xiàn)5個交通標志,背景與目標所占圖像比例嚴重失衡,應用YOLOv3檢測器檢測時,大部分邊界框里不含有目標,使這些沒有目標的邊界框的置信度差距比較大,目標損失淹沒于背景的損失中,從而造成誤檢。為了避免背景損失值對目標損失值的影響,本文在YOLOv3損失函數(shù)上進行改進,將目標預測置信度cp納入背景損失計算的一部分,同時將位置損失計算的平方差損失函數(shù)改為交叉熵損失函數(shù),防止出現(xiàn)由于梯度彌散而導致的學習速率下降,加快訓練速度。改進后的位置損失函數(shù)和置信度損失函數(shù)計算如下:
ln(1-xp)][ytln(yp)+(1-yt)×
ln(1-yp)]+(wt-wp)2+(ht-hp)2,
(9)
(10)
本文使用中國交通標志數(shù)據(jù)集TT100K[19],該數(shù)據(jù)集提供100 000張2 048 pixel×2 048 pixel大小的圖像,其中30 000個交通標志實例為小目標,且涵蓋了多種不同條件下的交通標志。相比于其他交通標志數(shù)據(jù)集,TT100K的數(shù)據(jù)更豐富,包含的交通標志更小,檢測難度更大。本文所檢測的交通標志分為75類,相應標志圖像和類別名稱如圖6所示。
圖6 75類交通標志圖像以及相應類別名稱Fig.6 Images of 75 classes of traffic signs and corresponding classification names
刪除數(shù)據(jù)集中無標注文件的圖片,剩下6 105張圖片用于訓練,3 070張圖片用于檢測。對用于訓練的6 105張圖片類別進行分析,發(fā)現(xiàn)其中目標類別的樣本數(shù)分布十分不均,因此本文使用添加高斯噪聲、提高亮度、降低亮度、改變對比度、改變色度及改變銳度等6種方法進行數(shù)據(jù)擴增,擴增后的數(shù)據(jù)集包含1 5311張圖片,其中每個目標的樣本數(shù)不少于100個,訓練集和測試集覆蓋了所有需要檢測的標志類別,且圖像數(shù)據(jù)互不包含。實驗平臺為Intel酷睿i5-10400F處理器,16 GB內存,操作系統(tǒng)為Windows10,GPU為NVIDIA GeForce RTX2070,顯存8 GB。
為了驗證本文提出的交通標志檢測算法的正確性和有效性,選用當前比較流行的幾類算法與加入不同改進方法的改進算法進行對比實驗,其中包含三類一階段算法YOLOv3、YOLOv4、SSD,一類二階段算法Faster-RCNN,添加了GCB模塊的YOLOv3_A和添加了多尺度融合的YOLOv3_B,以及同時添加GCB模塊、多尺度融合和改進了損失函數(shù)的YOLOv3_C。實驗采用PyTorch深度學習框架搭建模型,在訓練圖像輸入前,對訓練數(shù)據(jù)進行數(shù)據(jù)增強,如圖像翻轉、扭曲、旋轉等。在訓練時,使用遷移學習的方法加速訓練,使用在Imagenet數(shù)據(jù)集中訓練好的特征提取層權重導入模型。凍結特征提取層以外的權重,訓練特征提取層網(wǎng)絡。在迭代50次后解除凍結,并繼續(xù)訓練模型中所有層,直至訓練損失不再變換時停止訓練。訓練中超參數(shù)的詳細配置如表1所示。
表1 超參數(shù)配置
本文中算法以平均精確度(mAP)和每秒檢測幀數(shù)作為評價指標。精確度(Precision)為當前類別正確檢測出的交通標志數(shù)占類別所有樣本數(shù)的百分比,見式(11);召回率(Recall)為正確檢測為當前類別的交通標志數(shù)占全部檢測為當前類別的交通標志數(shù)的百分比,見式(12)。根據(jù)每個類別檢測結果繪制精確度和召回率曲線,曲線下面積就是當前類別的總精確度(AP),mAP等于所有類別AP的均值,見式(13):
(11)
(12)
(13)
式中,TP,F(xiàn)P,F(xiàn)N分別代表正確識別的正樣本個數(shù)、錯誤識別的正樣本個數(shù)和錯誤識別的負樣本個數(shù);m為類別數(shù)量。
7種算法的實驗結果,如表2所示。
表2 不同算法的檢測精度對比
由表2可以看出,與原版YOLOv3在數(shù)據(jù)集上的檢測結果相比,采用YOLOv3與GCB融合的YOLOv3_A算法,在每秒傳輸幀數(shù)變化不大的情況下可以將交通標志的檢測結果提升0.98%,GCB對于交通小標志重要特征信息的提取有一定提升;采用YOLOv3與多尺度融合的YOLOv3_B算法檢測精度提升了6.59%,這表明更大尺度的預測可以更好地利用圖像中交通標志的細節(jié)信息,從而更精準地檢測出小型交通標志。二階段網(wǎng)絡Faster-RCNN取得了43.81%的mAP,由于將物體識別和定位分為 兩步,導致其檢測速度較慢。一階段網(wǎng)絡SSD和YOLOv4分別取得了18.97%和47.93%的mAP,受限于輸入尺寸,SSD算法對于TT100K中交通小目標的檢測效果較差,但檢測速度快;YOLOv4算法雖然采用了CSPDarknet53和SPP等一系列新結構,但YOLOv4主要針對中大型目標的檢測,對于交通標志中小目標檢測的提升并不多;添加了多尺度融合、GCB和改進了損失函數(shù)的YOLOv3_C模型的mAP值達到了56.93%,效果是7個網(wǎng)絡中最好的,雖然GCB模塊的加入導致顯存增加,使YOLOv3_C模型的每秒傳輸幀數(shù)相比YOLOv3網(wǎng)絡下降了5.5 幀/秒,但43.8 幀/秒的檢測速度仍能滿足實時檢測的要求。
YOLOv3與YOLOv3_C檢測效果對比如圖7所示。
(a) YOLOv3
由圖7可以看出,改進后的算法能夠很好地框選不同尺寸的目標,并且對目標的分類也較為準確。圖7中第一行第二幅圖中,i5目標大小為15 pixel×14 pixel,YOLOv3算法漏檢了該目標,而YOLOv3_C算法順利檢測到了該目標,并準確識別。在圖7中的第二行,由于光線受到樹木的遮擋,交通標志特征不明顯,YOLOv3算法只檢測到其中一個交通標志,而YOLOv3_C算法沒有漏檢。圖7中第三行第二幅圖中,樹木遮擋了交通標志的小部分,YOLOv3算法漏檢了該目標,而YOLOv3_C算法較為準確地檢測到了該目標,同時對其他較小交通標志的檢測也較為準確。由此可見,改進后的YOLOv3_C算法較YOLOv3算法檢測更準確,對小型交通標志、遮擋標志和受環(huán)境影響的交通標志的檢測效果更好。
分析YOLOv3算法的交通標志檢測網(wǎng)絡發(fā)現(xiàn),隨著網(wǎng)絡深度加深,小型交通標志的細節(jié)信息丟失較多,因此本文提出在YOLOv3網(wǎng)絡的檢測分支上引入多尺度融合和上下文融合2種方法改善網(wǎng)絡對小型交通標志細節(jié)的關注程度,同時改進損失函數(shù),加快訓練速度。通過對7組實驗數(shù)據(jù)的定量分析和對檢測效果圖的定性分析,證明了本文算法能夠一定程度上改善交通標志檢測的信息丟失問題,從而提高精確度。由于檢測的類別較多,許多類別信息的完整性較低,下一步將繼續(xù)增大數(shù)據(jù)集,優(yōu)化網(wǎng)絡,權衡精確度和檢測速度2個指標,找到平衡速度和精確度的最優(yōu)模型。