林軼, 陳琳*, 王國鵬, 盛余洋, 孫立超
(1.長江大學計算機科學與技術學院, 荊州 434000; 2.三峽大學計算機與信息學院, 宜昌 443000)
近年來,隨著目標檢測技術的發(fā)展,交通標志的精準識別對高級輔助駕駛起著不可或缺的作用。而交通標志通常置于室外場景,在自然環(huán)境下受到雨淋、光照、老化等因素干擾,為確保到駕駛員的安全,在實際應用場景既要考慮檢測的速率,也要注重識別精度。
傳統(tǒng)目標檢測遵循手工設計特征并結合滑動窗口實現(xiàn)目標識別與定位,此方法準確度低、魯棒性差且無法實現(xiàn)實時檢測。在計算機視覺領域中,深度學習憑借卷積神經網絡逐步取代傳統(tǒng)手工設計,并在目標檢測、目標分類和目標分割等任務上有著良好的表現(xiàn)。目標檢測主要分為One-stage和Two-stage檢測算法,其中One-stage典型算法如SSD[1]、YOLO[2]、YOLOv2[3]、YOLOv3[4]等,直接回歸目標的分類與坐標位置,相比Two-stage有更快的檢測速度。Two-stage典型代表是R-CNN[5]、Fast R-CNN[6]、Faster R-CNN[7]等,通過利用區(qū)域生成網絡[8](region proposal network, RPN)對候選區(qū)進行區(qū)域推薦,相比One-stage有更高的檢測精度。
當前已有學者將目標檢測算法應用到交通標志識別中。宋青松等[9]提出一種聚類殘差單次多盒檢測算法(single shot multibox detector ,SSD),在德國交通標志數(shù)據(jù)集(german traffic sign detection benchmark ,GTSDB)上準確率達到89.7%,檢測速度僅為0.96 f/s。Song等[10]提出一種高效的卷積神經網絡,在TT100K數(shù)據(jù)集上精準度高于Fast R-CNN及Faster R-CNN近10%。Cao等[11]在LeNet-5卷積神經網絡模型基礎上,采用Gabor作為初始核,選擇Adam作為優(yōu)化算法,在GTSDB數(shù)據(jù)集上檢測精度達到99%。以上學者的方法具有高精度與通用性,但模型網絡復雜致使計算量大識別速度慢,無法滿足實時檢測要求。
針對YOLOv3檢測算法和一些卷積神經網絡檢測過程中,無法兼顧精度和速度的平衡,提出一種改進的S-YOLO算法。在實驗部分,將S-YOLO與YOLOv3以及其他檢測算法進行對比分析,S-YOLO實現(xiàn)了交通標志檢測的有效性,同時在實時場景下達到理想的檢測精度。
圖2 S-YOLO實現(xiàn)圖Fig.2 S-YOLO implementation diagram
YOLOv3為One-stage目標檢測算法,采用Darknet-53網絡作為主干特征提取網絡,替代了YOLOv2的Darknet-19,共有53個卷積層,整個結構無池化層和全連接層。該網絡由5個殘差塊構成,每個殘差塊由CBL(Conv, Batch Normalization) LeakyRelu和殘差組件組成,如圖1(a)所示。其中,CBL是Darknet-53網絡中最小組件,由卷積層、批歸一化層和Leaky_relu激活層組成,如圖1(b)所示。通過引入ResNet[12]殘差結構,避免訓練過程造成梯度爆炸和消失等問題,降低深層網絡訓練難度。
圖1 Darknet-53組件結構Fig.1 Darknet-53 component structure
YOLOv3在通用場景下已取得良好的檢測效果,但針對交通標志識的識別還存在一些不足:在CBL組件上多了一些層的計算,導致占用更多的顯存,降低檢測速度;初始先驗框為COCO數(shù)據(jù)集聚類的結果,不適用于交通標志;網絡結構對于小目標的交通標志檢測效果不理想;使用交并比(intersection over union, IoU)作為損失函數(shù),在一些特殊條件下會出現(xiàn)異常值。針對上述問題,提出一種改進的S-YOLO算法,主要改進思想:合并批歸一化層[13](batch normalization,BN)到卷積層,減少一些層的計算,加快模型前向推理;使用二分K-means算法,對交通標志重新聚類確定初始先驗框,實現(xiàn)精準定位;添加空間金字塔池化(spatial pyramid pooling,SPP)模塊[14],有效地提取出交通標志的深度特征,提升模型檢測精度;采用CIoU[15]損失函數(shù),通過最小化預測框與真實框的中心距離并增加長寬比的懲罰,加快模型收斂,提升模型檢測精度。
S-YOLO算法實現(xiàn)整體流程圖如圖2所示,將圖像輸入Darknet-53主干網絡進行卷積等操作生成三種特征層,對第三個特征層進行空間金字塔池化操作,再進行上采樣后和第二個特征層進行張量拼接,同理,將第二個特征層進行上采樣后再與第三個特征層進行張量拼接,最后進行卷積等操作生成三種不同尺寸的特征圖。
圖3 合并BN層到Conv層Fig.3 Merge BN layer to Conv layer
YOLOv3引入了批歸一化BN層,位于卷積層后,在訓練階段加快網絡收斂,解決了梯度爆炸和消失等問題,增強網絡健壯性。將BN層參數(shù)合并到卷積層,減少計算量以達到模型前向推理速度的提升。如圖3所示,圖像經過卷積再到BN層進行歸一化。計算過程為
(1)
xconv=xiwi+b
(2)
式中:xbn為BN計算結果;β為偏置;γ為縮放因子;μ為均值;為正則化參數(shù),σ2為方差;xconv為卷積后結果;xi為輸入特征圖;wi為權重參數(shù)。
合并BN層到卷積層,將式(2)代入式(1)中得到新的卷積層為
(3)
合并后的權值參數(shù)為
(4)
偏置為
(5)
最終得到
xbn=xiwnew+bnew
(6)
BN層合并于卷積層后,新的卷積層參數(shù)只有權值wnew和偏置bnew,且少了BN層的計算,從而降低內存的使用,加快模型推理速度。
引入空間金字塔池化模塊,將特征圖的局部與全局特征融合,豐富特征圖的表達能力。融合過程如圖4所示,原始圖像經過Darknet-53后得到13×13×256特征圖,將該特征圖輸入SPP模塊后,進行4個分支操作,從輸入直接到輸出,分別在3種大小的池化核進行下采樣,生成3個局部特征圖,再將4個特征圖進行張量拼接,得到13×13×1 024的特征圖,增加了特征圖的深度,豐富了交通標志的多尺度信息。
改進的S-YOLO網絡結構如圖5所示,Darknet-53網絡對輸入的圖像進行下采樣等操作,最終獲得3種尺寸特征圖,分別在3組特征圖的基礎上進行目標預測。網絡實現(xiàn)的具體過程如下:首先將13×13×1 024特征層進行5次卷積后得到第一個中間層,再將該層進行分類和回歸預測,得到預測層13×13×75;同時,將第一個中間層進行卷積和上采樣,與Darknet-53生成的26×26×512特征層進行Concat操作,即特征金字塔搭建過程,得到第二個中間層,再將該層進行分類和預測,得到預測層26×26×75;同理,將中間層進行卷積和上采樣,與Darknet-53生成的52×52×256特征層進行Concat操作,得到第三個中間層,再將該層進行分類和預測操作,最終得到預測層52×52×75。通過上述操作,得到3組不同尺度的預測層,能有效地提取到小目標的特征信息。
圖4 張量拼接Fig.4 Tensor splicing
圖5 S-YOLO網絡結構Fig.5 The network structure of S-YOLO
采用二分K-means對數(shù)據(jù)集進行聚類,相較于K-means,該算法減少相似度計算量以提高執(zhí)行速度,并克服局部收斂的不足。其距離度量公式為
d(box,centroid)=1-IoU(box,centroid)
(7)
式(7)中:box表示先驗框;centroid表示先驗框的中心,IoU為兩個先驗框的交集與并集的比。
圖6為使用二分K-means聚類得到先驗框個數(shù)K與IoU關系。從圖6可知,隨著K的增大,IoU值逐漸遞增,當K=9時,IoU增長趨于平穩(wěn),綜合交通標志檢測精度與速率,該點為最佳初始框框個數(shù)。最終得到的9個先驗框為(9,15)(4,21)(19,28)(24,36)(31,43)(39,52)(50,69)(67,89)(91,116),分別對應13×13、26×26、52×52這三種尺度特征層。
圖6 先驗框個數(shù)K與IoU關系Fig.6 The relationship between K and IoU
IoU作為評價模型性能的一個重要指標,通過計算預測框與真實框交并比的值來衡量邊界框的相似度。計算公式為
(8)
式(8)中:area(A)為預測框的面積;area(B)為真實框的面積。常見的計算IoU損失函數(shù)為
(9)
該損失函數(shù)反映出邊界框的重合程度且具有尺度不變性,但存在兩個缺陷:當預測框與真實框不相交時,如圖7所示,IoU=0,LIoU=1,此時LossIoU不可導,無法反映邊界框之間距離;當預測框與真實框的尺度相同且IoU也相同時,LossIoU無法區(qū)分兩者相交的情況。
圖7 預測框與真實框不相交Fig.7 Prediction box don’t intersect the ground-truth box
為彌補IoU損失函數(shù)的不足,采用CIoU作為目標框的坐標回歸損失,其計算公式為
(10)
(11)
(12)
圖8 CIoU實現(xiàn)圖Fig.8 CIoU implementation diagram
精選部分CTSDB[16]數(shù)據(jù)集并網絡爬取百度圖庫,為了提高數(shù)據(jù)集的泛化性,對樣本進行旋轉、壓縮、添加噪聲等圖像增強方式,最終獲得數(shù)據(jù)集6 218張,訓練集與驗證集按照3∶1分配,選取數(shù)量最多的4類交通標志作為檢測對象,分別為限速(speedlimit)、禁止(prohibitory)、指示(mandatory)和行人(pedestriancrossing)。
本實驗的軟硬件環(huán)境配置如表1所示。在網絡訓練階段,使用原始YOLOv3提供的參數(shù)作為初始化參數(shù),選用遷移式學習方法,通過YOLOv3內置參數(shù)進行迭代調整,實驗參數(shù)如表2所示。
表1 實驗環(huán)境配置Table 1 Experimental environment configuration
表2 S-YOLO參數(shù)配置Table 2 S-YOLO parameter configuration
為了對不同模型進行性能評估,采用平均準確率(mean average precision, mAP)、準確率P(precision)、召回率R(recall)、F1值及檢測速度每秒幀率(frame per sceond, FPS)作為衡量模型性能的指標,計算公式分別為
(13)
(14)
(15)
式中:TP為真正例;FP為假正例;FN假負例;m為類別;AP為類別平均精度。
3.3.1 消融實驗
為驗證所提方法的有效性,在重制的CTSDB交通標志數(shù)據(jù)集上進行消融實驗,以mAP、R、FPS和F1四項作為算法的評價指標,通過替換或組合模塊來對模型進行訓練,再對訓練完成的權重文件進行測試,驗證各個模塊對網絡性能的提升,如表3所示。從表3可知,模型A相對Base模型,在不影響檢測精度前提下僅提升了識別速度,表明合并BN層到卷積層只提升了模型的識別速度,但不影響檢測精度;對比模型A與模型B、C、D可知,添加二分K-means、SPP、CIoU模塊相對模型性能都有一定的提升,在mAP上分別提升了0.93%、1.3%、2.21%,而識別速度幾乎一致;對比模型A與模型E、F、G可知,將每兩個模塊進行結合模型性依舊提升,在mAP上分別提升了2.18%、2.26%、3.51%;最后將四個模塊相結合得到S-YOLO模型,在mAP上提升了4.26%,速度提升了15.19%。消融結果可知,合并BN層到卷積層、添加二分K-means、SPP、CIoU模塊對于網絡的性能均有一定的提升。
表3 重制的CTSDB數(shù)據(jù)集上消融實驗結果Table 3 Ablation experimental results on the reproduced CTSDB dataset
3.3.2 其他算法比較
為更進一步驗證所提算法的檢測性能,將Tiny-YOLOv3、YOLOv3、SSD ReNet50[17]、Faster R-CNN[9]以及YOLOv4[18]與S-YOLO算法進行對比,以mAP和FPS作為評價指標,實驗結果如表4所示。數(shù)據(jù)表明,S-YOLO的mAP和FPS分別達到94.33%和42.41 f/s,相對Tiny-YOLOv3和YOLOv3,在mAP上分別提升了5.36%和4.26%,雖然FPS不及Tiny-YOLOv3,但其檢測精度明顯高于Tiny-YOLOv3;對比Faster R-CNN算法,雖然在精度上略低,但其檢測速率遠高于Faster R-CNN;SSD算法在mAP和FPS兩項指標上分別為89.7%和0.08 f/s,均不及S-YOLO算法;對于當前的YOLOv4算法,在mAP上高于本人提出的算法1.67%,但識別速度為26 f/s。
對兼顧精度與速度的檢測環(huán)境而言,所提的S-YOLO算法在精度和速度兼顧的條件下有更好的檢測性能,達到一個實時檢測效果。
表4 其他模型對比實驗Table 4 Comparative experiment of other models
3.3.3 權重測試
使用Loss-IoU和Loss-CIoU作為回歸損失訓練得到的權重文件,以IoU和CIoU作為評價度量進行比較,將閾值(threshold)設置為0.75,分別在IoU和CIoU下進行驗證,統(tǒng)計結果見表5,Promote為提升度。數(shù)據(jù)表明,Loss-CIoU在測試數(shù)據(jù)集AP值較Loss-IoU分別提高了7.80%,并且Loss-CIoU的平均IoU閾值(AP)較Loss-IoU提高了3.40%,表明采用Loss-CIoU作為損失函數(shù)的模型性能得到優(yōu)化。
表5 不同損失函數(shù)性能比較Table 5 Performance comparison of different loss functions
圖9 S-YOLO檢測效果Fig.9 S-YOLO detection visualization
圖9為S-YOLO在不同環(huán)境場景下對交通標志的檢測結果。由圖可知,在目標密集、雨天、暗光等復雜場景下,S-YOLO具有良好的識別效果,并能精準地檢測出相應的交通標志。
為進一步驗證所提模型的泛化性,將原始YOLOv3與改進的S-YOLO在TT100K交通標志數(shù)據(jù)集中進行對比實驗。如圖10所示,圖(a1)存在漏檢,未能識別出2個較小尺寸的交通標志,但圖(b1)能夠檢測出這2個較小的目標;圖(a2)未能識別1個較小尺寸目標,而圖(b2)正確檢測出所有目標。實驗表明,改進的S-YOLO能夠有效地降低目標檢測的漏檢率,在交通標志檢測上具有良好的泛化作用。
圖10 S-YOLO與YOLOv3對比實驗Fig.10 Comparative experiment of S-YOLO and YOLOv3
針對原始YOLOv3算法在交通標志識別場景下存在精度低、速度慢問題,提出一種改進的S-YOLO目標檢測算法。首先將CBL組件中的BN層合并到卷積層來提高模型前向推理速度,然后引入SPP模塊來更有效獲取圖像特征,再使用二分K-means聚類算法確定適合交通標志的先驗框使模型的收斂性更好,最后引入CIoU回歸損失函數(shù)來提高模型檢測精度。實驗結果表明,改進的S-YOLO算法計算量少、精度高、泛化性強和實時性檢測,并且mAP與召回率分別達到了94.33%和94%,較原始YOLOv3提升了4.26%和5%,速度達到了42.41 f/s,較YOLOv3提升了15.19%,整體性能得到一定的提升。
同時,本文所提算法還有諸多方面有待改進,在識別小目標效果上還未達到預期的結果,檢測速度上也還有提升的空間。在實時檢測情景下,如何更進一步地提高模型的檢測精度,將是下一步的研究方向。