胡鵬,黃輝,王瓊瑤,鄒媛媛,蔡慶榮
(五邑大學(xué) 智能制造學(xué)部,廣東 江門 529020)
道路交通標(biāo)志的檢測與識別[1]是自動駕駛領(lǐng)域一個非常重要的研究分支.然而,在實際行駛過程中,同一個視覺鏡頭下會出現(xiàn)多個不同種類的交通標(biāo)志,而且交通標(biāo)志圖像還會出現(xiàn)順光、逆光、遮擋和褪色等各種實際問題,這些因素都會在不同程度上影響交通標(biāo)志的檢測效果.因此,對交通標(biāo)志進行準確、高效和穩(wěn)定的檢測與識別是一個具有很高挑戰(zhàn)性的實景目標(biāo)檢測任務(wù).
自LeNet[2]在1998年被提出以來,卷積神經(jīng)網(wǎng)絡(luò)(CNN)迅速衍生出基于深度學(xué)習(xí)的兩階經(jīng)典檢測器RCNN(Region-Convolutional Neural Networks)[3]系列算法、單階多層檢測器SSD(Single Shot Multibox Detector)[4]系列算法和單階經(jīng)典檢測器YOLO(You Only Look Once)[5]系列算法,這3種系列算法在目標(biāo)檢測方面都各有優(yōu)勢.SSD系列算法準確率高,但檢測速度相對較慢.YOLO系列算法則是以檢測速度快著稱,其中的YOLOv3檢測算法[6]通過多尺度預(yù)測,提高了算法對常規(guī)場景下的小目標(biāo)的檢測能力,因此 YOLOv3的快速檢測識別能力正是自動駕駛領(lǐng)域所需要的,但由于其定位準確度仍存在不足,召回率相對偏低,尤其是對于遮擋和擁擠重疊這些較難處理的情況,檢測精度仍然存在提升空間.因此,本文選擇YOLOv3算法作為基礎(chǔ)算法,針對小像素交通標(biāo)志圖像的識別問題,提出一種改進的 YOLOv3算法,以滿足自動駕駛對道路交通標(biāo)志的檢測精度和速度的要求.
本文所識別的圖片來自車內(nèi)視角拍攝,每張圖像的分辨率為2 560× 1 440 px,圖像中的交通標(biāo)志分辨率在90×90 px之內(nèi),均為小像素交通標(biāo)志圖像.基于此,本文提出一種多尺度檢測模塊,如圖1所示.圖1中,DBL是YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)中的最小組件,由卷積層、BN層和卷積函數(shù)Leaky relu 3部分組成,res unit代表殘差結(jié)構(gòu),resn結(jié)構(gòu)中的n代表殘差結(jié)構(gòu)的個數(shù).
圖1 改進的YOLOv3結(jié)構(gòu)圖
與原YOLOv3結(jié)構(gòu)相似的是,本文算法通過將高分辨率的淺層特征與高語義信息的深層特征融合,在3個不同尺度的特征上檢測物體.不同的是,YOLOv3采用了13×13,26×26,52×52 3個尺度的特征融合,考慮到圖像中的遠距離交通標(biāo)志的分辨率一般不會出現(xiàn)超過120×120 px,故在原結(jié)構(gòu)上去掉了13×13這個尺度檢測層,并在構(gòu)建融合層時,通過對深層特征圖進行上采樣[7],將特征圖放大到和淺層特征圖相同的尺寸,然后進行張量拼接(Concat)操作,構(gòu)建了一個104×104的尺度檢測層.這樣設(shè)計的目的是為了加強對小像素交通標(biāo)志的檢測能力,通過去除冗余的結(jié)構(gòu),以此來減少整個網(wǎng)絡(luò)模型的計算量,提高訓(xùn)練效率.
目前大部分的目標(biāo)檢測算法都會用 NMS算法進行最后處理,這種算法簡單有效,但缺陷也很明顯,就是通過算法保留得分最高的預(yù)測框,將其他得分高于給定閾值的預(yù)測框強制去掉,當(dāng)畫面中出現(xiàn)的交通標(biāo)志相對密集時,原本屬于兩個不同交通標(biāo)志的預(yù)測框中得分偏低的預(yù)測框便可能會被強制篩選掉,這樣就會導(dǎo)致算法的召回率下降.
本文用到的Softer-NMS是在Fast-RCNN[8]網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上添加了一個標(biāo)準差的預(yù)測分支,形成了邊框的高斯分布,最終可以獲得KL(Kullback-Leibler)散度的預(yù)測框回歸損失函數(shù)的損失值.主要計算過程如下:
其中,Pθ(x)為預(yù)測框的高斯分布,PD(x)是真實框的狄克拉分布,xe代表預(yù)測的邊框的位置期望,xg是真實邊框的位置,σ代表標(biāo)準差,L ossreg是以KL散度作為邊框回歸的損失函數(shù).當(dāng)σ值越趨近于0時,表明預(yù)測框與真實框越接近,說明網(wǎng)絡(luò)對當(dāng)前預(yù)測的邊框位置期望持有很高的置信度,可以進行精確定位.
在訓(xùn)練深度網(wǎng)絡(luò)模型時,BN層對解決反向傳播[9]中的梯度消失和梯度爆炸起到了很明顯的效果,而且可以加速網(wǎng)絡(luò)模型的收斂,并且能夠控制過擬合,一般位于卷積層之后.但是在網(wǎng)絡(luò)前向測試時,BN層的存在不可避免地會增加模型的計算量,從而影響模型的性能,還會占用更多的內(nèi)存及顯存空間.因此,本文在測試時將 BN層的參數(shù)合并到卷積層中,以此來減少算法的計算量,提升網(wǎng)絡(luò)模型前向推斷的速度,加快模型的檢測速度.
在YOLOv3中,BN算法過程如下:
其中,γ為縮放因子,μ為批處理數(shù)據(jù)的均值,β為偏置,σ2為批處理數(shù)據(jù)的方差.為了避免分母為0,本文在實驗時將ε取值為0.000 000 1,卷積計算結(jié)果xconv如下:
xconv為BN卷積計算的結(jié)果,xout為BN算法的計算結(jié)果.將卷積層與BN層合并:
取合并后的權(quán)值參數(shù)為:
合并后的偏置為:
合并后的計算簡化為:
卷積層與BN 層合并后可以與卷積層共用Blob數(shù)據(jù),減少內(nèi)存占用,從而提升檢測速度.
本文使用的數(shù)據(jù)集JM-data是由個人制作完成的.首先,由安裝在車輛前端的??低旻6Pro行車記錄儀對路況實景進行拍攝,篩選出有交通標(biāo)志的視頻,運用Python程序從這些視頻里每隔7幀截取一張圖像,制作成連貫的照片集,這樣制成的數(shù)據(jù)集包含由小到大的不同時刻的交通標(biāo)志圖像,使樣本更加豐富.然后,從這些照片中篩選出6 500張作為實驗訓(xùn)練數(shù)據(jù)集(包含順光、逆光、部分遮擋等情況下的20種交通標(biāo)志照片),其中5 300張做訓(xùn)練集,1 200張做驗證集.通過labelImg圖像標(biāo)注軟件對數(shù)據(jù)集進行手工標(biāo)注分類,得到每張圖片的XML文件,最后,用Python程序分別對訓(xùn)練集和驗證集這兩個文件各自運行一次,生成相應(yīng)的TXT文本.
為了提高定位精度,加快收斂,本文使用 K-means聚類算法[10]對已生成的 TXT文本獲取YOLOv3算法需要的先驗框尺寸信息.因為K-means對初始點敏感,所以程序在每次運行后,所得的先驗框結(jié)果都有偏差,但是對應(yīng)的avg iou是穩(wěn)定的,所以本文統(tǒng)計了多組聚類的結(jié)果,最終選擇了相對穩(wěn)定的9個錨點,不同尺度的錨點對應(yīng)的先驗框如表1所示.
表1 先驗框在特征圖上的分布
本文實驗環(huán)境:Win10操作系統(tǒng),16 Gb內(nèi)存,NVIDIA GTX1080TI顯卡,顯存為11 Gb,CPU為i7-7700.使用Darknet深度學(xué)習(xí)框架,GPU加速庫是基于CUDA10.1的cuDNN7.6.5.
訓(xùn)練初期,動量參數(shù)設(shè)為0.9,衰減系數(shù)設(shè)為0.000 5,學(xué)習(xí)率設(shè)為0.001,選擇steps這種學(xué)習(xí)策略來更新學(xué)習(xí)率,當(dāng)?shù)? 600次時,學(xué)習(xí)率衰減 10倍,到11 000次時,學(xué)習(xí)率在前一個學(xué)習(xí)率的基礎(chǔ)上再次衰減10倍,對于候選框尺寸(anchors),是將通過K-means聚類算法得到的9個先驗框,按照從小到大的順序替換原文件中的anchors,模型訓(xùn)練過程中損失函數(shù)曲線如圖2所示,精度與召回率曲線如圖3所示.
圖2 損失函數(shù)曲線
圖3 精度與召回率曲線
由圖2可以看出,在前2 000次迭代期間,網(wǎng)絡(luò)快速擬合,在2 000~9 600次,損失函數(shù)曲線趨于平緩下降,在9 600次后,由于學(xué)習(xí)率由0.001降至0.000 1,降低了10倍,所以損失函數(shù)曲線再次微弱下降,即損失函數(shù)進一步收斂,之后損失函數(shù)曲線趨于平穩(wěn)狀態(tài),loss值穩(wěn)定在0.1附近.
對于改進后的效果,本文從訓(xùn)練后的模型檢測的準確率P,召回率R,平均精度(mAP)和檢測速度4個方面進行分析:
其中:TP代表正確檢測框,即交通標(biāo)志的預(yù)測框與標(biāo)簽框正確匹配,兩者之間的IoU大于0.5.FP代表誤檢框,即把背景預(yù)測成了交通標(biāo)志.FN代表漏檢框,即原本需要檢測出的交通標(biāo)志,但實際沒有檢測出來.mAP計算公式為:
其中,AP為單個類別的平均準確率,n為類別數(shù)目,本文的類別數(shù)為20.
4種算法的檢測效果如圖4所示,其中從左到右的3列對應(yīng)的情況分別為遮擋、常規(guī)場景和不同大小的同一種標(biāo)志.左圖檢測到的是限速標(biāo)志,中間圖檢測到的是小心行人和允許調(diào)頭的標(biāo)志,右圖檢測到的是保持向右.
圖4 4種方法對交通標(biāo)志檢測識別的效果對比
用本文改進的算法、YOLOv2、YOLOv3和YOLOv4 4種算法對數(shù)據(jù)集進行訓(xùn)練,在對應(yīng)的cfg文件中,將輸入圖像全部設(shè)置為416×416.表2為4種算法的實驗結(jié)果對比.
表2 算法實驗的結(jié)果
針對同一測試集,本文改進的算法與YOLOv3相比,在準確率、召回率、mAP3個評估指標(biāo)上分別提高了7.88%、4.04%和7.59%,在速度上快了10.95%;與YOLOv2相比,本文算法在這3個指標(biāo)上已經(jīng)具備了明顯的優(yōu)勢,但由于兩者之間在網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)雜程度上存在明顯差異,所以本文算法在檢測速度上處于劣勢,但仍滿足實時檢測的要求;相對于YOLOv4,本文算法除了在召回率上低了1.18%,在其他3個指標(biāo)上都更具優(yōu)勢.
本文提出了一種改進的YOLOv3交通標(biāo)志檢測方法.實驗結(jié)果表明,本文算法改善了檢測邊框的位置精度,提高了小像素交通標(biāo)志圖像的檢測精度和速度.通過實驗證明,對于行駛中的汽車,重點檢測遠距離小像素交通標(biāo)志進行提前識別,弱化近距離大像素交通標(biāo)志的檢測能力,剔除不必要的網(wǎng)絡(luò)結(jié)構(gòu),在一定程度上減少計算量,提高訓(xùn)練效率,是完全可行的設(shè)計方案.下一步我們將結(jié)合模型量化、剪枝等方法,精簡網(wǎng)絡(luò)結(jié)構(gòu),降低模型的大小,以便在普通的嵌入式處理器上應(yīng)用.