馮潤澤,江 昆,于偉光,楊殿閣
(清華大學(xué),汽車安全與節(jié)能國家重點(diǎn)實(shí)驗(yàn)室,北京 100084)
自動(dòng)駕駛技術(shù)被廣泛地認(rèn)為是一種減少交通事故、提高交通效率和舒適性的極具發(fā)展前景的技術(shù)。自動(dòng)駕駛技術(shù)得以實(shí)現(xiàn)的基礎(chǔ)是車輛可以自主地獲取到交通環(huán)境中語義信息,而交通標(biāo)志中包含了豐富的語義信息,其提供的警示、指示和禁止信息可以輔助緩解交通擁堵,降低交通事故發(fā)生率。此外,交通標(biāo)志牌識(shí)別算法也是高級(jí)駕駛員輔助系統(tǒng)(ADAS)的重要子系統(tǒng)之一。正因?yàn)榻煌?biāo)志牌識(shí)別算法如此重要,最早的交通標(biāo)志牌識(shí)別算法可以追溯到1987年,文獻(xiàn)[3]中嘗試構(gòu)建一套交通標(biāo)志牌識(shí)別系統(tǒng)。
交通標(biāo)志牌識(shí)別可以分為交通標(biāo)志牌的檢測(cè)與分類兩個(gè)步驟。傳統(tǒng)交通標(biāo)志牌識(shí)別算法依賴于人工設(shè)計(jì)的特征,一些算法將圖片映射到RGB、HSV、YCbCr和LUV色彩空間利用交通標(biāo)志牌的顏色特征對(duì)其進(jìn)行檢測(cè),但這些算法易受到光照、天氣和標(biāo)志牌的表面反射率等因素影響,所以還有一些改進(jìn)算法利用霍夫變換、距離變換、遺傳算法或者快速徑向?qū)ΨQ算法等利用交通標(biāo)志牌的形狀特征對(duì)其進(jìn)行檢測(cè)。交通標(biāo)志牌識(shí)別系統(tǒng)檢測(cè)到圖像中的交通標(biāo)志牌后對(duì)交通標(biāo)志牌實(shí)例進(jìn)行分類進(jìn)而得到交通標(biāo)志牌蘊(yùn)含的語義信息。傳統(tǒng)的交通標(biāo)志牌分類算法包括模板匹配算法和支持向量機(jī)算法等。通過近20年的研究,人工設(shè)計(jì)特征對(duì)交通標(biāo)志牌的識(shí)別算法的性能在2010年左右達(dá)到了瓶頸。
在2012年,隨著AlexNet被提出,基于卷積神經(jīng)網(wǎng)絡(luò)的方法被用于交通標(biāo)志牌識(shí)別。之后由于并行計(jì)算硬件高速發(fā)展,許多基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)識(shí)別算法被應(yīng)用在交通標(biāo)志牌識(shí)別領(lǐng)域。根據(jù)算法是否提前生成候選區(qū)域可將算法分為單階段識(shí)別算法,如SSD和YOLO系列算法以及兩階段識(shí)別算法如RCNN、Fast-RCNN和Faster-RCNN。由于單階段識(shí)別算法只需要進(jìn)行一次特征提取便可實(shí)現(xiàn)交通標(biāo)志牌的檢測(cè)與分類,所以其運(yùn)行速度較兩階段算法快,但是精度較低。
對(duì)于自動(dòng)駕駛系統(tǒng)或者高級(jí)駕駛輔助系統(tǒng)而言,越早地識(shí)別出交通標(biāo)志牌的語義信息就能越早地將信息傳遞給決策系統(tǒng)或者駕駛員,所以這就要求交通標(biāo)志牌識(shí)別算法能夠較好得識(shí)別出圖像中微小的交通標(biāo)志牌。YOLO系列算法的實(shí)時(shí)性和泛化性能較好,并且對(duì)于細(xì)粒度實(shí)例的識(shí)別效果好,所以YOLO系列算法非常適用于交通標(biāo)志牌的識(shí)別。但由于車載相機(jī)獲取得到的圖片往往較大,而為了提高識(shí)別速度,識(shí)別算法會(huì)縮小圖片后再輸入到識(shí)別網(wǎng)絡(luò)中。圖片中的交通標(biāo)志牌往往占據(jù)很小的像素區(qū)域,而且道路中的交通標(biāo)志牌種類繁多,包含的語義信息可分為幾十甚至上百種,各類別之間的特征差異不明顯,這都增加了交通標(biāo)志牌分類任務(wù)的難度,而交通標(biāo)志牌的信息隨著圖片的縮小而丟失,導(dǎo)致分類的精度得不到保證,即便是性能優(yōu)異的YOLO系列算法也很難在交通標(biāo)志牌識(shí)別中取得優(yōu)異的精度。
在交通標(biāo)志牌數(shù)據(jù)集方面,因?yàn)榛诰矸e神經(jīng)網(wǎng)絡(luò)的識(shí)別算法需要利用大量的數(shù)據(jù)來訓(xùn)練神經(jīng)網(wǎng)絡(luò),所以很多交通標(biāo)志牌數(shù)據(jù)集相繼被提出(如表1所示)。在交通標(biāo)志牌識(shí)別領(lǐng)域十分流行的GTSDB(German traffic sign detection benchmark)于2013年被公開,其中包含有900張圖片,這些圖片中的1 200個(gè)交通標(biāo)志牌分別標(biāo)注為“指示”、“禁止”和“警示”3類。2016年由清華和騰訊公司聯(lián)合制作的中國交通標(biāo)志牌數(shù)據(jù)集TT100K(Tsinghua-Tencent 100K)包含有10 000張圖片,30 000個(gè)交通標(biāo)志牌分為128類被標(biāo)注,但是因?yàn)槠渲泻芏喾N類的交通標(biāo)志牌樣本數(shù)量太少,所以在文獻(xiàn)[28]中只對(duì)樣本數(shù)目多于100個(gè)的45類交通標(biāo)志牌進(jìn)行了訓(xùn)練。2017年,長沙理工大學(xué)公開了CCTSDB(changsha university of science and technology Chinese traffic sign detection benchmark)數(shù)據(jù)集,其中包含有15 723張圖片,其中包含有21 134個(gè)被分為“指示”、“禁止”和“警示”3類的交通指示牌。
表1 主流交通標(biāo)志牌數(shù)據(jù)集
由于我國的交通標(biāo)志牌不同于任何其他國家,所以基于GTSDB等國外數(shù)據(jù)集的交通標(biāo)志牌識(shí)別算法在我國交通場景下不具備應(yīng)用價(jià)值。對(duì)于自動(dòng)駕駛系統(tǒng)或者高級(jí)駕駛輔助系統(tǒng)而言,不僅需要能夠識(shí)別出交通標(biāo)志牌歸屬的大類(“指示”、“禁止”和“警示”),還需要識(shí)別出其具體的語義信息,因此CCTSDB數(shù)據(jù)集的分類方式并不滿足需求。而在TT100K數(shù)據(jù)集中將限速類、最低限速類和限高類交通標(biāo)志牌枚舉出來(例如,“限高4.5 m”和“限高5 m”被分為兩類),訓(xùn)練出的識(shí)別算法在實(shí)際應(yīng)用中容易遺漏掉沒有被枚舉出來的其他限速類、最低限速類和限高類交通標(biāo)志牌。
另外,由于TT100K中只標(biāo)注了左轉(zhuǎn)、直行等動(dòng)作指示類交通標(biāo)志牌(如圖1(a)所示),而沒有標(biāo)注車道指示類交通標(biāo)志牌(如圖1(b)所示)。因此,在實(shí)際應(yīng)用中會(huì)出現(xiàn)將車道指示類標(biāo)志牌誤識(shí)別為動(dòng)作指示類標(biāo)志的情況。
圖1 標(biāo)志牌
為解決目前國內(nèi)交通標(biāo)志牌數(shù)據(jù)集標(biāo)注分類不清的問題,本文重新制作了中國交通標(biāo)志牌數(shù)據(jù)集并且為了提升交通標(biāo)志牌識(shí)別精度,提出了基于兩階段分類算法的交通標(biāo)志牌識(shí)別算法框架(如圖2所示)。本文提出的算法首先對(duì)YOLO系列單階段目標(biāo)識(shí)別算法進(jìn)行改進(jìn)作為檢測(cè)模塊,用于檢測(cè)圖像中的前景區(qū)域,然后從原始圖片中截取出前景區(qū)域作為大類分類網(wǎng)絡(luò)的輸入將前景分為“禁止”、“指示”和“警告”這3大類,然后再將前景輸入到對(duì)應(yīng)的子類劃分網(wǎng)絡(luò)對(duì)前景進(jìn)行子類劃分。
圖2 算法架構(gòu)
YOLO系列算法是當(dāng)前性能最好的目標(biāo)檢測(cè)算法之一,該算法具備單階段算法的高實(shí)時(shí)性特征,其在Microsoft COCO數(shù)據(jù)集和Pascal VOC數(shù)據(jù)集上的效果都驗(yàn)證了這一點(diǎn)。本文中作為基線算法的YOLO系列算法首先將圖片縮小到608×608像素大小,然后輸入YOLO系列算法的骨干網(wǎng)絡(luò)(YOLOv3算法的骨干網(wǎng)絡(luò)為Darknet-53,YOLOv4和YOLOX算法的骨干網(wǎng)絡(luò)為CSPDarknet-53)中,得到3個(gè)尺寸分別為76×76、38×38和19×19的特征圖。
YOLOv3和YOLOv4算法會(huì)在最小的19×19特征圖(有最大的感受野)上對(duì)每個(gè)網(wǎng)格生成3種尺寸不同的先驗(yàn)框(YOLOv3先驗(yàn)框尺寸為116×90,156×198和373×326像素,YOLOv4先驗(yàn)框尺寸為142×110,192×243和459×401像素),適合檢測(cè)較大的對(duì)象。在中等的38×38特征圖(擁有中等感受野)上對(duì)每個(gè)網(wǎng)格同樣生成3種尺寸的先驗(yàn)框(YOLOv3先驗(yàn)框尺寸為30×61,62×45和59×119像素,YOLOv4先驗(yàn)框尺寸為36×75,76×55和72×146像素),適合檢測(cè)中等大小的對(duì)象。在最大的76×76特征圖(擁有最小的感受野)上還是對(duì)每個(gè)網(wǎng)格生成3種尺寸的先驗(yàn)框(YOLOv3先驗(yàn)框?yàn)?0×13,16×30和33×23像素,YOLOv4先驗(yàn)框尺寸為12×16,19×36和40×28像素),適合檢測(cè)較小的對(duì)象。YOLOv3和YOLOv4算法會(huì)生成預(yù)測(cè)框相較先驗(yàn)框的位置變化以及長寬放縮尺度,而YOLOX算法并不生成先驗(yàn)框,直接生成特征圖網(wǎng)格對(duì)應(yīng)的數(shù)個(gè)預(yù)測(cè)框左上角的坐標(biāo)以及預(yù)測(cè)框長寬。
由于大特征圖的網(wǎng)格(對(duì)應(yīng)小感受野,適合檢測(cè)小目標(biāo))數(shù)目最多,生成的先驗(yàn)框最多,所以YOLO系列算法有很強(qiáng)的小目標(biāo)的識(shí)別能力,非常適于交通標(biāo)志牌的識(shí)別任務(wù)。
YOLO系列算法的最終輸出為預(yù)測(cè)框的位置、預(yù)測(cè)框內(nèi)為前景的置信度以及前景的分類概率。YOLO系列算法的損失函數(shù)包含3個(gè)部分,分別是預(yù)測(cè)框的回歸誤差、置信度的誤差和類別概率的誤差。YOLO系列算法的損失函數(shù)中的置信度誤差往往使用均方差函數(shù)計(jì)算,類別概率的誤差往往使用交叉熵?fù)p失函數(shù)計(jì)算,而計(jì)算預(yù)測(cè)框的誤差則各有不同,YOLOv3算法使用均方差函數(shù)計(jì)算預(yù)測(cè)框回歸誤差,YOLOv4算法使用CIoU誤差來表示預(yù)測(cè)框誤差,YOLOX算法使用IoU誤差表示預(yù)測(cè)框誤差。
為了使用YOLO系列算法專門檢測(cè)交通標(biāo)志牌前景而不進(jìn)行分類,本文去掉了原損失函數(shù)關(guān)于類別概率的誤差,修改后的損失如下式所示:
圖3 CIoU參數(shù)圖示[30]
通過對(duì)損失函數(shù)的修改,網(wǎng)絡(luò)訓(xùn)練過程中的優(yōu)化目標(biāo)變?yōu)樘嵘A(yù)測(cè)框位置尺寸的準(zhǔn)確度以及提升置信度的預(yù)測(cè)準(zhǔn)確度。一方面,檢測(cè)階段更準(zhǔn)確地對(duì)前景進(jìn)行提取,有助于提升兩個(gè)分類階段對(duì)前景的分類準(zhǔn)確度;另一方面,檢測(cè)階段更準(zhǔn)確地對(duì)預(yù)測(cè)框置信度進(jìn)行估計(jì),有助于降低識(shí)別算法漏檢率。
為了提高檢測(cè)算法的速度,當(dāng)前主流算法都是將圖片進(jìn)行縮小后輸入到識(shí)別網(wǎng)絡(luò)中,以此來減少算法的計(jì)算量。但是在交通場景下,交通標(biāo)志牌在圖像中的占比往往較小,而交通標(biāo)志牌各類別之間的特征差異不大,這就使得交通標(biāo)志牌的分類任務(wù)難度較大,如再縮小圖像,也即舍棄部分像素信息,勢(shì)必會(huì)以降低檢測(cè)精度為代價(jià)。因此為了提高對(duì)交通標(biāo)志牌識(shí)別的準(zhǔn)確率,算法從檢測(cè)模塊中獲取前景,然后從原始圖像中截取前景輸入到分類模塊中,這樣便充分利用了圖像中的像素信息。
表2 EfficientNet-B3網(wǎng)絡(luò)結(jié)構(gòu)
表3 EifficientNet-B3與其他模型比較
EfficientNet-B3的網(wǎng)絡(luò)輸入是分辨率為300×300的RGB三色彩通道圖像,首先經(jīng)過一個(gè)大小為3×3的卷積層被處理為移動(dòng)反轉(zhuǎn)瓶頸卷積層(MBConv)需要的輸入維度;然后經(jīng)過27個(gè)卷積核為3×3或5×5的MBConv提取出特征圖。之后,網(wǎng)絡(luò)借鑒全卷積網(wǎng)絡(luò)(FCN)的思路,將特征圖輸入到一個(gè)卷積核為1×1的卷積層中,這可以將任意尺寸的特征圖轉(zhuǎn)換到特定的通道數(shù);最后通過1個(gè)池化層和1個(gè)全連接層得到輸入圖像屬于各個(gè)種類的概率。訓(xùn)練過程中通過計(jì)算網(wǎng)絡(luò)預(yù)測(cè)結(jié)果與真實(shí)類別的交叉熵?fù)p失函數(shù)作為損失函數(shù),利用Adam算法優(yōu)化網(wǎng)絡(luò)參數(shù)。
因?yàn)楸疚奶岢龅膬呻A段分類算法采用EfficientNet-B3,在保證分類準(zhǔn)確率的情況下,運(yùn)算量和參數(shù)量都達(dá)到最少,也即在相同硬件條件下,分類速度最快,所以識(shí)別算法可以利用最少的時(shí)間消耗來對(duì)識(shí)別準(zhǔn)確率進(jìn)行提升。
為解決上述數(shù)據(jù)集的問題,本文從CCTSDB和TT100K這兩個(gè)中國交通標(biāo)志牌數(shù)據(jù)集中抽取部分質(zhì)量較好的圖片并重新標(biāo)注,標(biāo)注種類如圖4所示,圖片中的交通標(biāo)志牌實(shí)例的標(biāo)注為中心點(diǎn)坐標(biāo),寬高所占像素x,y,w,h,實(shí)例所屬大類C(“指示”、“禁止”和“警示”)和小類Sc(“禁止停車”、“最低速度”和“注意火車”等),所以每個(gè)實(shí)例可以用一個(gè)6維數(shù)組[x,y,w,h,C,Sc]表示。本文數(shù)據(jù)集包含18 955張如圖5所示的圖片以及其中的41 028個(gè)交通標(biāo)志牌實(shí)例,數(shù)據(jù)集中包含實(shí)例數(shù)多于100的種類數(shù)目為53個(gè)(表4)。其中,“禁止”大類下有“禁止停車”等48個(gè)子類,“指示”大類下有“最低速度”等39個(gè)子類,“警示”大類下有“注意火車”等47個(gè)子類。
圖4 交通標(biāo)志牌種類
圖5 數(shù)據(jù)集示例
表4 數(shù)據(jù)集比較
本文所構(gòu)建的數(shù)據(jù)集中禁止類實(shí)例占比58%,指示類占比32%,警示類占比10%。另外,由于一些子類樣本數(shù)較少(少于100),無法用于神經(jīng)網(wǎng)絡(luò)訓(xùn)練,故將這些子類歸入“其他”子類,處理后數(shù)據(jù)集中樣本數(shù)多于100的子類數(shù)為53個(gè)。
本文從自動(dòng)駕駛技術(shù)和高級(jí)駕駛輔助技術(shù)的需求出發(fā),重構(gòu)了中國交通標(biāo)志牌的類別范圍,構(gòu)建得到的數(shù)據(jù)集較已有數(shù)據(jù)集包含的圖片數(shù)目、交通標(biāo)志牌示例數(shù)目和可訓(xùn)練類別(樣本多于100)數(shù)目更多。
首先本文將數(shù)據(jù)集中的圖片按照4∶1的比例劃分為訓(xùn)練集和測(cè)試集,訓(xùn)練集用于訓(xùn)練網(wǎng)絡(luò),測(cè)試集用于測(cè)試最終性能。其次,截取訓(xùn)練集中的交通標(biāo)志牌,將交通標(biāo)志牌實(shí)例劃分為“禁止類”、“指示類”和“警告類”3大類用于訓(xùn)練大類分類網(wǎng)絡(luò),然后再將各大類交通標(biāo)志牌實(shí)例劃分子類,用于訓(xùn)練3個(gè)子類分類網(wǎng)絡(luò)。
本文對(duì)參數(shù)進(jìn)行如下設(shè)置λ=5,λ=λ=1,并利用一臺(tái)配備有主頻為2.3 GHz的Intel(R)Xeon(R)Gold 5118 CPU和3個(gè)顯存為12 GB的Titan V GPU的服務(wù)器對(duì)YOLOv3、YOLOv4和YOLOX算法進(jìn)行訓(xùn)練作為基線算法,并分別對(duì)YOLOv3、YOLOv4和YOLOX算法進(jìn)行改進(jìn)作為檢測(cè)模塊,結(jié)合分類模塊組成two-stage-YOLOv3算法、two-stage-YOLOv4算法和two-stage-YOLOX算法,最后本文訓(xùn)練了傳統(tǒng)兩階段識(shí)別算法Faster-RCNN與本文提出的兩階段識(shí)別算法進(jìn)行比較。
表5為本文算法和基準(zhǔn)算法和Faster-RCNN的性能比較結(jié)果,其中mAP@0.5是Pascal VOC挑戰(zhàn)賽所采用的評(píng)價(jià)指標(biāo),是IoU閾值設(shè)為0.5時(shí)各類別平均準(zhǔn)確率(average precision)的均值,通過比較基準(zhǔn)算法與本文算法可以發(fā)現(xiàn),YOLO系列算法改進(jìn)為twostage-YOLO系列算法后mAP平均提高了8.52%。
本文還比較了算法在工程實(shí)際中的性能。將置信度域值設(shè)為0.5,并根據(jù)Pascal VOC挑戰(zhàn)賽中將與真實(shí)框之間的交并比大于等于0.5的預(yù)測(cè)框視為預(yù)測(cè)正確。將預(yù)測(cè)框與真實(shí)框之間的交并比大于等于0.5且預(yù)測(cè)種類與真實(shí)種類一致時(shí)視為算法識(shí)別準(zhǔn)確,其余視為預(yù)測(cè)錯(cuò)誤來計(jì)算算法對(duì)每種交通標(biāo)志牌的召回率、準(zhǔn)確率和誤檢(檢測(cè)出前景但分類錯(cuò)誤)率,得到的算法性能比較如表5所示。由表可見,YOLO系列算法的誤檢率都在11%以上,這說明YOLO系列算法在檢測(cè)出交通標(biāo)志牌后很容易將其劃分到錯(cuò)誤的類別中,而two-stage-YOLO的誤檢率都在7%以下,平均誤檢率降低了7.42%,這說明本文提出的算法在檢測(cè)出交通標(biāo)志牌前景后的分類準(zhǔn)確率大大提升,這也使得在工程應(yīng)用中,本文提出的two-stage-YOLO系列算法召回率較YOLO系列算法平均提高12.18%,準(zhǔn)確率提高2.70%。在Titan V顯卡上測(cè)試,two-stage-YOLO系列算法的幀率在14幀/s左右,而YOLO系列算法的幀率都在20幀/s以上,本文提出的算法為了提高檢測(cè)精度確實(shí)犧牲了檢測(cè)速度,但是文本算法的檢測(cè)速度要略優(yōu)于同樣是兩階段算法的Faster-RCNN。
表5 本文算法與基線算法以及Faster-RCNN的性能比較
圖6中列舉two-stage-YOLOv3算法在測(cè)試集上的檢測(cè)效果,可以看出本文提出的交通標(biāo)志牌識(shí)別算法框架可以區(qū)分圖4中的車道類標(biāo)志牌和動(dòng)作指示類標(biāo)志牌。Faster-RCNN、YOLOv3以及twostage-YOLOv3的檢測(cè)結(jié)果對(duì)比如圖7所示,圖片中的交通標(biāo)志牌占比較小,F(xiàn)aster-RCNN沒能檢測(cè)出圖片中的交通標(biāo)志牌,而YOLOv3算法檢測(cè)到了交通標(biāo)志牌,但是將真實(shí)的前景的置信度檢測(cè)為較低的0.42并且將“禁止鳴笛”標(biāo)志牌錯(cuò)誤地分類為“其他禁止類”,two-stage-YOLOv3算法成功地識(shí)別出了交通標(biāo)志牌并且將正確的前景的置信度較好地檢測(cè)為0.97(對(duì)于正確的預(yù)測(cè)框,置信度越趨近于1.00越合理)且分類正確。
圖7 檢測(cè)結(jié)果對(duì)比
本文基于中國交通場景特點(diǎn)以及自動(dòng)駕駛系統(tǒng)和高級(jí)駕駛輔助系統(tǒng)對(duì)交通標(biāo)志牌識(shí)別的高準(zhǔn)確率需求,提出了一種基于兩階段分類算法的交通標(biāo)志牌識(shí)別算法。檢測(cè)模塊使用善于小目標(biāo)檢測(cè)的YOLO系列算法對(duì)標(biāo)志牌進(jìn)行檢測(cè),分類第1階段將檢測(cè)到的標(biāo)志牌實(shí)例進(jìn)行大類分類,分類第2階段對(duì)各大類下的標(biāo)志牌進(jìn)行小類劃分。并針對(duì)當(dāng)前數(shù)據(jù)集在實(shí)際應(yīng)用中存在的問題,制作了一組包含種類更多、圖片數(shù)和實(shí)例數(shù)更多的中國交通標(biāo)志牌數(shù)據(jù)集。本文提出的算法通過細(xì)化分類任務(wù),獨(dú)立提升各算法模塊的性能,進(jìn)而提高整體算法的識(shí)別精度。本文提出的two-stage-YOLO系列算法較Faster-RCNN的mAP提升40%以上,較基準(zhǔn)YOLO系列算法的mAP提升了8.52%,平均誤檢率降低了7.42%。