張 漪,張美月
(1.內(nèi)蒙古自治區(qū)交通運輸教育中心,內(nèi)蒙古 呼和浩特 010051;2.長安大學(xué)信息工程學(xué)院,陜西 西安 710046)
截至2021 年5 月,公安部公布中國全國機動車保有量達(dá)到3.8 億輛[1],全國有70 個城市汽車保有量超過100 萬輛。日益增加的機動車數(shù)量和落后的交通管理系統(tǒng)是導(dǎo)致城市道路交通擁堵的重要原因,在傳統(tǒng)交通系統(tǒng)之上建立全新的智能交通系統(tǒng)(Intelligent Transportation System,ITS)已經(jīng)成為未來的發(fā)展方向和研究熱點。交通視頻監(jiān)控作為ITS的重要數(shù)據(jù)來源,在不同等級的公路均得到廣泛應(yīng)用,特別在城市路段,監(jiān)控視頻提供的數(shù)據(jù)對緩解城市交通擁堵、提高通行效率以及合理分配交通資源等方面起到重要作用。針對交通監(jiān)控視頻進(jìn)行車輛目標(biāo)檢測是后續(xù)進(jìn)行車輛識別、車輛跟蹤的基礎(chǔ),但在城市交通擁堵路段,環(huán)境復(fù)雜,車流量高,車輛互相遮擋嚴(yán)重,對準(zhǔn)確進(jìn)行車輛目標(biāo)檢測提出了挑戰(zhàn)。
基于圖像或視頻的目標(biāo)檢測是車輛檢測的典型任務(wù)。傳統(tǒng)目標(biāo)檢測方法主要是利用人工構(gòu)建目標(biāo)特征,之后利用分類算法進(jìn)行分類,從而判斷目標(biāo)是否存在,常用分類算法有Haar+Adaboost[2]、Hog+SVM[2]、DPM[3]等。目標(biāo)檢測的傳統(tǒng)方法采用在圖像中進(jìn)行滑動窗口操作,檢測效率低、消耗資源高,并且手工特征魯棒性低、遷移效果差。隨著機器學(xué)習(xí)和GPU 并行計算技術(shù)的不斷發(fā)展,目標(biāo)檢測算法最重要的特征提取工作逐漸由人工構(gòu)建發(fā)展為從數(shù)據(jù)中自動學(xué)習(xí)?;诰矸e神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)逐漸發(fā)展了眾多目標(biāo)檢測算法,按網(wǎng)絡(luò)結(jié)構(gòu)主要分為兩類:One-Stage 結(jié) 構(gòu) 和Two-Stage 結(jié) 構(gòu)[4]。Two-Stage 結(jié) 構(gòu) 是 將 檢測目標(biāo)定義為一個由粗到細(xì)的過程,首先生成一系列的目標(biāo)候選區(qū)域,然后進(jìn)行目標(biāo)分類和校準(zhǔn),此結(jié)構(gòu)檢測效率低,但準(zhǔn)確率高,代表算法有R-CNN[5]、Fast RCNN[6]、Faster R-CNN[7];One-Stage結(jié)構(gòu)則是在檢測時沒有生成候選區(qū)域的步驟,而是對目標(biāo)的類別和邊界直接進(jìn)行回歸,準(zhǔn)確率相比Two-Stage 結(jié)構(gòu)稍低,但是檢測 速 度 快,代 表 算 法 有SSD[8]、RetinaNet[9]、YOLO[10-14]。YOLO 系列算法是目前最廣泛應(yīng)用的目標(biāo)檢測算法之一,并且經(jīng)過五個版本的迭代,YOLO 算法在保留檢測速度快的優(yōu)勢的同時,補齊了檢測準(zhǔn)確率低的短板。YOLOv5 系列[10]由Ultralytics 公司發(fā)布,在COCO[15]2017測試集上的平均準(zhǔn)確率(mean Average Precision,mAP)達(dá)到72%,在GPU 為Nvidia Tesla V100 的條件下達(dá)到2ms/img的推理速度,是目前的領(lǐng)先水平。
基于YOLOv5 的性能優(yōu)勢,在其基礎(chǔ)上進(jìn)行改進(jìn),以提高城市道路交通中車輛檢測的準(zhǔn)確率,同時降低誤檢和漏檢率。首先是引入SE[16]通道注意力模塊到Y(jié)OLOv5 網(wǎng)絡(luò)的Backbone 主干網(wǎng)絡(luò)、Neck 網(wǎng)絡(luò)層、Head輸出端,為測試SE 模塊在網(wǎng)絡(luò)中不同位置對結(jié)果造成的影響,在網(wǎng)絡(luò)的三個不同位置引入并進(jìn)行對比實驗。針對One-Stage 結(jié)構(gòu)正負(fù)樣本不平衡問題,將Focal Loss[9]作為目標(biāo)損失函數(shù)和分類損失函數(shù),以優(yōu)化訓(xùn)練過程。為提高模型魯棒性,在公開數(shù)據(jù)集UA-DETRAC[17]的基礎(chǔ)上引入自建數(shù)據(jù)集。在UA-DETRAC數(shù)據(jù)集進(jìn)行模型訓(xùn)練和驗證,并在自建數(shù)據(jù)集上進(jìn)行測試,結(jié)果表明提出的改進(jìn)YOLOv5算法相較原始算法在指標(biāo)精確率Precision、召回率Recall、平均準(zhǔn)確率mAP上均有所提高,并在城市交通擁堵路段降低了誤檢率和漏檢率[18-20]。
YOLOv5 系列根據(jù)模型參數(shù)(Params)和浮點運算量(FLOPs)的不同分為s、m、l、x四個模型,從s到x模型Params 和FlOPs 不斷增加。針對監(jiān)控現(xiàn)場多為嵌入式設(shè)備,算力不高,因此采用Params和FLOPs最少的YOLOv5s 作為研究的基礎(chǔ)模型。YOLOv5s 采用One-Stage結(jié)構(gòu),由四個模塊組成,分別是Input 輸入端、Backbone主干網(wǎng)絡(luò)、Neck網(wǎng)絡(luò)層、Head輸出端,如圖1所示。
圖1 YOLOv5網(wǎng)絡(luò)模型結(jié)構(gòu)
目標(biāo)檢測模型隨著網(wǎng)絡(luò)層次的加深,提取的信息越來越抽象,對于監(jiān)控圖像中遠(yuǎn)處小目標(biāo)車輛的檢測就更加困難,對于擁堵路段的車輛遮擋問題難以準(zhǔn)確檢測。為此文章通過在網(wǎng)絡(luò)結(jié)構(gòu)中添加注意力機制(Attention Mechanism,AM)的方法改善這一問題。
SE-Net 是典型的通道注意力網(wǎng)絡(luò),SE 模塊的有效性在一些應(yīng)用中已經(jīng)得到驗證,但是在具體將其嵌入網(wǎng)絡(luò)中的哪些位置更有效果,目前還沒有完整的理論說明[21]。文章針對YOLOv5 設(shè)計了三種融合SE 模塊的網(wǎng)絡(luò)模型形成YOLOv5s。如圖1 所示,YOLOv5 包含四個模塊,Input輸入端主要進(jìn)行圖像的預(yù)處理,沒有任何提取特征的操作,因此無需引入注意力機制。由于SE注意力機制本身是對重要的特征通道進(jìn)行增強,因此將SE 模塊分別嵌入Backbone、Neck、Head 三個網(wǎng)絡(luò)模塊中,由此產(chǎn)生的三個新的網(wǎng)絡(luò)模型分別記為SEA_YOLOv5s、SEB_YOLOv5s和SEC_YOLOv5s。
3.1.1 SEA_YOLOv5s網(wǎng)絡(luò)模型
SEA_YOLOv5s 是將SE 模塊嵌入Backbone 形成的網(wǎng)絡(luò),如圖2 所示。Backbone 在YOLOv5 中的主要作用是學(xué)習(xí)數(shù)據(jù)中的高中低不同層次的特征,其中Focus、CBL、BottleneckCSP 和SPP四個模塊主要起到特征聚合作用的是BottleneckCSP??紤]到計算量的問題,將SE模塊嵌入BottleneckCSP結(jié)構(gòu)中。
圖2 SEA_YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)
SE 模塊在Bottleneck 具體的嵌入位置如圖3 所示。SE模塊在Concat之后,也就是在特征融合之后,可以對不同通道的特征進(jìn)行重新標(biāo)定。Backbone 中的四個SE_BottleneckCSP均為此方式。
圖3 SE_BottleneckCSP結(jié)構(gòu)
3.1.2 SEB_YOLOv5s網(wǎng)絡(luò)模型
SEB_YOLOv5s是將SE嵌入Neck形成的網(wǎng)絡(luò),如圖4 所示。Neck 網(wǎng)絡(luò)層主要包括加強信息傳播的PANet結(jié)構(gòu),將SE模塊嵌入到特征的融合階段,即Concat結(jié)束之后,BottleneckCSP2_1開始之前。
圖4 SEB_YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)
3.1.3 SEC_YOLOv5s網(wǎng)絡(luò)模型
SEC_YOLOv5s是將SE嵌入Head形成的網(wǎng)絡(luò),如圖5 所示。Head 輸出端用于最終的目標(biāo)檢測,將SE 模塊嵌入到模型的每一個YOLO檢測頭之前。
圖5 SEC_YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)
3.2.1 原始損失函數(shù)
原始YOLOv5 的損失函數(shù)包括目標(biāo)損失函數(shù)和分類損失函數(shù)、邊界框回歸損失函數(shù)。
①目標(biāo)損失函數(shù)和分類損失函數(shù)。YOLOv5 使用BCE With Logits作為目標(biāo)損失函數(shù)和分類損失函數(shù),二分類交叉熵?fù)p失函數(shù)的計算公式見公式(1)。式中,y為真實樣本標(biāo)簽;p為經(jīng)過Sigmoid函數(shù)的預(yù)測輸出,見公式(2),取值在[0,1]之間。
3.2.2 改進(jìn)損失函數(shù)
在原始損失函數(shù)的基礎(chǔ)上對損失函數(shù)進(jìn)行改進(jìn),提出利用權(quán)重控制不平衡樣本的損失計算方案——焦點損失函數(shù)Focal Loss。主要包含三個步驟。
①正負(fù)樣本的權(quán)重控制。
③兩種權(quán)重控制方法合并。
通過將兩種方法得到的公式合并得到
UA-DETRAC[17]數(shù)據(jù)集在北京和天津兩個城市不同地方進(jìn)行拍攝,拍攝照片如圖6 所示,拍攝角度和交通監(jiān)視視頻的角度一致。選用UA-DETRAC 數(shù)據(jù)集作為本文的車輛檢測數(shù)據(jù)集,文獻(xiàn)[22,23]同樣選用此數(shù)據(jù)集。UA-DETRAC數(shù)據(jù)集包含訓(xùn)練和測試集,由于訓(xùn)練集中的圖像數(shù)量已經(jīng)滿足需求并且已經(jīng)進(jìn)行標(biāo)注,因此本文僅采用訓(xùn)練集數(shù)據(jù)。去除數(shù)據(jù)集中夜間圖像,其余剩余共50051 張,其中40000 張作為網(wǎng)絡(luò)的訓(xùn)練集,剩余10051張作為驗證集。
圖6 UA-DETRAC數(shù)據(jù)集拍攝車輛效果圖
為驗證模型的性能,在西安市南二環(huán)文藝路天橋上再次進(jìn)行數(shù)據(jù)采集,共得到5000張圖像,作為實驗的測試集。圖像按照UA-DETRAC的標(biāo)準(zhǔn),使用標(biāo)注工具LabelImg[24]進(jìn)行人工標(biāo)注,如圖7所示。
圖7 LabelImg標(biāo)注
實驗所用GPU為Nvidia GeForce GTX 1660,網(wǎng)絡(luò)框架為Pytorch1.8.0。使用SGDM 優(yōu)化器,初始學(xué)習(xí)率為0.001,動量設(shè)為0.9,衰減系數(shù)設(shè)為0.0005,batchsize 設(shè)為8,共訓(xùn)練100epochs。
4.2.1 改進(jìn)注意力機制實驗
在不改變損失函數(shù)的條件下,將原始YOLOv5s、SEA_YOLOv5s、SEB_YOLOv5s、SEC_YOLOv5s 在UADETRAC 數(shù)據(jù)集進(jìn)行訓(xùn)練,并在自建數(shù)據(jù)集上進(jìn)行測試,檢測指標(biāo)為精確率P、召回率R 以及平均準(zhǔn)確率mAP。檢測結(jié)果見表1。
表1 四個模型在測試集的檢測結(jié)果
相比在Neck 和Head 引入SE 模塊,在Backbone 中的特征融合層后引入SE 可以大幅度提升YOLOv5s 對車輛目標(biāo)的檢測性能。通過對網(wǎng)絡(luò)算法的流程分析,認(rèn)為之所以會存在很大的性能差異,是因為在Backbone中目標(biāo)的特征圖語義信息種類較多但是語義信息量不足,仍然保留著目標(biāo)在特征圖中的較淺層的數(shù)據(jù)紋理信息,而這些信息對于本文研究背景下的兩種特殊情況的檢測至關(guān)重要。比如車輛目標(biāo)出現(xiàn)過多或者車輛出現(xiàn)在監(jiān)控攝像頭較遠(yuǎn)處時,在Backbone 中嵌入SE 模塊能更好對特征圖中目標(biāo)的通道特征進(jìn)行增強,較低層分辨率高,可以學(xué)習(xí)到較多的細(xì)節(jié)信息。
而在網(wǎng)絡(luò)更深層的Neck和Head,隨著卷積操作會縮小特征圖的尺寸,小目標(biāo)的語義信息到高層已經(jīng)不存在了,高層次特征圖顯示出來了更豐富的語義功能、更大的感受野范圍和尺度更小的特征圖,SE 難以再從這種特征信息高度融合的特征圖中有效地區(qū)分出重要的通道特征,導(dǎo)致檢測精度下降。
綜上所述,選擇在Backbone 主干網(wǎng)絡(luò)中引入SE 模塊的SEA_YOLOv5s 是最優(yōu)選擇,網(wǎng)絡(luò)定記為SE_YOLOv5s。
4.2.2 改進(jìn)損失函數(shù)實驗
使用Focal Loss 改進(jìn)SE_YOLOv5s輸出端的損失函數(shù),得到的網(wǎng)絡(luò)模型記為SES_YOLOv5s。由公式(8),F(xiàn)ocal Loss 主要是通過兩個參數(shù)α 和γ協(xié)調(diào)來控制不平衡樣本的權(quán)重,為了確定一組適合本次車輛檢測任務(wù)的最優(yōu)和,選擇10 組不同的和組合進(jìn)行實驗,結(jié)果見表2。
表2 Focal Loss中的參數(shù)設(shè)置
圖8和圖9是SES_YOLOv5s和SE_YOLOv5s兩個網(wǎng)絡(luò)模型在訓(xùn)練和測試階段的總損失的變化曲線??梢园l(fā)現(xiàn),SES_YOLOv5s 的Total Loss 總損失總體趨勢都是低于SE_YOLOv5s。SES_YOLOv5s 網(wǎng)絡(luò)直到訓(xùn)練100 Epochs 結(jié)束,訓(xùn)練和測試階段均呈現(xiàn)出持續(xù)下降的趨勢,且還存在下降空間,說明網(wǎng)絡(luò)仍在學(xué)習(xí),檢測精度仍有上升的可能性,而實線曲線逐漸趨于穩(wěn)定,說明網(wǎng)絡(luò)過擬合已經(jīng)沒有學(xué)習(xí)必要。
圖8 訓(xùn)練階段總損失變化曲線
圖9 測試階段總損失變化曲線
將以上兩種網(wǎng)絡(luò)與原始YOLOv5s進(jìn)行檢測性能指標(biāo)對比,結(jié)果見表3。由表3 可知,SES_YOLOv5s 網(wǎng)絡(luò)模型獲得比SE_YOLOv5s 高1%的精確率、高0.3%的召回率以及高0.007%的mAP,與YOLOv5s 相比獲得高0.5%的精確率、高2.5%的召回率以及高0.02%的mAP,三個指標(biāo)均有提高。
表3 三種網(wǎng)絡(luò)模型的目標(biāo)檢測性能指標(biāo)
對于本文使用的單級結(jié)構(gòu)YOLOv5s 目標(biāo)檢測算法,訓(xùn)練過程中自動生成大量預(yù)選框,以致于訓(xùn)練過程會被負(fù)樣本所主導(dǎo),導(dǎo)致精度下降?;贖ead 輸出端的改進(jìn)從損失函數(shù)入手,將Focal Loss 分別用于目標(biāo)和分類損失函數(shù),此函數(shù)通過對二分類交叉熵?fù)p失函數(shù)進(jìn)行重新構(gòu)造,使算法在訓(xùn)練過程中對困難樣本進(jìn)行挖掘,更加關(guān)注難分類的樣本,降低簡單樣本在訓(xùn)練中所占權(quán)重,有效解決正負(fù)樣本比例嚴(yán)重失衡的問題。從實驗結(jié)果看,在保證速度的同時達(dá)到了檢測精度最優(yōu),并且Focal Loss 緩解樣本的不平衡問題的途徑是通過改變損失的方式,此種方式只影響訓(xùn)練部分的過程和時間,對檢測時間影響甚小,容易拓展。
本文通過將注意力機制SE 模塊分別引入YOLOv5網(wǎng)絡(luò)的Backbone、Neck、Head,實現(xiàn)了改進(jìn)的YOLOv5網(wǎng)絡(luò)對城市道路交通監(jiān)控視頻進(jìn)行實時車輛檢測。在YOLOv5s 網(wǎng)絡(luò)的三個位置Backbone、Neck、Head 分別引入注意力機制SE 模塊,并進(jìn)行對比實驗分析,其中改進(jìn)的SEA_YOLOv5s 綜合性能最好。在引入SE 的基礎(chǔ)上,將原始的損失函數(shù)改為Focal Loss 焦點損失,改善正負(fù)樣本不均衡的問題,經(jīng)過實驗對比選取兩個參數(shù)α 和γ 的值。改進(jìn)的網(wǎng)絡(luò)模型SES_YOLOv5s 相較于原始YOLOv5s 有一定提升,其中精確率提升1%、召回率提升0.3、mAP 提升0.007,并且在對復(fù)雜的交通路段,對車輛遮擋和遠(yuǎn)處車輛目標(biāo)較小誤檢和漏檢的問題得到解決,證明了本文改進(jìn)方法的有效性。