陳家棟, 雷 斌
(1.武漢科技大學 機械自動化學院,湖北 武漢 430081; 2.武漢科技大學 機器人智能系統研究院,湖北 武漢 430081)
近年來,汽車數量不斷增加極大地方便了出行,但隨之帶來的交通擁堵、交通事故等問題也在逐漸增多,為解決這些交通難題和交通壓力,智能交通系統應運而生[1]。車輛檢測作為智能交通領域中核心問題之一,更是成為了研究的重點和熱點。
隨著計算量增大和深度學習的廣泛使用,基于卷積神經網絡(convolutional neural network,CNN)的檢測算法已成為目標檢測領域常用的算法。典型網絡有:Fast R-CNN[2],Faster R-CNN[3],Mask R-CNN[4],YOLO[5],SSD(single shot multi-box detection)[6]。在上述眾多算法中,SSD具有檢測速度快、準確度高兩大優點,是目前的檢測性能相對較好的算法。本文也將采用該算法來進行交通目標的檢測。但算法在小目標檢測時效果不理想,會出現漏檢的現象,并且由于計算和內存的限制,算法也很難以在嵌入式平臺上直接應用。
為增強目標檢測對小目標檢測的準確性,文獻[7]提出一種多目標檢測框架,通過對高分辨率圖像進行下采樣,動態放大低分辨率的方法解決小目標精度不高的問題;文獻[8]提出在SSD算法中引入轉置卷積結構,使低分辨率高語義信息特征圖與高分辨率低語義特征圖相融合,從而提高小目標檢測能力。但這些方法都是通過增加網絡層數來提高小目標的檢測率,使得網絡變得復雜。為了縮小網絡模型結構、減小計算量,文獻[9]提出了一種輕量級的SSD網絡,使用深度卷積神經網絡(DCNN)和通道重排提取特征圖的最小單元方法使算法可以用于嵌入式ARM設備上;文獻[10]將SSD的前端網絡替換成MobileNet網絡模型,直接通過減少網絡層數減小網絡參數,使得計算速度加快。但在檢測效果不是很好,檢測率會有所下降。
因此,為實現算法能在硬件平臺上有較高的檢測率,本文提出一種改進SSD輕量化的車輛目標檢測方法。用MobileNetV3網絡替換SSD算法的前端網絡VGG16,從而減小網絡參數量和層數,提高處理速度并縮小模型大?。恢匦略O計特征提取層采用上下特征層交叉融合方法提高算法在小目標檢測上的不足;在處理損失方面將Focal Loss分類損失與廣義并交比(generalized intersection over union,GIoU)回歸損失融合,降低損失率從而提高準確率。本文所改進的算法將在自制使用無人機航拍的數據集上得到驗證。
Liu W在ECCV2016會議上首次提出單階段目標檢測算法SSD。該算法借鑒Faster-RCNN的Anchor Boxes機制,增加對不同大小形狀物體的魯棒性;借鑒YOLO的回歸思想,使得SSD在檢測速度快的同時保證了檢測精度。此外,算法增加了多尺度特征屬性圖,用淺層網絡檢測小目標、用深層網絡檢測大目標,使檢測率進一步提高。SSD的網絡結構主要由兩部分組成:前一部分是位于前端的DCNN VGG16,其目的是用于目標初步特征提取;后一部分是位于后端的多尺度特征檢測網絡,類似金字塔式的CNN組成,目的是將前端網絡產生的特征層進行不同尺度條件下的特征提取。SSD網絡結構圖如圖1所示,輸入圖片會經過大小不同的特征圖分別為Conv4_3,Conv7,Conv8_2,Conv9_2,Conv10_2,Conv11_2上進行特征提取。不同特征圖的尺寸和感受野不同,所對應的默認框也會不同,利用淺層特征圖檢測小目標,深層特征圖檢測大目標。經過6層大小不一特征圖的特征提取,最終會得到8 732個初選特征框用于后續的分類和標定位置任務。

圖1 SSD網絡結構
SSD模型的損失函數是由定位和分類損失函數共同組成的,表達式如下
(1)
式中Lconf(x,c)為分類損失函數,采用SoftMax Loss;Lloc(x,l,g)為回歸損失函數,采用Smooth L1 Loss;x為候選框與真實框相匹配的結果,若匹配則x=1,否則為0;N為候選框與真實框匹配的個數;c為類別置信度預測值;l為預測框位置偏移值;g為真實框與候選框的偏移值;α為回歸損失的權重參數,通常為1。
近年來,隨著智能應用設備的廣泛應用,輕量化網絡已成為當今研究的熱點。傳統的減輕網絡方法是在已經訓練好的模型上進行壓縮,修改或刪除部分網絡參數,從而解決問題。但輕量化模型是從改變網絡結構出發,重新設計出更高效的網絡計算方式,從而使網絡參數減少的同時,不損失網絡的性能。現階段已成功實驗的輕量化網絡有:MobileNet系列,ShuffleNet系列,Xception等,使用組卷積、1×1卷積等技術減少網絡計算量的同時,盡可能地保證網絡的精度。
MobileNetV3是在MobileNetV2的基礎上進行了4點改進,使算法性能和運行速度進一步提高。首先,MobileNetV3借鑒了MnasNet網絡的SE(squeeze and excitation)結構,將原來SE結構的通道數目更改為原來的1/4,即提高了精度同時還沒有增加時間消耗;其二,對尾部結構進行了修改,將特征圖大小由7×7降到了1×1,完成后在用1×1卷積提高維度,從而減少7×7倍數的計算量;其三,為進一步提高檢測速度,修改了前端卷積核的通道數從原來的32修改為現在的16,最后,使用H-swish函數替換了MobileNetV2中的swish函數,減少計算耗時提高網絡模型效率。
為應對不同的工作環境和滿足不同實驗平臺的需要,MobileNetV3網絡通過構造不同的網絡層數和參數生成了兩種網絡結構:一種是Large網絡模式,其網絡層數為20層,檢測精度高但會造成內存消耗過大,增加計算量;另一種是Small模式共有16層。本文使用的是MobileNetV3的Small版本。結構參數如表1所示,Input和Out分別為輸入分辨率和輸出通道;Operator是卷積層,其中Conv2d是標準卷積,Bneck是MobileNetV3網絡的骨架卷積層;Exp Size為膨脹參數;SE為改進后的SE結構,若SE=T時,則在該卷積層使用,否則不使用;NL代表了激活函數的種類,當為HS時模型使用的H-swish函數,反之使用ReLU函數;反之使用ReLU函數;s為步長。

表1 MobileNetV3-small網絡參數
在目標檢測領域邊界回歸交并比(intersection over union,IoU)值是作為評估算法的性能指標,但大多檢測框架中沒有使用IoU去優化損失,而是直接使用Smooth L這些函數來計算損失。相比損失函數來說,IoU直接用于定位損失效果會好一些。但IoU作為損失函數時會出現兩個問題:一是預測框與真實框沒有重疊時,對應的IoU為零,反向傳播梯度為零,無法優化;二是預測與真實框在多個不同方向上重疊,雖IoU值完全相等,但不能準確反映框的重合度大小。因此,GIoU的提出成功解決了IoU的難題,其構造如圖2所示。

圖2 GIoU構造
圖2中A為預測框、B為真實框、最小封閉框C(包含A,B,d1,d2),IoU,GIoU計算公式如下
(2)
(3)
式(3)中減數部分分子為最小封閉框不包含A或者B的部分。GIoU作為一個距離度量指標,其損失函數LGIoU計算如式(4)所示
LGIoU=1-GIoU
(4)
由上述公式可知,GIoU≤IoU,且IoU∈[0,1],GIoU∈ [-1,1]。當預測框與真實框完全重合時GIoU=IoU=1,當預測框與真實框重合越來越少時,IoU趨近0,GIoU越接近-1。因此,GIoU解決了IoU無法反映重疊方式、無法優化IoU為0時的問題,能更好地反映兩框之間的重合度。
在現實目標檢測任務中,負樣本的數量即背景類往往會占很大比重。雖然負樣本的損失較小,但由于大量負樣本數據的存在會使網絡在訓練過程中產生干擾,使正負樣本數量失衡,從而導致模型訓練的效果不好。SSD算法通常是采用非極大值抑制(non-maximum suppression,NMS)困難負樣本挖掘(hard negative mining)算法選取負樣本,使正負樣本按1︰3比例進行分類,在一定程度上起到抑制損失的作用。但NMS在訓練時主要解決難分類的樣本,而忽略了損失較小的易分類的樣本。為解決在訓練過程中正負樣本不平衡的問題,本文使用了Lin T Y等人提出的Focal Loss替換原SSD算法中分類損失的SoftMax Loss,其損失函數如下
(5)
傳統的交叉熵損失沒有添加權重衰減項參數,導致模型對負樣本學習過多,使正樣本無法得到有效訓練。而Focal Loss引入了兩個參數α和γ,分別起到了調整正負樣本的權重和難易分類樣本的權重的作用,有效改善了正負樣本不平衡的問題。通過大量實驗得到,當γ=1,α=0.25時效果最好。
本文改進SSD算法共3個方面:一是用輕量化網絡模型MobileNetV3替換原SSD算法的前端網絡VGG16,構建出新的檢測網絡模型MobileNetV3—SSD(M3—SSD);二是重新設計了特征模塊將原來深層特征與淺層特征交叉融合,進一步解決傳統的SSD算法對于小尺寸物體的檢測效果比較差的問題;三是使用新的損失函數替換了原SSD算法中的分類、定位回歸損失函數,從而減小精度損失,提高算法的準確率。設計新網絡模型如圖3所示。

圖3 改進M3—SSD網絡結構
由圖3可以看出,M3-SSD是采用前端網絡MobileNetV3去除最后一層用于分類的全連接層作為基礎網絡與SSD模型中的多尺度特征層相結合構造成M3—SSD網絡。MobileNetV3替換原SSD中前端網絡VGG16并重新形成新的特征提取層,其提取默認框的6層分別為Conv10,Conv15,Conv17_2,Conv18_2,Conv19_2,Conv20_2。與原SSD模型不同的是M3—SSD第一個用于多尺度檢測的特征圖大小采用的是19×19,其圖上特征信息比38×38更加充分,故M3—SSD的特征圖大小為19×19,10×10,5×5,3×3,2×2,1×1。
M3—SSD網絡模型結合了MobileNetV3和SSD兩種類型網絡的優勢,不僅保持原有SSD網絡結構采用不同尺度的特征圖來做預測,提高預測效率和準確度,而且還通過添加MobileNetV3網絡減少冗余參數和剔除多余卷積層,進一步減少計算量,降低硬件內存資源消耗,有利于縮短訓練時間,改善模型性能。
為解決原SSD算法的淺層特征提取信息不充分導致小目標檢測性能不理想的問題,本文借鑒DSSD模型內Top-Down的特征融合方式,設計了將額外新增的特征提取層進行交叉融合模塊,使特征信息更加全面的表達出來。采用相鄰特征層交叉融合,與Top-Down的特征融合不同的是只在額外增加層上進行融合,沒有將所有特征層進行上下融合,一方面減少了計算量,另一個方面保留了特征信息豐富的特征層。相比較而言,本文所使用的融合方式產生的計算量相對少,損失一定的計算速度的同時大大提高了檢測精度。
在M3—SSD網絡中前2層特征圖(Conv10和Conv15)在輕量化網絡MobileNetV3中提取,其特征信息豐富也可直接用于預測。而將中間新添加的4層特征提取層運用特征融合手段兩兩交叉融合生成,即Conv17_2與Conv18_2特征融合得到新的5×5×512,Conv18_2與Conv19_2特征融合得到新的3×3×512,Conv19_2與Conv20_2特征融合得到新的2×2×512,如圖4所示。

圖4 特征融合模塊
由圖4可以看出,特征圖Conv18_2經過2×2×512反卷積層、3×3×512的卷積層,批量歸一化(BN)后與特征圖Conv17_2經過3×3×512的卷積,BN、ReLU函數和3×3×512的卷積后融合得到的特征圖進行通道相連,在通過1×1卷積升維,BN和ReLU函數后得到新的特征圖Conv17_2。模塊加了3個BN和3個3×3卷積,是為了起緩沖的作用,防止梯度對主干網絡影響太劇烈,保證網絡的穩定性。通過在額外層添加特征融合模塊能夠充分利用上下文語義信息,提升算法的性能,在速度損失不大的情況下,提高了算法的檢測精度。
本文將GIoU損失函數和Focal Loss損失函數同時應用于改進特征層的M3—SSD算法中。將(1—GIoU)作為邊界框回歸損失函數代替原來的回歸損失函數;交叉熵損失為基礎的Focal Loss替換SoftMax Loss作為分類損失函數。改進后的算法不僅平衡了易分樣本與難分樣本的損失占比,還有效改善了IoU存在的問題。最終損失函數如下
(6)
在建立無人機航拍交通路通的數據集時,首先用OpenCV開發庫從錄像視頻文件中按20幀率來截取圖片,保存圖片格式為.jpg,共形成4 500張圖片。采集的視頻中分為汽車(car)和其他(others)兩項,用LabelImg工具對圖像進行標記制成VOC格式數據集,并形成相對應的.xml配置文件,如圖5所示。

圖5 LabelImg標注的數據集
本文實驗設備采用的處理器為AMD7,顯卡采用GTX1660Ti,內存8 GB的臺式機。實驗系統所用環境為Ubuntu 16.04,CUDA10.0,cuDNN10.1,使用的深度學習框架為Pytorch 0.4.1,開發語言為Python 3.5。算法在訓練時優化器選用隨機梯度下降,其參數選擇動量為0.9,權重衰減為0.000 5, Gamma為0.1,初始學習率設置為0.01,訓練時動態調整學習率;訓練參數中Num Workers為0,Debug Steps為100,Batch Size設置為8,Max Epoch設置為200。圖6為算法在訓練時損失值的情況。

圖6 算法訓練情況
使用相同的硬件設備和數據集對SSD,ShuffleNet-SSD(S-SSD)和本文MobileNetV3—SSD(M3—SSD)算法進行實驗對比,由表2可知,不同的算法在車輛目標檢測時,檢測的準確率、幀率、模型大小都各不一樣。原SSD模型的前端網絡是VGG16,其參數比較多,模型較大有105.1 M,FPS只有18,沒有達到人眼的刷新頻率24 FPS,故不能滿足檢測的實時性要求;ShuffleNet作為另一種輕量化網絡模型在替換SSD前端網絡后,檢測速度有了一定的提升,可以滿足實時性要求,但相比SSD檢測率下降了5.7 %;而本文M3—SSD算法其FPS和mAP分別為45和0.625,在保證滿足實時性要求的同時模型的檢測精度輕微下降了3.3 %,表現出一定的穩定性與精確性。圖7為不同網絡模型檢測結果。

表2 不同網絡模型性能比較

圖7 不同模型檢測結果
表3為改進策略前后對檢測效果的影響,實驗均以自制數據集作為訓練集和測試集。通過實驗數據可知,由于改進特征層采用交叉融合方法使網絡模型參數量增大,相比M3—SSD模型FPS變小只有26,但在檢測率上有明顯的提高,增加了2.4個百分點。

表3 改進策略驗證
圖8為不同路段拍攝,改進模型前后的效果圖。其中,(a),(c),(e),(g)為M3—SSD算法,(b),(d),(f),(h)為改進后的結果。改進之后算法的漏檢較少,且對于一些小目標或有遮擋的目標也能第一時間檢測出來。

圖8 改進策略前后檢測對比
本文針對資源有限的硬件系統平臺下的車輛目標檢測技術進行了研究。設計以MobileNetV3為前端基礎網絡的SSD模型框架實現了輕量化網絡,M3—SSD網絡具有計算量低、參數少、資源損耗低、準確率和實時性高等諸多特點。此外,通過對算法的特征提取層進行優化,實現將高分辨率低語義信息特征圖與低分辨率高語義信息特征圖交叉融合,提高SSD算法的小目標檢測能力。通過自制數據集的實驗證明了,本文提出算法在車輛檢測任務中是具有可行性和實用性的。本文研究也為后續無人機搭載檢測設備航拍交通路口,實現無人機處理車輛違法行為、車牌識別、車輛信息融合等更具體的應用奠定了基礎。