江金洪 ,鮑勝利 ,史文旭 ,韋振坤
(1. 中國科學(xué)院成都計(jì)算機(jī)應(yīng)用研究所,成都610041; 2. 中國科學(xué)院大學(xué),北京100049)
目前,交通標(biāo)志在現(xiàn)實(shí)生活中隨處可見,道路上的減速限行、安全警示、車輛引流等交通標(biāo)志為人們安全便捷出行提供了強(qiáng)有力的保障。針對(duì)理想情況下的交通標(biāo)志識(shí)別算法研究已取得較高的成就,但由于車輛在實(shí)際道路上獲取的圖片容易受到光照強(qiáng)度、天氣狀況等因素的影響,且交通標(biāo)志目標(biāo)往往只占整張圖片的極小部分,這使得交通標(biāo)志識(shí)別在車輛真實(shí)行駛過程中的應(yīng)用存在諸多挑戰(zhàn)[1]。因此,真實(shí)自然條件下交通標(biāo)志識(shí)別的研究具有重要價(jià)值。
傳統(tǒng)交通標(biāo)志識(shí)別算法主要利用圖像處理技術(shù)對(duì)圖像的顏色、形狀、邊緣等進(jìn)行提取特征和分類。文獻(xiàn)[2]中提出了在 HSV(Hue,Saturation,Value)空 間 訓(xùn) 練 自 適 應(yīng) 增 強(qiáng)(Adaptive boosting,Adaboost)分類器的檢測算法,該方法具有較好的魯棒性和較高的準(zhǔn)確率,但檢測速度較低;文獻(xiàn)[3]中基于CIELab 和YCbCr 空間的方向梯度直方圖(Histogram of Oriented Gradient,HOG)特征訓(xùn)練支持向量機(jī)(Support Vector Machine,SVM)分類器,但該方法泛化能力較弱;文獻(xiàn)[4]中根據(jù)交通限速標(biāo)志的顏色和形狀特征,提出了一種基于車載視頻的交通限速標(biāo)志的檢測和識(shí)別算法;文獻(xiàn)[5]中則提出了基于深度森林的交通標(biāo)志識(shí)別算法。上述算法雖然在準(zhǔn)確率上不斷提高,但它們?cè)趯?shí)時(shí)性和準(zhǔn)確率的平衡性上依然難以達(dá)到卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)所能達(dá)到的效果。
自 2012 年 AlexNet[6]在 ImageNet[7]圖像分類比賽中獲得巨大成功后,CNN 便廣泛應(yīng)用于計(jì)算機(jī)視覺領(lǐng)域。近幾年由于各種新型CNN 結(jié)構(gòu)不斷地被提出,使得目標(biāo)檢測算法得以迅猛發(fā)展。當(dāng)前,深度學(xué)習(xí)目標(biāo)檢測算法可以分為兩類,以Faster R-CNN(Faster Region-CNN)[8]為代表的雙階段目標(biāo)檢測算法和以 YOLO(You Only Look Once)[9]、單次多框檢測(Single Shot multiBox Detector,SSD)算法[10]為代表的單階段目標(biāo)檢測算法。由于CNN 在計(jì)算機(jī)視覺領(lǐng)域存在速度快、準(zhǔn)確度高的優(yōu)勢(shì),使得它在交通標(biāo)志識(shí)別任務(wù)中得到廣泛應(yīng)用。2011 年,Sermanet 等[11]在德國交通標(biāo)志(German Traffic Sign Recognition Benchmark,GTSRB)數(shù)據(jù)集[12]上實(shí)現(xiàn)了神經(jīng)網(wǎng)絡(luò)識(shí)別交通標(biāo)志首次超過人工的效果,僅有0.56%的錯(cuò)誤率;2016 年,騰訊公司聯(lián)合清華大學(xué)創(chuàng)建了一個(gè)接近真實(shí)駕駛環(huán)境的數(shù)據(jù)集TT100K(Tsinghua-Tencent 100K)[13],并訓(xùn)練了兩個(gè)卷積網(wǎng)絡(luò)用于識(shí)別與分類,其準(zhǔn)確率能達(dá)到88%,召回率能達(dá)91%;2018 年,Wang 等[14]提出了一個(gè)級(jí)聯(lián)掩碼生成框架來解決分辨率與小目標(biāo)檢測之間的矛盾,通過多次對(duì)感興趣區(qū)域(Region Of Interest,ROI)的回歸,得到了定位更準(zhǔn)確的目標(biāo)框及更高的精度。
深度CNN 雖然能提升識(shí)別算法的準(zhǔn)確率和實(shí)時(shí)性,但其計(jì)算量和參數(shù)量都相對(duì)比較大,對(duì)硬件需求較高,且目標(biāo)框交并比(Intersection over Union,IoU)計(jì)算與邊框回歸損失函數(shù)的優(yōu)化方向并不完全等價(jià),會(huì)使得目標(biāo)框定位存在誤差。為減少算法的計(jì)算量和提高目標(biāo)框的定位精度,本文提出了一種深度可分離的YOLO v3改進(jìn)算法IYOLO(Improved YOLO v3),主要工作如下:
1)在YOLO v3[15]的網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)上引入深度可分離卷積(Depthwise Separable Convolution,DSC)[16],使其在不損失準(zhǔn)確率的基礎(chǔ)上,減少了模型參數(shù)數(shù)量和計(jì)算量;
2)為提高算法的準(zhǔn)確率和目標(biāo)框定位精度,在原YOLO v3損失函數(shù)的基礎(chǔ)上引入了廣義IoU(Generalized IoU,GIoU)損失[17]和 Focal 損失(Focal Loss)[18],使設(shè)計(jì)的損失函數(shù)優(yōu)化方向與目標(biāo)框最大IoU 計(jì)算方向一致,同時(shí)在一定程度上解決了類別之間的不均衡問題,提高了檢測準(zhǔn)確率。
YOLO v3 算法是基于 YOLO、YOLOv2[19]算法的改進(jìn)算法,它在檢測速度和精度上均有很大的提高。YOLO 算法最早是由 Redmon 等[9,15,19]提出,其思想是將整張圖片作為神經(jīng)網(wǎng)絡(luò)的輸入,并在最后輸出層直接輸出回歸的目標(biāo)框位置和類別信息。不同于Faster R-CNN 算法需要在中間層生成候選區(qū)域,YOLO 算法采用直接回歸的思路,實(shí)現(xiàn)了端到端的結(jié)構(gòu),這使得算法在輸入圖片大小為448× 448 時(shí)每秒幀數(shù)(Frames Per Second,F(xiàn)PS)能達(dá)到45,其精簡版本Fast YOLO的FPS 甚至可達(dá)到155,檢測速度遠(yuǎn)遠(yuǎn)快于Faster R-CNN。針對(duì)YOLO 算法存在對(duì)小目標(biāo)和密集目標(biāo)檢測效果差以及泛化能力較弱的問題,作者在之后又逐漸提出了YOLO v2 和YOLO v3 兩種升級(jí)版本算法,其中YOLO v3 算法由于其速度快、準(zhǔn)確率高,現(xiàn)已廣泛應(yīng)用于工業(yè)檢測。
YOLO v3 算法使用一種殘差神經(jīng)網(wǎng)絡(luò)(Darknet-53)作為特征提取層,在花費(fèi)更少浮點(diǎn)運(yùn)算和時(shí)間的情況下達(dá)到與ResNet-152[20]相似的效果。在預(yù)測輸出模塊,YOLO v3 借鑒FPN(Feature Pyramid Network)[21]算法思想,對(duì)多尺度的特征圖進(jìn)行預(yù)測,即在三種不同尺度上,每個(gè)尺度上的每個(gè)單元格都會(huì)預(yù)測出三個(gè)邊界框,其結(jié)構(gòu)示意圖如圖1所示。
圖1 YOLO v3結(jié)構(gòu)示意圖Fig. 1 Schematic diagram of YOLO v3 structure
自 YOLO v2 算法起,YOLO 算法引入 anchor box,初始 9 個(gè)anchor box 的大小由K-Means 算法對(duì)所有真實(shí)目標(biāo)框的長寬聚類得到,網(wǎng)絡(luò)預(yù)測輸出相對(duì)于anchor box 偏移量分別為tx,ty,tw,th,則邊界框真實(shí)位置如式(1)所示:
其中:(cx,cy)為當(dāng)前單元格相對(duì)于圖像左上角的偏移值,為對(duì)應(yīng)尺度anchor box的長和寬。
在使用傳統(tǒng)卷積計(jì)算時(shí),每一步計(jì)算都會(huì)考慮到所有通道的對(duì)應(yīng)區(qū)域的計(jì)算,這使得卷積過程需要大量的參數(shù)和計(jì)算。深度可分離卷積則是將分組卷積思路做到極致(每一通道作為一組),先對(duì)每一通道的區(qū)域進(jìn)行卷積計(jì)算,然后進(jìn)行通道間的信息交互,實(shí)現(xiàn)了將通道內(nèi)卷積和通道間卷積完全分離。
在傳統(tǒng)卷積算法中,輸入為H×W×N特征圖與C個(gè)尺度為k×k×N的卷積核進(jìn)行卷積計(jì)算時(shí),會(huì)得到輸出特征圖大小為,在不考慮偏置情況下,參數(shù)量為N×k×k×C,計(jì)算量為H×W×k×k×N×C,其卷積過程如圖2所示。
在深度可分離卷積中,將卷積過程分為深度卷積(Depthwise Convolution)和逐點(diǎn)卷積(Pointwise Convolution)兩部分。深度卷積是對(duì)輸入的同一通道類進(jìn)行尺寸為k×k的卷積,通道間并沒有信息交互,提取到的是一個(gè)通道內(nèi)的特征信息,其參數(shù)量為N×k×k,計(jì)算量為H×W×k×k×N。逐點(diǎn)卷積則是利用C個(gè)尺寸大小為1× 1×N的卷積對(duì)通道間的信息進(jìn)行融合,在實(shí)現(xiàn)通道間通信的同時(shí)可調(diào)控通道數(shù)量,其參數(shù)量為N× 1 × 1 ×C,計(jì)算量為H×W× 1 × 1 ×N×C,其卷積過程如圖3所示。
圖2 標(biāo)準(zhǔn)卷積過程Fig. 2 Standard convolution process
圖3 深度可分離卷積過程Fig. 3 Depthwise separable convolution process
IYOLO整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
為解決YOLO v3算法在高分辨率交通標(biāo)志圖片上參數(shù)量較大、實(shí)時(shí)性較差的問題,提出利用深度可分離卷積重新構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu)。相對(duì)于標(biāo)準(zhǔn)卷積模塊,深度可分離卷積模塊(Depthwise Separable Convolution Module,DSC Module)如圖5所示。
圖4 IYOLO結(jié)構(gòu)示意圖Fig. 4 Schematic diagram of IYOLO structure
圖5 標(biāo)準(zhǔn)卷積模塊和深度可分離卷積模塊Fig. 5 Standard convolution module and depthwise separable convolution module
網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計(jì)上依然借鑒了ResNet 網(wǎng)絡(luò)殘差的思想,主體網(wǎng)絡(luò)由多個(gè)DSResblock 模塊組成。DSResblock 模塊結(jié)構(gòu)如圖6 所示,其中虛線框內(nèi)的結(jié)構(gòu)會(huì)被重復(fù)Num_blocks-1次。
IYOLO 的最后三層輸出部分主要由ReDSConv 模塊和Out模塊兩部分組成,其結(jié)構(gòu)如圖7所示。
圖6 深度可分離殘差模塊Fig. 6 Depthwise separable residual module
圖7 輸出部分示意圖Fig. 7 Schematic diagram of output section
YOLO v3算法在目標(biāo)框坐標(biāo)回歸過程中采用的是均方誤差(Mean Square Error,MSE)損失函數(shù),在類別和置信度上使用了交叉熵作為損失函數(shù),其損失函數(shù)如式(2)所示。
其中:λcoord、λnoobj分別表示坐標(biāo)損失權(quán)重和不包含object 的置信度損失權(quán)重表示第i個(gè)單元格的第j個(gè)box 是否負(fù)責(zé)該objec(t1 或0)表示預(yù)測目標(biāo)框坐標(biāo)、置信度和類別表示真實(shí)目標(biāo)框坐標(biāo)、置信度和類別。
但以MSE為目標(biāo)框坐標(biāo)的損失函數(shù)會(huì)存在兩個(gè)缺點(diǎn):
1)L2損失(即MSE 損失)值越低并不等價(jià)于IoU 值越高,如圖8 所示,三對(duì)目標(biāo)框具有相同的L2損失值,但I(xiàn)oU 值卻不一樣;
2)L2損失值對(duì)目標(biāo)框尺度比較敏感,不具有尺度不變性,如在式(2)中,對(duì)w、h值開方處理就是為緩解目標(biāo)框尺度對(duì)L2損失值的影響。
IoU是在目標(biāo)檢測算法常用的距離測量標(biāo)準(zhǔn),其值的計(jì)算如式(3)所示,其中A、B分別為兩目標(biāo)框面積。
針對(duì)于MSE損失函數(shù)存在的缺陷,提出利用GIoU損失作為目標(biāo)框坐標(biāo)回歸的損失。與IoU 相似,GIoU 也是一種距離度量標(biāo)準(zhǔn),其值的計(jì)算如式(4)所示,其中Ac為兩目標(biāo)框的最小閉包區(qū)域面積,U為兩目標(biāo)框的相交面積。
GIoU損失的計(jì)算如下所示:
GIoU 作為距離度量標(biāo)準(zhǔn),滿足非負(fù)性、不可分的同一性、對(duì)稱性和三角不等性;GIoU 值是比值,因此對(duì)目標(biāo)框尺度并不敏感,具有尺度不變性;由式(4)所知,GIoU 的上限是IoU,當(dāng)兩目標(biāo)框越接近且形狀相似時(shí),GIoU 越接近IoU;即有當(dāng)GIoU值越高時(shí),IoU值越高。
圖8 三種指標(biāo)關(guān)系示意圖Fig. 8 Schematic diagram of relationship among three indicators
為進(jìn)一步提高識(shí)別的準(zhǔn)確率,在對(duì)置信度設(shè)計(jì)損失函數(shù)時(shí)采用了Focal 損失替換交叉熵?fù)p失。Focal 損失是基于交叉熵?fù)p失的改進(jìn),主要是解決了one-stage 目標(biāo)檢測算法中前景類與背景類比例嚴(yán)重不均衡的問題。Focal 損失通過降低大量簡單背景類在訓(xùn)練過程中所占的權(quán)重使得訓(xùn)練的算法模型更專注于前景類的檢測。Focal損失如式(6)所示:
類別損失仍使用交叉熵?fù)p失如式(7)所示,其中c^是真實(shí)類別,c是預(yù)測類別。
改進(jìn)后的算法損失函數(shù)GFLoss如式(8)所示:
IYOLO 損失函數(shù)將GIoU 損失作為目標(biāo)框坐標(biāo)回歸的損失,量化評(píng)測指標(biāo)GIoU 為損失,這解決了原MSE 損失存在的損失優(yōu)化與最大IoU 值計(jì)算方向不一致和對(duì)尺度敏感的問題。同時(shí)引入Focal損失,緩解了數(shù)據(jù)類別不均衡對(duì)檢測算法的影響,并提高了算法的檢測準(zhǔn)確率。
為評(píng)估本文所提的IYOLO 算法在真實(shí)自然環(huán)境下對(duì)交通標(biāo)志的檢測性能,采用了清華大學(xué)與騰訊公司公開發(fā)布的TT100K 數(shù)據(jù)集。TT100K 數(shù)據(jù)集數(shù)據(jù)是在騰訊街景地圖上截取并進(jìn)行人工標(biāo)注,其圖像的分辨率為2 048× 2 048,標(biāo)注類別數(shù)為221,其中包含6 107張圖像的訓(xùn)練集和3 073張圖像的測試集,覆蓋了不同天氣條件和不同光照下的交通標(biāo)志圖像。由于原始圖像分辨率較大,因此在本次實(shí)驗(yàn)中對(duì)原圖像進(jìn)行了裁剪處理,裁剪后的圖像尺度為800 × 800。由于數(shù)據(jù)集中各個(gè)類別之間的數(shù)據(jù)量存在嚴(yán)重不平衡的問題,因此本次實(shí)驗(yàn)只選擇了數(shù)據(jù)量較多的45 類交通標(biāo)志進(jìn)行識(shí)別,并對(duì)訓(xùn)練集中數(shù)據(jù)量較少的類別進(jìn)行數(shù)據(jù)擴(kuò)充,隨機(jī)采用了加入隨機(jī)高斯噪聲、亮度調(diào)整、鏡像三種數(shù)據(jù)增強(qiáng)策略,最終使得每個(gè)類別的數(shù)據(jù)量均達(dá)3 000以上。經(jīng)裁剪和擴(kuò)充后,訓(xùn)練集包含212 384 張圖片,測試集包含52 413 張圖片,其中45 類交通標(biāo)志類別分別是:pn、pne、i5、p11、pl40、po、pl50、pl80、io、pl60、p26、i4、pl100、pl30、il60、pl5、i2、w57、p5、p10、ip、pl120、il80、p23、pr40、ph4.5、w59、p12、p3、w55、pm20、pl20、pg、pl70、pm55、il100、p27、w13、p19、ph4、ph5、wo、p6、pm30、w32。
本文采用平均精度均值(mean Average Precision,mAP)和FPS兩個(gè)指標(biāo)對(duì)算法模型進(jìn)行評(píng)估。
mAP 指標(biāo)通過首先計(jì)算每個(gè)類別的平均精度(Average Precision,AP),再對(duì)所有類別的平均精度求取均值得到,計(jì)算如式(9)所示。其中:TP(True Positive)為真正例,F(xiàn)P(False Positive)為假正例,F(xiàn)N(False Negative)為假負(fù)例,Nc表示第c類劃分精確率P(Precision)和召回率R(Recall)的數(shù)量,p(rc)表示在c類召回率為rc時(shí)的p值。
在實(shí)時(shí)檢測任務(wù)中,F(xiàn)PS 值是極其重要的指標(biāo),是檢測速度的直接體現(xiàn),對(duì)任務(wù)的應(yīng)用場景有直接的影響。
本文實(shí)驗(yàn)是在Ubuntu16.04 系統(tǒng)下進(jìn)行,深度學(xué)習(xí)框架為Keras 2.1.5,所使用的顯卡配置為:4 塊Nvidia GeForce RTX 2080 Ti,顯存為44 GB。
僅引入了深度可分離卷積后,改進(jìn)的YOLO v3 算法明顯優(yōu)于原始YOLO v3 算法,其對(duì)比結(jié)果如表1 所示。由表1 可知,引入深度可分離卷積后的YOLO v3 算法相較于原始YOLO v3 算法在參數(shù)量和模型大小上有了較明顯的優(yōu)勢(shì),只占原始算法的1/5 左右,同時(shí)在mAP 指標(biāo)上,改進(jìn)的算法也有0.3個(gè)百分點(diǎn)的提升。對(duì)比實(shí)驗(yàn)表明,YOLO v3算法結(jié)構(gòu)中大部分參數(shù)是冗余的,且將深度可分離卷積引入到Y(jié)OLO v3 算法中以減少參數(shù)量的方法是可行的。
表1 引入DSC前后YOLO v3算法性能對(duì)比Tab. 1 Performance comparison of YOLO v3 algorithm before and after introducing DSC
將 IYOLO 算法與YOLO v3、SSD300、Faster R-CNN 三種典型的多尺度目標(biāo)檢測算法對(duì)每個(gè)類別的AP值進(jìn)行對(duì)比,結(jié)果如表2 所示。同時(shí),四種算法的檢測精度、檢測速度和模型大小整體性能對(duì)比結(jié)果如表3 所示。對(duì)表2 和表3 數(shù)據(jù)進(jìn)行分析可知,IYOLO 算法 mAP 能達(dá)到 89%,相較于 YOLO v3[15]、SSD300[10]、Faster R-CNN[8]算法分別提升了 6.6 個(gè)百分點(diǎn)、25.29 個(gè)百分點(diǎn)、2.1 個(gè)百分點(diǎn),且它在每個(gè)類別上的檢測效果均優(yōu)于YOLO v3、SSD300 兩種算法。從檢測速度上看,IYOLO 算法遠(yuǎn)遠(yuǎn)優(yōu)于Faster R-CNN 算法,且相較于YOLO v3算法FPS 提升了60%,但與SSD300 算法之間還有一定的差距。而在模型大小方面,IYOLO 算法僅有原始YOLO v3 算法模型大小的1/5 左右,其參數(shù)量亦遠(yuǎn)小于SSD300 和Faster RCNN,得到極大的壓縮。
表2 四種算法的AP值對(duì)比 單位:%Tab. 2 Comparison of AP values of four algorithms unit:%
此外,本文設(shè)置了在 IoU 分別為 0.5、0.6、0.7、0.75 時(shí),IYOLO 算法與 SSD300、YOLO v3、Faster R-CNN 三種算法在檢測精度上的對(duì)比,其對(duì)比結(jié)果如表4所示。
IYOLO 算法與其他三種算法檢測目標(biāo)框?qū)Ρ刃Ч鐖D9所示。
表3 四種算法整體檢測性能對(duì)比Tab. 3 Comparison of overall detection performance of four algorithms
從表4 中可以看出,隨著IoU 閾值的提高,IYOLO 算法較其他三種算法在檢測精度上的優(yōu)勢(shì)越發(fā)明顯,其在高IoU 閾值的情況下仍能保持高mAP 值,而其他三種算法隨著IoU 閾值的增大mAP 急劇下降。在IoU 閾值為0.5 時(shí),IYOLO 算法較SSD300、YOLO v3、Faster R-CNN算法的mAP值提升分別為25.29個(gè)百分點(diǎn)、6.6個(gè)百分點(diǎn)、2.1個(gè)百分點(diǎn),而其在IoU閾值為 0.75 時(shí)的 mAP 值提升分別為 30.84 個(gè)百分點(diǎn)、13.52 個(gè)百分點(diǎn)、11.39個(gè)百分點(diǎn),即在高IoU 閾值下提升越明顯,這說明了IYOLO 算法得到的預(yù)測框與真實(shí)目標(biāo)框重合度更高,目標(biāo)框定位更準(zhǔn)確,這使得其應(yīng)用場景更廣闊。且從圖9 中可以看出,IYOLO 算法比其他三種算法對(duì)目標(biāo)框的定位更精確,并且解決了SSD300、YOLO v3 算法中存在漏檢、誤檢的問題。
表4 不同IoU閾值下檢測精度的對(duì)比 單位:%Tab. 4 Comparison of detection accuracy under different IoU thresholds unit:%
圖9 不同算法檢測交通標(biāo)志效果對(duì)比圖Fig. 9 Comparison of different algorithms for detecting traffic signs
本文提出了一種基于YOLO v3 的改進(jìn)算法,旨在解決交通標(biāo)志識(shí)別任務(wù)中存在檢測精度較低、算法模型參數(shù)量巨大以及實(shí)時(shí)性較差的問題。其中:引入深度可分離卷積實(shí)現(xiàn)了在不降低檢測準(zhǔn)確率的條件下極大地降低算法模型參數(shù)量的目標(biāo);在對(duì)目標(biāo)框坐標(biāo)回歸損失的設(shè)計(jì)上采用了GIoU 損失,這使得算法的檢測精度大幅提升,且定位的目標(biāo)框也更加精準(zhǔn);同時(shí)將Focal 損失加入到置信度損失中,緩解了數(shù)據(jù)類別之間不均衡問題對(duì)算法模型的影響。通過對(duì)實(shí)驗(yàn)數(shù)據(jù)的分析可知,IYOLO 算法在其參數(shù)只有YOLO v3 算法的1/5 時(shí),mAP指標(biāo)提高了6.6 個(gè)百分點(diǎn),F(xiàn)PS 也提高了4.5。因此,該算法在模型大小、檢測精度、檢測速度上均優(yōu)于YOLO v3算法。為提高檢測精度,IYOLO 算法采用的輸入圖片尺度為800 × 800,這使得其檢測速度FPS 只能達(dá)到12,與達(dá)到實(shí)時(shí)檢測還存在一定距離,未來可以在檢測速度上做進(jìn)一步的提升以達(dá)到實(shí)時(shí)檢測的效果。