徐迎春
(江海職業(yè)技術(shù)學(xué)院智能信息學(xué)院,江蘇揚(yáng)州 225001)
交通標(biāo)志識別在無人駕駛和駕駛輔助領(lǐng)域有著重要的應(yīng)用,它為車輛提供準(zhǔn)確的交通標(biāo)志信息。該任務(wù)實(shí)質(zhì)是計(jì)算機(jī)視覺中的實(shí)時(shí)目標(biāo)檢測。傳統(tǒng)的目標(biāo)檢測算法是用SIFT(Scale-Invariant Feature Transform,尺度不變特征變換)和HOG(Histogram of Oriented Gradient,方向梯度直方圖)對圖像進(jìn)行特征提取,最后使用SVM、Adaboost等分類器進(jìn)行分類[1]。這些傳統(tǒng)操作在速度和準(zhǔn)確性方面很難達(dá)到滿意的效果。近年來,基于卷積神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)算法[2]在計(jì)算機(jī)視覺目標(biāo)檢測中取得了很大的成功。其檢測算法大致可以分為兩大類:基于區(qū)域生成的二階段目標(biāo)檢測算法:如R-CN N[3]系列?;诨貧w的單階段目標(biāo)檢測算法:如YOLO系列、SSD、Retina-Net。對于交通標(biāo)志識別,在實(shí)際應(yīng)用中快速準(zhǔn)確地檢測非常重要,單階段檢測算法比二階段算法更能滿足實(shí)時(shí)的需求。YOLOv3[4]模型是一個(gè)精度與速度性價(jià)比很高的算法,然而深度學(xué)習(xí)算法的檢測準(zhǔn)確率仍有很大地提升空間。本文對YOLOv3算法進(jìn)行改進(jìn),用于道路場景下的4種主要的交通標(biāo)志識別。
YOLO(you only look once) 模型把目標(biāo)檢測當(dāng)做單一的回歸任務(wù),將圖像劃分為S×S網(wǎng)格,物體bbox(邊界框)中心落到哪個(gè)網(wǎng)格上就由該網(wǎng)格對應(yīng)的錨框負(fù)責(zé)檢測該物體。YOLOv3模型在滿足精度要求的情況下能實(shí)時(shí)檢測,在工業(yè)界實(shí)際項(xiàng)目中大量應(yīng)用。
圖1 YOLOv3 網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.1 Network structure of YOLOv3
YOLOv 3 結(jié)合了殘差網(wǎng)絡(luò)、特征金字塔以及多特征融合網(wǎng)絡(luò)等優(yōu)秀的方法,具備較好的識別速度和檢測精度[5]。網(wǎng)絡(luò)結(jié)構(gòu)如圖1[6]所示。
骨干網(wǎng)絡(luò)采用全卷積網(wǎng)絡(luò)Darknet-53,主要由卷積層、Batch Normalization(批標(biāo)準(zhǔn)化)及躍層連接組成,激活函數(shù)采用Leaky Relu[7]。輸入圖像(416×416×3)經(jīng)過5個(gè)階段,每個(gè)階段進(jìn)行2倍下采樣。在第5個(gè)階段得到32倍下采樣,第4階段16倍下采樣、第3階段8倍下采樣。32倍下采樣經(jīng)過做一系列的卷積得到y(tǒng)1特征圖,同時(shí)把32倍下采樣,再經(jīng)過2 倍的上采樣得到和1 6 倍下采樣相同的寬(w)、高(h),然后在C通道上張量拼接,再經(jīng)過卷積得到y(tǒng)2特征圖,同理得到y(tǒng)3特征圖。這就實(shí)現(xiàn)了多尺度預(yù)測,同時(shí)還進(jìn)行跨尺度融合。
錨框是先驗(yàn)框,在數(shù)據(jù)集上聚類生成的,能使模型收斂更快,效果更好。YOLOv3中作者在COCO數(shù)據(jù)集上設(shè)置了9種(3×3)的錨框尺寸,應(yīng)用在不同的特征圖上,每個(gè)特征圖上3個(gè)錨框。
錨框的尺寸是[pw,ph],起始點(diǎn)在對應(yīng)網(wǎng)格的左上角,YO LO v3 直接預(yù)測出邊界框中心點(diǎn)相對于網(wǎng)格單元左上角的相對坐標(biāo)和大小[tx,ty,tw,th]。邊界框的中心點(diǎn)、大小在錨框的基礎(chǔ)上通過“微調(diào)”得到,即[tx,ty,tw,th]→[bx,by,bw,bh],推導(dǎo)公式如圖2。
圖2 預(yù)測框位置和大小計(jì)算Fig.2 Prediction box position and size calculation
預(yù)測框的中心點(diǎn)移動(dòng)上用了Sigmoid激活函數(shù),Sigmoid函數(shù)取值在(0,1)之間,保證中心點(diǎn)不會偏出網(wǎng)格;在寬、高縮放上用EXP函數(shù),函數(shù)值在(0,+∞),保證縮放不會出現(xiàn)負(fù)數(shù)。
根據(jù)YOLOv3 的網(wǎng)絡(luò)結(jié)構(gòu)和預(yù)測框的信息, 得出YOLOv3的輸入為[N,3,416,416],N為Batch Size一次輸入的圖像數(shù),經(jīng)過特征提取得到三個(gè)輸出分支13×13,26×26,52×52三個(gè)尺度的特征圖,每個(gè)輸出分支上3個(gè)錨框,每個(gè)錨框?qū)?yīng)預(yù)測框有85個(gè)信息。85=4坐標(biāo)+1目標(biāo)概率+80分類,255=85×3錨框,(COCO數(shù)據(jù)集上有80個(gè)分類)最后網(wǎng)絡(luò)的輸出是[[N,255,13,13][N,255,26,26][N,255,52,52]]。
在目標(biāo)檢測任務(wù)里,有幾個(gè)關(guān)鍵信息是需要確定的:(x,y,w,h),confidence,class。根據(jù)關(guān)鍵信息的特點(diǎn),損失函數(shù)應(yīng)該由目標(biāo)框位置損失、目標(biāo)置信度損失、類別損失組成[8]。在YOLOv3的論文里雖然沒有明確列出所用的損失函數(shù),但可以從代碼分析出它的損失函數(shù)公式(1):
YOLOv3損失函數(shù)中w,h依然采用總平方誤差,其他部分的損失函數(shù)改為采用二值交叉熵。λcoord表示中心坐標(biāo)誤差的權(quán)重;S表示圖像的網(wǎng)格數(shù);B表示每個(gè)網(wǎng)格所預(yù)測的框的個(gè)數(shù);Iijobj表示第i個(gè)網(wǎng)格的第j個(gè)預(yù)測框是否檢測到了目標(biāo)(1或0);λnoobj表示當(dāng)預(yù)測框沒有預(yù)測到目標(biāo)時(shí),其置信度誤差在損失函數(shù)中所占權(quán)重[9]。表示預(yù)測框坐標(biāo)。為預(yù)測框內(nèi)含有目標(biāo)物體的概率得分。表示第(i,j)預(yù)測框?qū)儆陬悇eC的概率。( xi, yi, wij,是訓(xùn)練標(biāo)記的值,表示真實(shí)目標(biāo)框坐標(biāo)、置信度和類別。
NMS(non maximum suppression)非極大值抑制,是目標(biāo)檢測框架的后處理模塊,用來刪除檢測器輸出的冗余預(yù)測bbox。先對預(yù)測框進(jìn)行評分,條件是有物體有對應(yīng)類別,計(jì)算公式是Scorebbox=Scoreobject×Scoreclass,按類別進(jìn)行分組,按Score進(jìn)行排序,選取當(dāng)前類別中Score最大的那一個(gè),按x,y,w,h計(jì)算它與其余的bbox的IoU。IoU值大于我們設(shè)定的閾值的框舍去。IoU是兩個(gè)區(qū)域的重疊部分(交集)除以兩個(gè)區(qū)域的集合部分(并集)所得到的比值。
表1 實(shí)驗(yàn)數(shù)據(jù)集anchor 尺寸Tab.1 Anchor size of experimental data set
圖3 ResNet 和ResNet-D 網(wǎng)絡(luò)結(jié)構(gòu)對照Fig.3 Comparison of RESNET and resnet-d network structures
表2 算法改進(jìn)實(shí)驗(yàn)結(jié)果對照Tab.2 Comparison of experimental results of algorithm improvement
anchor值的大小對目標(biāo)檢測網(wǎng)絡(luò)十分重要。合適的anchor值能加快網(wǎng)絡(luò)的收斂速度,降低誤差。本文中采用Kaggle數(shù)據(jù)集,為了提高本次實(shí)驗(yàn)檢測的定位精度,需要使用K-means算法重新對anchor值進(jìn)行更新。更新后的anchor尺寸如表1所示。
訓(xùn)練深度卷積神經(jīng)網(wǎng)絡(luò)時(shí),網(wǎng)絡(luò)的規(guī)模受限于樣本的數(shù)量,而訓(xùn)練樣本的多樣性又直接關(guān)系到深度卷積神經(jīng)網(wǎng)絡(luò)的識別能力。本文在構(gòu)建虛擬樣本時(shí)采用了I mage Mixup方法,將2張圖像合并,增加樣本多樣性,提高模型抗空間擾動(dòng)的能力,對樣本泛化能力有著明顯的提升作用。
ResNet50模型在計(jì)算機(jī)視覺中廣泛運(yùn)用,它提出后許多研究者對它進(jìn)行了一系列的改進(jìn),依次提出了B、C、D三種改進(jìn)結(jié)構(gòu)。原始ResNet50每個(gè)階段的下采樣block會丟失3/4的信息。本文將骨干網(wǎng)絡(luò)改為ResNet50-D。如圖3,左邊分支將stride=2從1×1的卷積核上調(diào)整到3×3上;右邊分支將原來1×1 stride=2的卷積改為先2×2 stride=2的平均池化,然后接1×1 stride=1的卷積,進(jìn)行全量信息計(jì)算,增強(qiáng)特征提取能力。
本文使用Kaggle數(shù)據(jù)集road-sign-detection 比賽數(shù)據(jù)。劃分成訓(xùn)練集和測試集,總共877張圖,其中訓(xùn)練集701張圖、測試集176張圖。4個(gè)類別:speedlimit、crosswalk、trafficlight、stop。VOC數(shù)據(jù)格式是指每個(gè)圖像文件對應(yīng)一個(gè)同名的xml文件,xml文件中標(biāo)記物體框的坐標(biāo)和類別等信息。
本文采用平均精度均值(Average Precision,mAP)和FPS兩個(gè)指標(biāo)對算法模型進(jìn)行評估。mAP指標(biāo)通過首先計(jì)算每個(gè)類別的平均精度(Average Precision,AP),再對所有類別的平均精度求取均值得到[10]。在驗(yàn)證集上采用mAP作為評價(jià)指標(biāo),數(shù)值越高模型效果越好。FPS(Frames Per Second,FPS)是每秒處理幀數(shù),用于評估一個(gè)檢測器的實(shí)時(shí)性,是檢測速度的直接體現(xiàn)。FPS值越大,說明檢測器的實(shí)時(shí)性越好。
圖4 trafficlight、stop 檢測效果Fig.4 Detection effect of traffic light and stop
為了驗(yàn)證提出的改進(jìn)網(wǎng)絡(luò)的有效性, 在百度的aistudio平臺上完成所有與原算法的比較實(shí)驗(yàn)。該平臺搭載有Intel Xeon@2.60 GHz 4 Cores的處理器,內(nèi)存32GB,圖像處理單元(GPU)采用NVIDIA Tesla V100顯卡,顯存16 GB大小,操作系統(tǒng)為Ubuntu5.4.0終端,深度學(xué)習(xí)框架為PaddlePaddle1.8.4。載入COCO上的預(yù)訓(xùn)練模型作遷移學(xué)習(xí),[9]在訓(xùn)練階段,初始學(xué)習(xí)率設(shè)置為0.0001,學(xué)習(xí)率調(diào)整倍數(shù)gamma設(shè)置為0.1,設(shè)定批處理參數(shù)Batch Size=8,最大迭代次數(shù)2000,每200次保存模型。
為了驗(yàn)證改進(jìn)之后網(wǎng)絡(luò)模型檢測的效果,先用原始YOLOv3模型檢測,在本文數(shù)據(jù)集上mAP(IoU=0.5)精度為72.3;然后對數(shù)據(jù)集上anchor重新聚類,用新尺寸檢測,模型的mAP值提升0.8%。采用了Image Mixup圖像增廣技術(shù),模型精度有0.4%的小量提升。采用ResNet50-D作骨干網(wǎng)絡(luò),模型檢測精度提升約1%。最后分別選取改進(jìn)前和改進(jìn)后網(wǎng)絡(luò)訓(xùn)練得到的權(quán)重進(jìn)行最終對比實(shí)驗(yàn),改進(jìn)后模型檢測精度提升2.1%。實(shí)驗(yàn)對比見表2。
由此可以看出:這些技巧對模型精度提升有幫助。因?yàn)樗鼈冊谟?xùn)練過程中使用,且并沒有引入額外計(jì)算量,所以預(yù)測速度幾乎不變。由于深度學(xué)習(xí)模型的訓(xùn)練依賴大量數(shù)據(jù),本數(shù)據(jù)集圖片數(shù)量不多,所以預(yù)測精度還有待提升。
改進(jìn)后的網(wǎng)絡(luò)模型的檢測效果如圖4、圖5[10],模型能準(zhǔn)確識別標(biāo)志。
圖5 speedlimit、crosswalk 檢測效果Fig.5 Detection effect of speedlimit and crosswalk
本文提出了一種基于YOLOv3改進(jìn)的目標(biāo)檢測算法,在交通標(biāo)志識別任務(wù)中取得較好的效果,能夠準(zhǔn)確快速地檢測出四種交通標(biāo)志。交通標(biāo)志識別易受到光照環(huán)境,遮擋、重疊,大、小目標(biāo)等多因素影響,算法還需繼續(xù)優(yōu)化,從而滿足實(shí)際需要。