周 晴, 譚功全,2, 尹宋麟, 趙 亮
(1.四川輕化工大學 自動化與信息工程學院, 四川 宜賓 644000;2.四川輕化工大學 人工智能四川省重點實驗室, 四川 宜賓 644005)
道路目標檢測是現代智能駕駛與輔助駕駛技術的關鍵部分,在駕駛過程復雜的交通場景下,若道路目標檢測系統能根據檢測結果,及時地將目標種類以及數據反饋給司機,對道路駕駛安全性的提升起到很大作用。 研究表明,智能駕駛系統實現無人駕駛,可以降低90%的交通事故發生率。 目前,主流的目標檢測算法分為2 類:一類是基于兩階段的目標檢測算法,主要特點是檢測準確率高,但由于參數量大導致運算速度較慢;另一類是基于回歸的目標檢測算法,以YOLO[1],SSD[2]為代表的單階段目標檢測算法。
文獻[3]通過采用多個不同尺度的卷積核對Faster R-CNN 進行改進,并結合當前的卷積神經網絡技術,提高了在復雜道路交通環境下的道路目標檢測精度。 文獻[4]構建了一種基于Faster R-CNN的快速、精確道路目標檢測算法,通過引入反卷積結構,設計AORN 網絡和OALN 網絡的損失函數,提高小目標的檢測性能,相對于原始算法精度提升了0.15%。 文獻[5]將K-Means++聚類算法應用到YOLOv3 算法中,改善了聚類結果不穩定的問題,并改進損失函數利用DIOU-NMS 去除余框,減少錯誤抑制,改進后的算法模型準確率有了一定程度的提升。 文獻[6]為解決真實道路場景下近、遠目標車輛檢測率低與魯棒性差的問題,重新構造Darknet-53 的內部網絡結構,增加了一個檢測層,并利用K-Means聚類算法選取合適的先驗框,引入GIOU 損失函數對交并比(Intersection over Union,IoU)損失函數進行改進,模型的實驗結果平均精度與召回率分別提升了11.05%和5. 20%。 文獻[7]通過無人機獲取樹木數據集,并將數據集分為2 個子集分別用來訓練和驗證。 基于3 種目標檢測算法R-CNN,YOLOv3以及SSD 分別進行訓練與驗證,結果表明3 種模型評估后的準確率都超過93%,SSD 模型的牙冠拔除效果最好,R-CNN 模型推斷速度優于YOLOv3。
以上研究對目標識別與檢測的準確率有了提升,但是為了提升準確率導致深度神經網絡[8]變得越來越深,同時計算量與參數越來越大。 這些計算密集型[9]與存儲密集型[10]的深度卷積神經網絡的運算力,已經不能被移動端設備所承載。 在實際道路目標檢測中,算法模型的推斷速度對算法性能的評估至關重要。 Howard 等在2017 年提出輕量級骨干網絡模型——MobileNet[11],該網絡模型引入深度可分離卷積模塊,減少了大量的卷積運算與浮點運算。
為進一步減少模型的參數量,本文以YOLOv3為基礎,將主干網絡替換為輕量化的MobileNetv3-Large 網絡,同時為了加速訓練中模型的收斂,融合注意力機制CBAM[12]保證模型輕量化。 對YOLOv3算法網絡模型使用動態聚類算法ISODATA[13],重新設計與檢測目標中相比較匹配的先驗錨框,并分配對應的檢測尺度。 將主干網絡替換為CBAM 與MobileNetv3-Large 結合的特征提取網絡,在保證檢測準確率的前提下,提升算法的推斷速度,經改進后的算法模型可以嵌入移動設備端應用于輔助駕駛。
2016 年Redmon 等提出了一種單階段的目標檢測算法——YOLO(You Only Look Once)[14],經過一系列發展從YOLOv1,YOLOv2 再到2018 年提出了YOLOv3。 YOLOv3 相對于YOLOv2 將主干特征提取網絡替換為Darknet-53[15],共包含53 個卷積層且引入了殘差塊,是一個全卷積網絡,在Darknet-53 網絡結構中,采用了大量的3×3 和1×1 卷積[16],分別用來增加網絡的通道數和改變數據維度。 Darknet-53的網絡結構如圖1 所示。

圖1 Darknet-53 的網絡結構Fig.1 Network structure of Darknet-53
Darknet-53 是YOLOv3 用來對輸入圖像進行特征提取的網絡,借鑒了YOLOv2 中的Darknet-19 網絡結構思想,不同的是,Darknet-53 引入了大量的殘差模塊,為了增加網絡的深度提取更高級別的語義特征[17]。
針對道路目標檢測中算法模型參數量較大的問題,原始YOLOv3 算法模型參數量較大,不能應用于移動設備。 因此本文提出以YOLOv3 檢測算法為基礎,將算法的主干網絡部分替換為輕量化網絡模型MobileNetv3,保證了網絡的輕量化,在特征融合模塊與Bneck[18]模塊中加入了CBAM 注意力機制,網絡結構如圖2 所示。 輸入416×416 圖片在主干特征提取后經過5 次卷積,送入13×13 尺度的預測層進行預測的同時進行上采樣,與主干網絡26×26 尺度的特征圖進行拼接送入26×26 尺度預測,最后的52×52 尺度預測層是由主干網絡輸出特征圖經過2 次上采樣后與特征提取網絡中52×52 尺度的特征圖拼接得到。

圖2 YOLOv3_M 算法網絡結構Fig.2 YOLOv3_M algorithm network structure
MobileNet 輕量化模型是最先進的目標檢測算法之一,2019 年由Google 發布,在輕量級神經網絡中比較具有代表性。 MobileNet 是能夠在移動端使用的輕量化網絡模型,可以在移動終端實現眾多應用。 它的主要思想是使用深度可分離卷積代替普通的2D 卷積,用深度卷積搭配逐點卷積的方式提取待檢測圖像的特征,以減少卷積層的時間與空間的復雜度。 MobileNetv1 與MobileNetv2 的微結構如圖3所示。

圖3 MobileNetv1 與MobileNetv2 微結構Fig.3 MobileNetv1 and MobileNetv2 microstructures
MobileNetv2 相對于V1 加了一個1×1 的“擴張”層(PW),用來提升維度,在3×3 網絡之后再利用1×1 進行降維,并去掉第2 個逐點卷積后的激活函數,不再進行ReLU6 層,因為經過ReLU6 層將會損失部分特征,所以直接進行殘差網絡的加法。
MobileNetv3 相對于2 個基礎之上加入了輕量化注意力模型,加快了網絡的運算速度。 Bneck 結構如圖4 所示,整體由2 部分構成,上半部分是Bneck 結構的主干網絡部分,下半部分是Bneck 結構的殘差邊部分。 MobileNetv3 與MobileNetv2 一樣,首先會對輸入進來的特征層利用一個1×1 卷積層對升維,使通道數擴張后進行深度可分離卷積特征提取。 Mobile-Netv3 模型會將提取出來的圖像特征輸入注意力SE模塊中,全局平均池化(Global Average Pooling,GAP)后輸入全連接層FC1 中,將通道數減小為原來的1/4,再經過一個激活函數ReLU[19],FC2 將通道數變為原來一樣后接一個h-swish 函數,將得到的最終向量中的每個元素相乘后送入SE 層特征的對應通道特征矩陣,經過加權后再用 1×1 卷積對特征降維,最終輸出特征圖。

圖4 MobileNetv3 的Bneck 結構Fig.4 Bneck structure of MobileNetv3
傳統YOLOv3 算法中的先驗框是由COCO 數據集通過K-means 聚類生成的。 K-means 聚類算法是將樣本聚類成k個簇,選擇合適的k個質心對算法收斂速度有直接的影響,K-Means++是對k進行優化,再對數據進行聚類時隨機性很小,可以減少實驗結果的數據偏差。 但是K-Means 與K-Means++算法的聚類中心k是固定不變的。 而ISODATA 聚類算法可以根據每個目標種類的實際情況來調整聚類中心k,通過2 個操作完成對聚類中心k的調整,即分裂操作與合并操作,目的是為了使數據集的聚類中心靠近客觀真實的聚類結果。 本文選用ISODATA算法對改進數據集重新聚類生成先驗框,具體操作流程如圖5 所示。

圖5 ISODATA 算法聚類流程Fig.5 ISODATA algorithm clustering flowchart
在進行分裂操作時要計算這個簇在橫縱維度上的方差,如果最大的方差σmax超過了設定的閾值σ,那么就在最大方差的維度上分裂成2 個,另一個維度的值保持不變,然后刪除原本的聚類中心:
式中,(λi+,η),(λi-,η)表示分裂后的2 個中心。
在進行合并操作時,計算各個聚類中心的歐式距離,當出現小于設定的閾值dmin時,將這2 個簇合并,重新使用加權平均的方法計算新的聚類中心:
重新生成的先驗框如表1 所示。

表1 更新后的先驗框Tab.1 Updated prior box
卷積注意力模塊是一種結合通道和空間2 個維度的注意力模塊,原理如圖6 所示。

圖6 卷積注意力模塊Fig.6 Convolutional attention module
對于特征提取出來的特征圖,CBAM 模塊會先沿著通道維度推斷注意力圖,然后與輸入特征圖相乘后得到的特征圖再沿著空間維度進行推斷,最后再與通道維度后的特征圖進行相乘輸出:
CBAM 是輕量級的通用模塊且有即插即用的特點,因此可以忽略該模塊的計算量并將其嵌入到所改進的卷積網絡模型中,訓練的模型體積也不會因為嵌入CBAM 而變大。
通道注意力模塊的網絡結構如圖7 所示。 首先將提取后的特征圖送入最大池化層與平均池化層,圖片在被進行池化操作后輸入全連接層,然后將得到的特征語義信息進行相加后經過激活函數得到基于通道注意力的權值結果。 通道注意力的運行機制是在空間維度上對輸入的特征圖進行壓縮,壓縮后得到的矢量結果再輸入下一步操作。 在操作過程中,平均池化和最大池化用來聚合特征映射的空間信息,不同的是平均池化操作對于特征圖的操作是每一個像素點都有反饋,而最大池化在進行梯度反向傳播計算時,只有特征圖中響應最大的地方有梯度的反饋。

圖7 通道注意力模塊Fig.7 Channel attention module
通道注意力機制的表達如下:
空間注意力模塊結構如圖8 所示,輸入特征圖為通道注意力模塊的輸出特征圖。

圖8 空間注意力模塊Fig.8 Spatial attention module
首先對輸入的特征圖做基于通道的最大池化與平均池化操作,然后將2 個池化的結果基于通道做拼接操作,再將特征圖做一個卷積操作對通道進行降維,降為1 個通道數。 最后空間注意力模塊對通道進行壓縮操作,計算如下:
式中,7×7 表示卷積核大小;σ表示進行激活操作。
本文將CBAM 嵌入到改進的網絡結構中,使得網絡能夠有效地關注有用的信息,抑制無關的信息,具體的嵌入位置如圖9 所示。

圖9 改進的特征融合層Fig.9 Improved feature fusion layer
本文的實驗環境配置如表2 所示。

表2 實驗室環境配置Tab.2 Laboratory environment configuration
在實驗過程中的網絡參數配置如下:設置動量為0.9,權重衰減為0. 000 5,訓練中迭代次數設置為100 輪(epoch),同時對學習率使用分步策略,初始值設置為0.001,比率為0. 15 和0. 1。 學習率決定了得到最優值參數的快慢,如果學習率過大,可能使得參數跳過最優值從而導致網絡無法收斂甚至發散;如果學習率過小,則優化效率過低,長時間無法收斂,可能得到局部最優。 因此,在訓練中設置權值衰減系數,此參數會根據模型訓練情況動態改變學習率大小,使得網絡在訓練迭代中總能得到最優值參數。
針對本文所研究的道路目標檢測問題需求,實驗所采用的數據集為混合數據集。 在公開駕駛BDD 數據集中隨機選取7 900 張圖片,數據集中共有8 個類別(car,bus,person,truck,rider,bike,traffic light,traffic sign),在道路目標檢測中,將騎車子的人(rider)以及在道路上的自行車(bike)統歸為rider 類。 同時,使用自動駕駛場景下計算機視覺數據集KITTI,針對現實生活中道路上的目標以及樣本數量不均衡問題,選擇在KITTI 數據集中刪除Van,Train,Dontcare,Misc 這4 個樣本量很少的類別,并且將騎車子的人(Cyclist)這一類別合并在rider 類中去,將Pedestrain,Person-sitting 這2 類合并為person 類。 實驗中部分數據集樣本如圖10 所示。

圖10 部分數據樣本Fig.10 Partial data samples
處理好的數據集共15 381 張圖片,分為7 個類別(car,bus,person,truck,rider,traffic light,traffic sign),并根據處理后的類別生成對應的xml 格式的標簽。 圖片按照9 ∶1 的比例將13 843 張圖片劃分為訓練集,1 538 張圖片劃分為測試集,并且在訓練集中也按照9 ∶1 的比例劃分出1 384 張驗證集,驗證訓練效果。
在目標檢測任務算法中,衡量算法性能好壞的指標包括圖像識別檢測的準確率、測試的時間長短以及訓練模型的參數量。 對實驗結果的最主要評價是看檢測目標值與真實目標值的相符度。 本文中采取如下幾個指標對實驗結果進行評估:
精確率(Precision)是指模型預測結果為正的樣本中,有多少是真的正樣本的數值的比率:
召回率(Recall)是指原始數據集中正樣本有多少被模型成功預測正確的數值的比率:
式中,TP,FP和FN分別表示正確檢測框、誤檢框和漏檢框的數量。
平均精度均值(mean Average Precision,mAP)的計算為單個類別的精確度的綜合除以整體類別數。以每秒檢測幀數(Frames per Second,FPS)作為道路目標檢測過程中檢測實驗結果的好壞評價指標,即:
本文實驗過程中, 將混合數據集分別在YOLOv3,YOLOv3_ISODATA 以 及YOLOv3_M 上 進行訓練100 個epoch,訓練每一個epoch 記錄一次損失值數據,網絡模型的損失函數曲線如圖11 所示。

圖11 損失函數曲線Fig.11 Loss function curve
可以看出,改進后的YOLOv3_M 算法相比較YOLOv3 算法訓練的前20 輪下降速度較快,在75 輪之后開始收斂,相比較未改進之前的算法收斂性較強,可以證明改進算法的有效性。
本文為對比改進后算法模型的作用,分別使用BDD 與KITTI 混合數據集對YOLOv3,YOLOv3_ISODATA 以及YOLOv3_M 三種網絡模型進行訓練實驗。 編寫代碼使用各個網絡訓練得到的權重模型計算P,R 值,并繪制成PR 曲線圖,得到各個算法類別AP 值,本次實驗中共有7 個類別,按照標簽框數量選取4 個類別的PR 曲線,目標類別分別為car,traffic light,person,truck,如圖12 和圖13 所示。 可以看出,4 個類別在改進后的算法模型YOLOv3_M 上的AP 值相對于原始YOLOv3 算法分別提高了3.81%,5.79%,4.17%和2.66%。

圖12 改進前網絡類別AP 曲線(YOLOv3)Fig.12 AP Curve of network before improvement (YOLOv3)

圖13 改進后網絡類別AP 曲線(YOLOv3_M)Fig.13 AP curve of network after improvement (YOLOv3_M)
為了確定算法改進的有效性,選取經典的目標檢測算法和改進后的算法進行實驗結果對比分析,對比實驗的數據主要為模型的大小、算法的訓練速度以及mAP。 本文選擇了經典的一階段目標檢測算法 (Single Shot Multibox Detector,SSD),其主干特征提取網絡VGG16 包含13 個卷積層和3 個全連接層,所有的卷積層采用3×3 的卷積核進行卷積,加深了卷積神經網絡,由于VGG16 網絡架構權重數量相當大且全連接節點的數量較多,訓練數據非常慢。另外,選擇了二階段目標檢測算法Faster R-CNN,其主干特征提取網絡ResNet50 加入殘差學習的思想,解決了深層網絡中梯度彌散和精度下降的問題,模型大小相當于VGG16 的一半,但是訓練的速度卻很緩慢。 為了進一步驗證算法改進的有效性,選擇YOLO 系列的目標檢測算法進行訓練測試,YOLOv4算法的主干特征提取網絡的模型參數相比較基礎YOLOv3 算法要小很多,但是相比較改進后的YOLOv3_M 算法模型,YOLOv4 參數仍然很大。 輕量化模型YOLOv4_tiny 是YOLOv4 的簡化版,權重大小只有87 MB,相對于本文改進的YOLOv3_M 算法模型參數少了很多,但是更少參數以及更快速度的代價是犧牲了準確率,并且YOLOv4_tiny 只有2 個檢測頭,所以對于小物體檢測以及目標有重疊或者遮時檢測精度較差,具體實驗的結果數據如表3 所示。

表3 各網絡精度對比Tab.3 Comparison of accuracy of each network
數據對比分析:VGG16 訓練模型達到280 MB,訓練速度56 幀/秒,比YOLOv3_M 算法運行速度慢且檢測精度低很多。 ResNet50 模型大小相當于VGG16 的一半大小,但訓練的速度緩慢,只達到136 幀/秒,且精度不高。 YOLOv4_tiny 雖然權重大小只有87 MB,但是檢測精度較差,只有46.68%,比YOLOv3_M 低14. 27%。 本文的應用場景是在輔助駕駛中的道路目標檢測,需要兼顧目標檢測的速度與準確率。 YOLOv3_M 訓練后檢測結果比YOLOv3算法的mAP 提升了0. 7%,用輕量化模型Mobile-Netv3 代替主干特征提取網絡Darknet-53,并在特征融合部分引入了注意力機制CBAM 后,模型的推斷速度達到了84.3 幀/秒,提升了18.3 幀/秒,且模型的大小相比較原始算法YOLOv3 縮減了229. 4 MB。綜上所述,YOLOv3_M 綜合評價上優于YOLOv4_tiny算法,兼顧了推斷速度與檢測精度,在實際道路目標檢測中場景中,符合輕量化模型這一需求。
針對傳統YOLOv3 算法模型參數大、在實際應用中訓練數據時間較長且應用終端設備受限的問題,本文提出了一種輕量化的道路目標檢測算法——YOLOv3_M。 該方法以單階段目標檢測算法YOLOv3 為基礎,運用輕量化模型與注意力機制的相關知識,將改進后的模型在混合數據集上進行訓練。 所提出的算法在BDD 與KITTI 混合數據集上測試的mAP 為60.95%,訓練速度為84.3 幀/秒,結果證明該算法是可行且有效的,并且可以將該算法移植于移動端設備中以輔助駕駛,具有廣闊的應用前景。