黃 橋,胡紹林,張彩霞
(1.佛山科學技術學院 機電工程與自動化學院,廣東 佛山 528000;2.廣東石油化工學院 自動化學院,廣東 茂名 525000;
交通標志是自動駕駛和導航等領域的重要研究對象,其中交通標志檢測是目標檢測領域一個重要的方向,在無人駕駛和自主導航等領域有重要應用。應用最廣的交通標志檢測方法是基于視覺的方法。
交通標志種類繁多,我國常見的交通標志主要分為提示、禁止、警告等3種類型,本文以這3類交通標志為研究對象,進行自動檢測。由于這3種類型的交通標志外觀上有一定的差異,指示標志和禁令標志雖然大多都是圓形,但顏色有所不同;警告標志外觀和顏色二者都不同。因此,可以根據這些共同特征,進行簡單的分類。
傳統(tǒng)的目標檢測算法通常是先進行候選框的提取,候選框的提取通常采用滑動窗口的方法進行,然后是對每個窗口中的局部信息進行特征提取,最后對候選區(qū)域提取出的特征進行分類判定[3]。其中分類器包括Adaboost[4]、SVM[5]、Decision Tree[6]和DPM[7]特征等。對候選區(qū)域提取的特征進行訓練分類操作需要人為設計,人工設計特征描述的方法需要巨大的工作量,比如DPM算法用來檢測人的激勵模板不能拿去檢測小貓或者小狗,所以在每做一種物件的探測的時候,都需要人工來設計激勵模板,為了獲得比較好的探測效果,需要花大量時間去做一些設計。
綜合上述分析,傳統(tǒng)的目標檢測方法更加適用于有明顯特征,背景簡單等理想的目標,且由于該方法是基于滑動窗口的區(qū)域選擇策略,因此傳統(tǒng)的目標檢測方法針對性不足、算法耗時長、算法計算過程產生的冗余窗口太多、難以普及和對多樣性變化的魯棒性弱[5]等缺點。
在目標檢測領域中,當前應用較廣的交通標志檢測是基于深度學習的方法,該方法的優(yōu)點是獲取的信息量大、成本低、容易普及[8]。相比傳統(tǒng)的目標檢測方法,深度學習目標檢測算法適合對復雜多變下的抽象特征目標的檢測[9]。目前,主流的深度學習目標檢測算法主要分為兩類:一類是two stage的方法,即先通過算法產生候選區(qū)域(region proposals),然后通過卷積神經網絡對候選區(qū)域分類;另一類是one stage的方法[10],該方法不需要先產生候選區(qū)域再分類,它只需要一步就可以預測出目標的邊界框,從而直接給出檢測結果[11]。
SSD(single shot mulitbox detector)是Wei Liu[12]在ECCV2016上提出的一種基于卷積神經網絡的目標檢測算法。SSD算法相比Faster RCNN有明顯的速度優(yōu)勢,相比YOLO又有明顯的mAP(mean average precision)優(yōu)勢[13]。SSD作為one-stage類目標檢測算法之一,它只用一個全卷積網絡就完成了目標分類和定位任務[14]。其結構如圖1所示。從圖1中可以看出,SSD使用6個不同特征圖檢測不同尺度的目標。低層預測小目標,高層預測大目標。
圖1 SSD網絡結構
目標檢測算法中常見的特征提取網絡有VGG16、DarkNet、MobileNet和ResNet。SSD采用了VGG16中的前5層網絡,并把VGG16網絡結構的兩個全連接層FC6和FC7分別改成3×3和1×1的兩個卷積層,這增加了新的卷積層來獲取更多的特征圖[15]。輸入圖像經過特征提取網絡進行特征提取,并在各個卷積層中進行卷積和下采樣等處理。最后通過非極大值抑制(NMS)得到算法的檢測結果。SSD算法將輸出設為300×300和512×512兩種,用于不同尺寸圖像的輸入。本文討論300×300為輸入的情況。其中輸入圖像大小的規(guī)格應是長寬比例應為1∶1,若使用其他尺寸的圖像訓練模型,會引起圖片畸變,模型自動縮放,影響精度。
SSD結合多尺度特征圖共同檢測,其中大尺度特征圖用來檢測小目標,小尺度特征圖用來檢測大目標,盡量能夠保證大小不一的目標都能夠被檢測到。因此SSD檢測算法的結果理論上能達到較好的效果,主要有兩個原因:第一是多尺度;第二是設置多種寬高比的錨框(anchor),即在特征圖的每個像素點處,生成不同寬高比的anchor,根據具體情況設置寬高比[16]。假設每個像素點有k個anchor,需要對每個anchor進行分類和回歸,其中用于分類的卷積核個數為ck(c表示類別數),回歸的卷積核個數為4k。設置anchor機制的原因是每一層實際響應的區(qū)域其實是有效感受野區(qū)域,但在訓練過程中并不知道有效感受野的大小,為了解決這個問題,提出了anchor技術。
1.1.1 入組標準 ①血清總膽紅素水平≥342 μmol/L;②胎齡37~42周;③日齡1~28 d;④無明確嚴重的圍生期高危因素;⑤出生時無窒息復蘇搶救史;⑥本研究的實施已取得醫(yī)院倫理委員會同意批準。
SSD目標檢測算法中,雖然理論上它的檢測精度會隨著網絡的深度增加而提高,但在反向傳播時梯度爆炸會導致簡單堆疊的卷積層不能很好地訓練網絡[17]。換而言之,隨著卷積神經網絡層數的增加,訓練集上的目標檢測的準確率反而下降。交通標志復雜多變,存在不同環(huán)境下的背景,且采集的圖像距離交通標志遠近不一,當較遠處的目標檢測時,SSD算法并不一定能夠檢測出來。
為了提高對輸入圖像的特征提取能力,本文將殘差網絡引入到SSD模型中,將VGG16部分替換成ResNet50,構建SSD-ResNet網絡結構,用50層網絡擬合一個殘差映射可以解決深層網絡精度退化問題。用多個累積的非線性層擬合一個映射F(X),H(X)是目標最優(yōu)解的映射,關系如式(2)所示:
F(X)∶=H(X)+X
(2)
此時,最優(yōu)解映射H(X)與F(X)+X是等價的,圖2所示為一個殘差學習模塊,根據該方式能將快捷連接實現。
圖2 殘差學習模塊
圖2中的X代表模塊的輸入向量,Y代表模塊的輸出向量,Wi代表權重層參數,當輸入和輸出維度一致時,需要增加一個線性投影WS來匹配維度[18]。
殘差學習模塊往往需要兩層以上,在實際計算中,為了考慮計算成本,對殘差學習模塊做了計算優(yōu)化,即將殘差學習模塊中的兩個權重層替換為3個不同的權重層。這兩種不同的殘差學習模塊如圖3所示。ResNet網絡采用圖3中這種跳躍結構來作為基本的網絡結構,該跳躍結構又被稱作Bottleneck,其中,圖3(a)是使用于小網絡的殘差模塊,圖3(b)結構的1×1卷積用于降維,該形式的跳躍結構是適用于大網絡的殘差模塊,本文采用的ResNet50網絡屬于大網絡。
圖3 兩種殘差學習模塊
ResNet50總共有16個Bottleneck,每個Bottleneck包含3個卷積層,最后加上輸入層的卷積層和最后的全連接層構成了50層的殘差網絡。添加深度殘差網絡的目的,是克服傳統(tǒng)CNN網絡隨著層數加深到一定程度之后越深的網絡反而效果更差的缺陷,避免因過深的網絡引起分類準確率下降。如圖4為殘差網絡替換VGG16后的網絡結構圖。
圖4 SSD-ResNet50網絡模型
以ResNet50作為提取網絡,刪除掉ResNet50后面的全連接層,再增添幾層額外的卷積層提取特征,得到不同尺度的特征圖,然后我們讓這些不同層次的特征圖分別預測不同大小的目標,淺層卷積層提取到的是比較細小的特征,越深層的卷積提取到的信息會越豐富,因此我們讓淺層的卷積特征圖去檢測小的目標,讓深層的卷積特征圖去檢測大的目標。該網絡總共有65層,包括59個卷積層和5個池化層,每個經過池化層后輸出的特征層,它的大小都會減小為上層輸入大小的一半,最后的特征層輸出為1×1。選擇模型中Conv4_6、Conv5_3、Conv6_2、Conv7_2、Conv8_2、Conv9_2、Conv10_2,將這7種不同尺度的特征層用于預測交通標志,輸出交通標志類別置信度和檢測框偏移量,本文使用Jaccard Overlap策略匹配目標框,其中Jaccard Overlap的閾值設置為0.5,最后使用非極大值抑制[19]去除多余的預測框。
原SSD算法對每一張?zhí)卣鲌D,按照不同大小和長寬比生成多個默認框,是基于多尺度的方法得到目標檢測結果。對于不同尺度特征圖,就會設置不同大小和寬高比的先驗框,其計算見式(3):
(3)
其中:k的取值范圍為[1,m],m為特征層數,Smin和Smax分別代表最小和最大特征層尺度,對應的默認值一般為0.2和0.9。中間特征層尺度均勻分布。
SSD算法默認的anchor的寬高比設定為:ar∈{1,2,3,1/2,1/3}。先驗框的寬、高見式(4)和(5):
(4)
(5)
先驗框生成之后,把不同尺度的特征輸入到預測網絡,然后進行預測計算,最后將輸出的預測結果分為兩部分。一部分是預測框的修正值,另一部分就是框內目標的概率。
在實際訓練中,Smin和Smax的值往往需要多次嘗試,本質上是盲目搜索的,這樣會導致檢測效率變差。為了更符合交通標志數據的特點,本文使用K-means++方法對目標框統(tǒng)計數據進行聚類,代替原SSD中生成的默認框基準大小Sk。
K-means++算法是隨機從當前數據中選取一個樣本作為初始聚類中心,然后計算每個樣本與當前已有聚類中心之間的最短距離。本文先獲取訓練集樣本,然后按照輪盤法選擇總共K個聚類中心,針對目標框中每個樣本,計算該樣本到K個聚類中心的距離并將其分到距離最小的聚類中心對對應的類中,最后針對每個類別重新計算它的聚類中心直到位置不再改變。本文采用曼哈頓距離[20]來衡量相似度,依次選出它能更快地找到合理的先驗框長寬比,對先驗框重新設計,提高檢測精度。
先驗框的設置從尺度和長寬比等方面來考慮。先驗框的尺寸有一個線性增加規(guī)律:隨著特征圖尺寸的減小,先驗框尺度線性增加。圖5為交通標志數據集的真實寬和高的聚類,交通標志的寬、高聚類中心大多聚集在[62, 86],[108, 150],[174,243]附近,寬高比大多在0.72左右,因此本文將特征圖上每個滑動窗口的尺度生成寬高比為18∶25,在各個卷積層使用該比例大小的尺寸作為先驗框的固定尺度,第一個先驗框單獨設置,為第二個先驗框尺度的一半。另外,對先驗框重新設計后產生數量比原來的先驗框數量更少,提高了檢測精度。
圖5 真實框寬高聚類結果圖
本文的交通標志數據集來源于現有的中國交通標志檢測數據集(CCTSDB),圖像的分辨率為600×600。用labelImg工具對其進行標注,生成PASCAL VOC數據格式。根據實際需求劃分訓練集、驗證集和測試集,將數據集的60%作為訓練集,剩下的數據集分為測試集和驗證集,且兩者的比例相同,因此測試集和驗證集是相互獨立的,這樣可以確保后面的評價標準是可信的。利用驗證集評估模型,找到訓練過程中模型的最佳參數,然后采用該參數在測試集上進行測試。
為了提高關于目標大小和形狀的魯棒性,SSD采用了數據增強的隨機采樣策略。數據增強是為了在不降低檢測精度的情況下提高算法的魯棒性,不同數據集用到的數據增強的方法不同, 特定場景和實際應用中,一般很難收集滿足各種條件的數據用于訓練和測試, 因此許多目標檢測算法都采用數據增強的方式來評估所設計的算法泛化能力,常用的數據增強方法包括水平翻轉、平移、裁剪和顏色抖動等。本文對采集的自然環(huán)境下的圖像數據進行數據增強操作以驗證模型的泛化能力。
本文使用PyCharm軟件訓練網絡和測試模型,配置運行環(huán)境,計算機的配置為:Windows10 64位操作系統(tǒng),處理器(CPU)型號為Intel i7,內存(RAM)為8 GB,顯卡(GPU)是NVIDIA GeForce GTX。開發(fā)環(huán)境的軟件配置及版本:Anaconda3、CUDA10.0、cuDNN7.6.3、Python3.7.6、TensorFlow-GPU1.14.0。
為驗證本文方法的有效性,訓練改進前后的算法,并對比其模型評價指標結果。準備好交通標志數據集,為了提高模型的性能,對數據集進行數據增強和尺寸調整等預處理。然后利用labelImg圖像標注工具,對圖像中的目標畫矩形框,得到xml格式文件,最后利用得到的文件制作所需要的數據集進行訓練。經過反復訓練,迭代次數達到10 000次左右,總損失值能達到最小并收斂,因此本文將訓練次數設定為10 000次,初始學習率設為0.001。在訓練前,加載VGG16或ResNet50的預訓練模型,訓練模型參數初始化,加載預訓練模型是因為防止數據量過小出現過擬合現象[21],因為模型參數在開始都分布在一個性能強的范圍之內,所以可以緩解過擬合,能夠加快模型的收斂速度。
通過Tensorboard觀察訓練過程中每個類別的平均準確率(mAP, mean average precision)的變化,如圖6所示,改進SSD算法的mAP值上升較快,且mAP值較高,都在0.9附近。
圖6 改進算法mAP值變化圖
測試改進的SSD算法與原SSD算法可以比較它們的檢測效果,其中有三組交通標志檢測圖像,分別是SSD算法檢測結果,改進的SSD算法與原算法對比和改進算法的小目標測試效果。
圖7為采用SSD算法訓練模型檢測到的結果,可以看出,直接采用SSD算法訓練交通標志數據集得到的交通標志檢測模型,各類別的交通標志圖像檢測的準確率較低。
圖7 SSD檢測示例圖像
由圖8可見,改進后的交通標志檢測效果相較于未改進的算法定位更加準確。原算法中的定位與目標位置相差較大,而改進后的算法與目標位置吻合度較高。
圖8 改進的SSD算法與原算法效果對比
圖9為改進算法對較小的交通標志的檢測,從圖中的檢測案例可以看出,較遠距離的交通標志比較模糊且目標很小,原算法幾乎不能檢測出來,改進的SSD算法能夠將小目標檢測出來,且在準確率方面取得了較好的效果。
圖9 小目標檢測實例圖像
上述實驗結果顯示,改進的SSD算法在檢測精度和對小目標檢測方面相比原算法效果更優(yōu)。
目標檢測任務中,需要對模型進行評估,性能評估使用各種統(tǒng)計量如準確率(accuracy),精確率(precision),召回率(recall)等,其計算方法如式(6)和(7):
(6)
(7)
準確率即正確預測的目標數量除以總的目標數量;精確率是指在所有預測結果中,預測正確的數量和總的預測數量之間的比值;召回率則是測試集中所有的正樣本被正確識別為正樣本的比例。其中:TP(true positive)為算法預測的為真的正樣本;FP(false positive)為算法預測為真的負樣本;FN(false negative)為算法預測為假的正樣本。
本文使用每個類別的平均準確率mAP作為算法性能的評價指標,mAP可以用來度量模型預測框類別和位置是否準確的指標。表1為改進SSD算法與其他算法的mAP值對比。其中SSD*表示改進的SSD算法。
表1 改進算法與其他算法的mAP值對比
從表1可知,改進的SSD檢測算法的精度和速度均高于其他算法,因此可以說明提出的改進方案是有效的,且改進的算法適合對自然場景下交通標志的檢測。
本文針對道路交通標志檢測精度較低的問題,提出了一種改進的SSD目標檢測方法,將原SSD算法中的VGG16特征網絡替換為特征表達能力更強的ResNet50,并采用K-means++確定先驗框大小,解決了原SSD模型隨機確立先驗框大小的缺點。
實驗結果表明,本文改進的SSD算法訓練的交通標志檢測模型,在檢測精度方面有所提高,彌補了原SSD算法在自然環(huán)境下對道路交通牌目標檢測準確率低的缺點,提高了對遠距離交通牌等小目標檢測的識別率。本文所建立的道路場景下的交通標志檢測方法具有理論參考和實際應用價值。