徐 麗,劉星星,屈立成
(長安大學 信息工程學院,陜西 西安 710000)
在YOLO v3[1]算法結構的基礎上YOLO v4[2]融合了最近幾年在深度神經網絡中有明顯優勢的算法模型思想和訓練技巧,達到了很高的檢測精度。主干特征提取網絡在Darknet基礎上,結合CSPNet算法的思想,構成CSPDarknet53,并使用Mish[3]激活函數、Dropblock正則化方式[4];加強特征提取網絡由YOLOv3采用的特征金字塔網絡(FPN)修改為加入空間金字塔池化層[5](SPP)和路徑聚合網絡[6](PANet)的組合;預測網絡使用YOLO v3中的YOLO-Head,預測框篩選使用DIOU_NMS。最終形成“CSPDarknet53+SPP-PANet+YOLO-Head”的模型結構。
YOLO v4網絡相較于傳統機器學習算法有著明顯的優勢,其優勢主要體現在更多的參數和更大更深的網絡模型。復雜的模型結構能夠增強網絡的非線性擬合能力,并且海量數據能夠增強模型的泛化能力[7]。然而在實際使用時,YOLO v4網絡模型需要面臨計算資源的限制及速度的嚴格要求,故該文主要對基于YOLO v4的夜間車輛檢測模型進行輕量化,使其在檢測精度降低少許的基礎上最大程度地縮減參數量及模型體積,使檢測速度更快,更能滿足夜間車輛檢測的實時性需求。
夜間車輛檢測模型的輕量化過程如圖1所示。
輕量化夜間車輛檢測的問題也是轉化成一個回歸問題求解,即將整張圖像用作網絡輸入,直接在輸出層回歸邊框位置及其所屬類別,流程如圖2所示。

圖1 夜間車輛檢測模型輕量化過程

圖2 夜間車輛檢測算法過程
(1)將輸入的原始圖像resize到416*416;(2)利用更改為MobileNet V2的主干特征提取網絡,使得網絡參數量與計算量較少,可以更快地提取待檢測目標的有效特征;(3)在加強特征提取網絡以SPP+PANet的模型結構分別進行最大池化、卷積、上下采樣、特征層融合的操作,實現將多層語義特征以及多尺度感受野進行融合,同時將加強特征提取網絡里面的3×3普通卷積全部更改為深度可分離卷積;(4)在預測網絡利用加強特征提取網絡處理后的3個特征層進行結果預測,判斷先驗框里面是否存在待檢測對象以及對象類別,并采用非極大值抑制NMS處理和先驗框調整來確定最終的預測框,得到車輛種類及坐標信息。
訓練前,對數據集進行白平衡處理[8]以減少路燈顏色干擾進而增強圖像畫質,并采用K-means++算法針對數據集聚類出合適的先驗框,其中距離度量使用交并比距離。訓練時,首先采用Mosaic算法進行數據增強,有利于區別檢測物體的背景、前景,豐富了數據集中的圖像特征,尤其是隨機縮放出現了很多小目標車輛,增強了網絡對小目標車輛的特征提取能力。最后采用構建的夜間車輛檢測模型對數據集進行稀疏正則化訓練。
YOLOv4夜間車輛檢測算法的特征提取網絡包括主干特征提取網絡和加強特征提取網絡兩部分,相比預測網絡參數量在這兩部分較多。而MobileNet即MobileNet V1是2017年谷歌提出的一種輕量化的CNN模型,目前共有3個版本,其結構是以深度可分離卷積為基礎的,除第一層是普通卷積,其余卷積層都由深度可分離卷積組成,計算量與參數量非常少,簡單的網絡定義,就可獲得檢測性能優異的網絡,因此常作為輕量化的特征提取網絡,故將主干特征提取網絡CSPDarknet53分別更改為三個版本的MobileNet,得到的模型參數量和體積如表1所示。

表1 不同主干特征提取網絡的模型參數量和體積
從表1可以看出,主干特征提取網絡使用了MobileNet后其參數量和模型體積還是相當龐大,而夜間車輛檢測模型的大多數參數在加強特征提取網絡居多,其參數量主要集中在3×3的卷積上面,故嘗試將加強特征提取網絡里面的3×3普通卷積全部更改為在模型輕量化方面有優異特性的深度可分離卷積,此時可得到模型參數量和體積的情況如表2所示。

表2 修改PANet后不同主干網絡的模型參數量和體積
從表2可以看出,在主干特征提取網絡使用MobileNet的基礎上,同時把加強特征提取網絡里面的普通卷積全部更改為深度可分離卷積,此時參數量和模型體積明顯縮減了。同時可以看到MobileNet V2的模型參數量和體積少于MobileNet V1和MobileNet V3,故決定將CSPDarknet53更改為MobileNet V2作為模型的主干特征提取網絡,同時將加強特征提取網絡里面的3×3普通卷積全部更改為深度可分離卷積。
深層模型的通道稀疏性有利于通道剪枝,且能獲得有可能會被剪枝的重要性低的通道數量。按照通道修剪原理,稀疏訓練過程中得為每個卷積層的每個通道分配一個縮放因子γ(γ作為通道剪枝的重要依據[9],將其正則項和權重損失函數聯合優化,網絡本身就可識別重要性低的通道并將其安全剪除,而不會影響其泛化性能),將其與該通道的輸入相乘,使得每層的各通道提取的特征產生不一樣的作用效果,其中縮放因子的絕對值就表示通道重要性。因為夜間車輛檢測網絡中每個卷積層后都增加了批量歸一化(BN)層,BN層的公式如(1)所示:
(1)

L1正則化是以L1范數為基礎,即把參數的L1范數和項與目標函數相加,如公式(2):
(2)
其中,C0是原始的代價函數,n是樣本數,λ是權衡正則項與C0項比重的正則項系數,后面一項即L1正則項。計算時w梯度的變化如公式(3)所示:
(3)
其中,sgn是符號函數,那么使用下面公式(4)對參數進行更新:
(4)
從上式可以看出,L1正則項是將原本接近零(即|w|≈0)的那些參數w移到零,從而使某些參數為零,這意味著L1正則化能夠發揮選擇通道的作用,使得重要性降低的通道γ盡可能靠近0。故為有效地區分通道的重要與否,該文通過L1正則化來進行通道的稀疏訓練。與此同時,依據網絡中參數的變化,引入與γ有關的懲罰項,稀疏訓練損失函數如公式(5)所示:

(5)
其中,(x,y)表示網絡的輸入、輸出,w表示權重,第一項表示原始網絡訓練時的損失,第二項表示關于γ的L1正則,g(γ)表示縮放因子的稀疏誘導懲罰,λ表示超參數,作用是將正常訓練損失和通道縮放因子懲罰項損失的比例進行平衡,Γ表示縮放因子γ的取值集合。通常L1正則化即g(γ)=|γ|為通道的重要性,被廣泛應用于實現稀疏化。
模型剪枝是復雜模型輕量化時一種廣泛使用的方法。最早是用來去除模型中的多余參數,減小復雜度,進而提升泛化性能。模型剪枝可以從不同剪枝粒度上實現,例如權重級、通道級或層級。細粒度剪枝(如權重級)比較靈活常用,而且剪枝率高,但它一般得使用特殊設備來輔助實現。相反粗粒度剪枝并不需要特殊設備,但是要對某些整層進行修剪,所以并不靈活,而且只有當深度足夠深時,例如多余50層的網絡[10],剪枝才是有效果的。相比之下通道級別的剪枝能夠很好地權衡靈活性與易于實現程度,且能夠應用于任何CNN或全連接的網絡,由此生成一個輕量化的網絡,使得傳統的CNN能夠在任何平臺上快速有效地運行。
實現通道級剪枝需要修剪所有與通道相關的輸入和輸出,但是對已預訓練好的模型做通道剪枝效率不高,因為不可能通道所有輸入或輸出的權重都有近似0的值。實驗結果表明,在保證相對準確率時,對預訓練好的ResNet做通道剪枝,僅僅可以減少10%的參數量[11]。
通道剪枝的實現流程如圖3所示。

圖3 通道剪枝流程
(1)對每個通道引入縮放因子γ,與該通道輸入相乘;(2)將γ正則項和權重損失函數聯合進行稀疏正則化訓練;(3)剪去較小縮放因子的通道;(4)微調剪枝后的模型;(5)經過性能評估后再進行修剪迭代,最后得到一個輕量化的車輛檢測模型。


圖4 通道剪枝
稀疏訓練后獲得的通道縮放因子如圖4(a)所示,當前的縮放因子γ是稀疏分布的,第i層卷積層中的通道2和4中縮放因子近似為0,這代表著經過訓練的模型認為該通道所提取的特征對目標的識別和分類基本沒有任何作用,通過剪枝操作后,會刪去該通道,里面的卷積核及其參數將不會被保存,達到輕量化模型的效果。剪枝之后的輕量化模型如圖4(b)所示。

(6)
實驗的硬件配置為Intel(R)Core(TM)i7-8700K CPU @ 3.70 GHz,64 GB內存與NVIDIA GeForce GTX 1080 Ti獨立顯卡,軟件環境為Windows 10系統,算法基于Keras框架,CUDA版本為10.0。在實驗中,選擇Adam作為優化器,early_stopping用于設定早停,val_loss多次不下降自動結束訓練,表示模型基本收斂,batch_size=16,學習率設置為0.001,并在110 epoch后調整為0.000 1,共訓練220 epoch。將實驗里面的數據劃分為68%的訓練集、12%的驗證集與20%的測試集,其中訓練驗證集占到80%。
使用的數據集是UA-DETRAC數據集。該數據集是由佳能攝像機在天津和北京24個不同地點拍攝的10小時的視頻組成,圖像分辨率為960×540像素。該數據集將車輛分為四類,即car、bus、van和others,由于只有車輛被檢測,故只取前三類car、bus、van。因為要研究的是夜間場景下的車輛檢測算法,所以選取了16 000張夜間圖像作為該文的研究對象。
常用的車輛檢測算法評價指標有:精確率(Precision,P)、召回率(Recall,R)、平均精度AP、全部類別目標平均精度mAP、每秒處理幀數FPS等。
基于YOLO v4檢測模型,將CSPDarknet53更改為MobileNet V2作為模型的主干特征提取網絡,并將加強特征提取網絡里面的普通卷積全部更改為深度可分離卷積后的車輛檢測模型(M1)進行訓練。對模型M1進行220次迭代的稀疏性訓練,稀疏因子λ采用默認值0.000 1,剪枝率設為50%,可以發現剪枝后模型(M2)的檢測精度下降了4.9%,所以對模型進行微調,最終得到微調后的檢測模型(M3)。模型輕量化過程中各個模型的檢測結果如表3所示。

表3 模型輕量化過程中各個模型的檢測結果
從表3可知,通道剪枝可有效剪除網絡冗余,并且利用模型微調對剪枝后的模型進行再訓練可彌補剪枝帶來的檢測精度損失,在參數量及模型體積縮減一半以上的情況下,檢測精度只損失了0.68%。因此該方法能夠對實驗中的檢測模型進行有效的輕量化。該輕量化夜間車輛檢測模型的car、bus、van的AP和mAP的變化如圖5所示。

圖5 AP和mAP變化圖
損失函數曲線如圖6所示。

圖6 loss變化曲線
由圖可知網絡在迭代訓練200次后損失曲線不再明顯波動,模型更快地趨于收斂,曲線相當平滑,整體訓練效果良好,且在迭代訓練210次后網絡發生了早停,停止訓練。
對于嵌入式及移動終端設備來說,因計算性能、內存有限,不能滿足深度神經網絡的運行需求時,就會追求極致的剪枝率[14],但是對于模型輕量化來說,超過一定的剪枝率,就會使得檢測精度直線下降。因此,該文對模型剪枝率方面進行了實驗與對比分析,使得模型檢測精度在基本保持不變的情況下能夠去除更多的網絡冗余,使檢測速度更快,更能滿足夜間車輛檢測的實時性需求。
由表4可以看出,剪枝率越大,參數量和模型體積越小,檢測精度會隨之有一定的下降。當剪枝率在75%時,剪枝后模型的參數量和模型體積降為大約原來的5%,FPS提升為大約原來的2倍,同時mAP只降低了1.6%。當剪枝率達到90%時,檢測精度會大幅降低。故該文采用剪枝率為50%時的輕量化模型,此時檢測精度mAP為98.29%,且每秒處理幀數FPS為42幀圖像。

表4 剪枝率對比
模型輕量化后的檢測效果如圖7所示。

圖7 車輛檢測輕量化模型的檢測效果
為了驗證輕量化模型對小目標車輛的檢測效果,從UA-DETRAC數據集中專門挑選了3 200張未經過預處理的夜間車輛圖像,其特點為存在小目標車輛。經過測試,在YOLO v4算法中的mAP為98.39%,而在該文輕量化模型的mAP達到98.04%,證明所提出的輕量化夜間車輛檢測模型對小目標車輛也具有很好的魯棒性。
該文構建了基于YOLO v4的輕量化夜間車輛檢測模型,其檢測精度和實時性都可滿足夜間車輛檢測的需求,而且對小目標車輛也有很高的檢測精度。然而僅實現了夜間車輛的類別與位置檢測,對檢測到的車輛進行實時跟蹤[15]以及預測其接下來準確的行駛方向也具有重要意義。