申 智,徐 麗,符祥遠
(長安大學,陜西 西安 710064)
隨著當今社會科技的蓬勃發(fā)展,無人車走進了大眾的視線。對于現(xiàn)在的無人車而言,人們不僅對自動駕駛交通標志檢測[1-4]的速度有著很高的要求,而且對于交通標志檢測的精確度要求也越來越高。有很多的交通事故是因為光線模糊導致交通標志看不清,這時的標志就不能起到預警和提醒的作用。因此保證在光線模糊場景下,交通標志檢測所用時間沒有太大增加的前提下,提高交通標志檢測的精確度是十分重要的,這樣可以大大減少交通事故發(fā)生的幾率,進一步保證車上司機和乘客的安全。
目前對于交通標志的檢測算法可以分為2類:單階段[5]檢測算法和雙階段檢測算法。雙階段檢測以Girshick等人[6]提出的R-CNN為代表,包括Fast R-CNN[7]、Faster R-CNN[8]、Mask R-CNN[9]和R-FCN[10]。單階段檢測以Redmon等人[11]提出的YOLO為代表,除此之外還有SSD[12]。它們最大的不同之處是R-CNN多了一步候選框生成階段,生成ROI(Region of Interest)。從深度學習使用于交通標志檢測開始,已經有了很長的一段時間,人們也在原有的基礎上做出了很多的改進。就拿最近兩三年來說,在交通標志檢測與識別方面有:劉戀等人[13]在設計CNN網絡時引入Inception結構的改進;Lee等人[14]提出了在構建CNN算法的基礎上加入估計交通標志的位置和邊界。
R-CNN因為要提取候選區(qū)域、特征與支持向量機(Support Vector Machine, SVM)進行目標的分類,盡管后續(xù)提出了改進方法提高了精確度和速度[15],但它的速度相對來說還是比較慢。YOLO卻恰恰相反,從YOLO v1開始盡管經歷了多次的優(yōu)化和進步[16-17],但依然是速度快而精確度不高。YOLO v5[18]是在2020年6月10日發(fā)布的,根據Roboflow的研究表明,YOLO v5的訓練非常迅速,在訓練速度上遠超YOLO v4,但是YOLO v5相對于YOLO v4的創(chuàng)新點很少,兩者性能接近,YOLO v5的平均精度值甚至低于YOLO v4,所以在某種程度上YOLO v4仍然是目標檢測的最佳框架。
為此,在YOLO v4[19]的基礎上,本文提出一種基于改進YOLO v4的交通標志檢測算法,在保證速度的同時提高檢測的精確度。
本文主要使用改進的K-means++對數(shù)據集進行聚類,并且對網絡結構做了優(yōu)化。除此以外,還對YOLO v4的損失函數(shù)進行改進,改進的損失函數(shù)用于訓練,以提高檢測精度。同時使用MSRCR算法對網上公開的BelgiumTS交通信號數(shù)據集中光線模糊下的圖片進行數(shù)據增強處理。將上述的方法結合在一起可以使最后的檢測圖片的精度大幅度提高。
2020年提出的YOLO v4算法是在YOLO v3算法的基礎上,融合了近些年來深度學習神經網絡中具有優(yōu)勢的算法模型的思想和訓練技巧,同時彌補了很多缺陷,實現(xiàn)了速度和檢測精度上的完美提升。
YOLO算法做目標檢測時,首先是將目標圖片劃分成S×S個格子,然后將矩陣送入深度神經網絡中,對每個格子是否存在目標、目標的邊框與類別進行預測,最后篩選出最合適的邊框,得到預測結果。在YOLO v3中采用的是Darknet53特征提取網絡,而在YOLO v4中,借鑒了跨階段局部網絡(CSPNet),對YOLO v3的特征提取網絡進行了改進,構成了YOLO v4的特征提取網絡CSPDarknet53。YOLO v4采用GSPDarknet特征提取網絡,并使用Mish激活函數(shù)、Dropblock正則化方式;加入空間金字塔池化層(Spatial Pyramid Pooling, SPP)和PANet,SPP可以解決圖片尺寸大小不一的問題,使得圖片矩陣以固定值輸出;對于檢測頭部分,YOLO v4繼續(xù)采用YOLO v3算法的檢測頭(YOLO-Head),最終構成了“CSPDarknet53+SPP-PANet+YOLO-Head”的模型結構。YOLO v4網絡結構如圖1所示。
圖1 YOLO v4網絡結構圖
在YOLO v4中,PANet通過對不同特征層的語義信息進行處理,可以處理不同尺寸的目標。由于檢測在光線模糊狀態(tài)下的交通標志可能會出現(xiàn)局部細節(jié)缺失的效果,針對這一問題,本文提出對PANet改進:將淺層和深層特征與原始特征層融合,形成一個大小為104×104的特征層。在原本有13×13、26×26、52×52這3個特征層的情況下,增加一個新的特征層會造成網絡結構中參數(shù)量增加,影響交通標志檢測的速度。為了降低增加特征層對檢測速度的影響,選擇去除PANet中的路徑增強結構。改進后的PANet便可以保證在提高交通標志檢測精度的同時不影響交通標志檢測的速度。
原始的YOLO v4先驗框是通過K-means算法聚類得到的。K-means[20-22]選取點所在的位置是隨機的,可能會出現(xiàn)的結果只是局部最優(yōu)但不是全局最優(yōu),而K-means++聚類算法是在原本的K-means算法基礎上實現(xiàn)了優(yōu)化[23],恰好彌補了局部最優(yōu)而不是全局最優(yōu)的不足。為了取得良好的訓練效果,本文對先驗框采用K-means++對交通標志數(shù)據集進行聚類分析。
傳統(tǒng)的K-means++聚類算法采用歐幾里得公式計算距離,先驗框比較大的情況下會出現(xiàn)很大的誤差,影響實驗結果。所以本文采用交通標志真實框和交通標志預測框的交并比(Intersection Over Union, IOU)的方式表示距離。
(1)
d=1-IOU
(2)
其中,d為距離,btrue、bpredict分別為交通標志真實框和交通標志預測框。IOU越大說明2個框的重合度越高,當IOU為1時說明2個框完全重合。
圖2 先驗框數(shù)量與IOU聯(lián)系圖
在實驗過程中本文選取改變先驗框數(shù)量來得到先驗框數(shù)量與平均IOU之間的關系。根據圖2的結果可以看出,隨著先驗框數(shù)量的增多,平均IOU數(shù)值也在不斷增大。考慮到網絡的計算量,本文選擇9個候選框。
本文對訓練集進行了MSRCR增強的處理,并且加入了色彩恢復因子,使得原來那些光線模糊下的圖片達到了一個比較好的效果,之后再對MSRCR算法處理過的圖片進行訓練。
一般地,MSRCR算法是在單尺度的情況下對多尺度濾波進行加權處理。
(3)
其中,Ii(x,y)表示的是通道圖像,F(xiàn)k表示中心環(huán)繞函數(shù),見公式(4):
(4)
其中ck表示色彩恢復因子。
在進行多尺度濾波結果加權的時候需要滿足下面公式:
(5)
其中ωk表示第k個尺度的權值,通常ωk值為1/k。
檢測圖片用MSRCR增強,如果有噪聲,圖片會失真,使最后得到的圖片質量大打折扣。針對這個問題,通過在實驗中加入色彩恢復因子來解決。在實驗中使用下面的方法:
RMSRCRi(x,y)=Ci(x,y)RMSRi(x,y)
(6)
f[I′i(x,y)]=klog[mI′i(x,y)]
其中,m代表受控制的非線性強度,k代表一個增益常量。
圖3~圖8是2組原始圖像和經過MSRCR處理過的圖像以及加入了色彩因子之后的圖片,可以看出,在加入了色彩恢復因子之后圖像的質量有了非常明顯的改善。
圖3 原始圖像1
圖4 MSRCR圖像1
圖5 加入色彩恢復因子的MSRCR圖像1
圖6 原始圖像2
圖7 MSRCR圖像2
圖8 加入色彩恢復因子的MSRCR圖像2
公式(1)也可能會出現(xiàn)圖9的情況。
圖9 框不相交的情況
3個框之間都沒有交集,A和B與C兩兩的IOU都是0,但從圖中可以明顯看出A和B之間的距離更近。這時距離d都是1,不能進行訓練。根據這種情況使用了DIOU,它的表達式如下:
(7)
其中,c表示預測框與真實框閉包的對角線數(shù)值,d表示從預測框的中心點到真實框中心點的距離。此時的邊界損失函數(shù)變成了如下公式:
d=1-DIOU
(8)
公式(8)中的DIOU將重疊率、邊框距離這些因素都考慮在了里面,可以成功解決IOU在訓練過程中可能會出現(xiàn)的發(fā)散問題。
(9)
如果預測框和真實框相交,則和原來的IOU是相同的,當不相交時,改進的損失函數(shù)精確度就會體現(xiàn)出它的優(yōu)越性。
本文具體的實驗配置如下:
電腦配置:操作系統(tǒng)為Windows,CPU為i5-9700,內存為8 GB,顯卡為GTX 1080Ti,硬盤為1 TB+256 GB。
環(huán)境配置:學習框架為完全由C語言編寫的輕量化學習框架Darknet,Python版本為3.7,CUDA為10.2,Visual Studio為2019版本,本次實驗選擇使用GPU來進行訓練,初始學習速率為0.001,權重衰減為0.0005,動量為0.9。
本文選取來自比利時交通標志數(shù)據集——BelgiumTS交通信號數(shù)據集(包含62種交通信號)中的交通標志圖片進行實驗。其中選取BelgiumTSC_Training文件中的1002張作為訓練集,并且對數(shù)據進行增廣處理,選取訓練集對應的交通信號類別在BelgiumTSC_Testing中的圖片作為測試集。這些圖片用軟件labelImg[24]來標注,具體標注過程為:在labelImg.exe中打開需要標注的圖片,點擊Create RectBox按鈕,將想要標注的交通標志框起來,再將對應的每一個類別的交通標志命名為合適的英文標簽名稱,點擊保存之后選擇下一張圖片繼續(xù)標注。為了保證數(shù)據標注的準確性,數(shù)據標注任務由2個人完成,每個人標注一半的圖片之后檢查另一個人標注的圖片,如果標注過程中出現(xiàn)了問題便做出及時的修改。labelImg標注圖片示例見圖10。
圖10 標注圖片示例
在訓練時,剛開始迭代的時候loss值為903.640015,在將近150次的時候loss值降到100以下,250次下降到1.385638,所以在繪制損失函數(shù)圖時選擇從第250之后開始繪圖。從圖11中可看出,在達到2000次的時候loss值趨于穩(wěn)定,在0.014上下徘徊,終止訓練。
圖11 損失函數(shù)圖
為了分析實驗結果,本文選取目標檢測中經常使用的平均精度均值(mean Average Precision, mAP)和每秒幀數(shù)(Frame Per Second, FPS)來衡量網絡的性能。計算公式如下:
(10)
FPS=frameNum/elapsedTime
(11)
其中,AP(Average Precision)為類別平均精度,frameNum為總幀數(shù),elapsedTime為所用的時間。
對比原本的YOLO v4檢測結果,從表1可以看出,使用了MSRCR算法進行數(shù)據增強之后精確度提高了0.58個百分點,在數(shù)據增強處理后,使用改進的YOLO v4算法的精度更是從91.37%提高到了93.23%。從表中前3組實驗的結果來看,F(xiàn)PS始終沒有太大的變化,并且改進后的YOLO v4與Faster R-CNN和SSD相比在mAP的數(shù)值上也有著巨大的優(yōu)勢??梢姼倪M的YOLO v4優(yōu)于原始的YOLO v4、Faster R-CNN和SSD。改進前和改進后的檢測結果對比可見圖12~圖17。
表1 不同網絡結構對比表
圖12 原始圖3使用YOLO v4的檢測結果
圖13 原始圖3使用MSRCR后的算法檢測結果
圖14 原始圖3使用改進后YOLO v4+MSRCR檢測結果
圖15 原始圖4使用YOLO v4的檢測結果
圖16 原始圖4使用MSRCR后的算法檢測結果
圖17 原始圖4使用改進后YOLO v4+MSRCR檢測結果
本文在原有的使用YOLO v4完成目標檢測的基礎上,在改進了K-means++聚類算法、PANet結構和損失函數(shù)的前提下,同時在訓練數(shù)據集之前使用了加入色彩恢復因子的MSRCR進行數(shù)據增強處理。在檢測BelgiumTS交通標志數(shù)據集光線模糊的圖片時,圖片檢測的平均精確度有了比較明顯的上升,說明了使用這種方法的有效性。因為BelgiumTS交通數(shù)據集中的交通標志圖片都是只有一個交通標志的圖片,所以對一張有多種交通標志的圖像的檢測是進一步要研究的方向,此外還可以對網絡結構方面作進一步的改進來提升交通標志檢測的效果。