徐 麗,劉星星,屈立成
(長安大學(xué) 信息工程學(xué)院,陜西 西安 710000)
在YOLO v3[1]算法結(jié)構(gòu)的基礎(chǔ)上YOLO v4[2]融合了最近幾年在深度神經(jīng)網(wǎng)絡(luò)中有明顯優(yōu)勢的算法模型思想和訓(xùn)練技巧,達(dá)到了很高的檢測精度。主干特征提取網(wǎng)絡(luò)在Darknet基礎(chǔ)上,結(jié)合CSPNet算法的思想,構(gòu)成CSPDarknet53,并使用Mish[3]激活函數(shù)、Dropblock正則化方式[4];加強(qiáng)特征提取網(wǎng)絡(luò)由YOLOv3采用的特征金字塔網(wǎng)絡(luò)(FPN)修改為加入空間金字塔池化層[5](SPP)和路徑聚合網(wǎng)絡(luò)[6](PANet)的組合;預(yù)測網(wǎng)絡(luò)使用YOLO v3中的YOLO-Head,預(yù)測框篩選使用DIOU_NMS。最終形成“CSPDarknet53+SPP-PANet+YOLO-Head”的模型結(jié)構(gòu)。
YOLO v4網(wǎng)絡(luò)相較于傳統(tǒng)機(jī)器學(xué)習(xí)算法有著明顯的優(yōu)勢,其優(yōu)勢主要體現(xiàn)在更多的參數(shù)和更大更深的網(wǎng)絡(luò)模型。復(fù)雜的模型結(jié)構(gòu)能夠增強(qiáng)網(wǎng)絡(luò)的非線性擬合能力,并且海量數(shù)據(jù)能夠增強(qiáng)模型的泛化能力[7]。然而在實(shí)際使用時(shí),YOLO v4網(wǎng)絡(luò)模型需要面臨計(jì)算資源的限制及速度的嚴(yán)格要求,故該文主要對(duì)基于YOLO v4的夜間車輛檢測模型進(jìn)行輕量化,使其在檢測精度降低少許的基礎(chǔ)上最大程度地縮減參數(shù)量及模型體積,使檢測速度更快,更能滿足夜間車輛檢測的實(shí)時(shí)性需求。
夜間車輛檢測模型的輕量化過程如圖1所示。
輕量化夜間車輛檢測的問題也是轉(zhuǎn)化成一個(gè)回歸問題求解,即將整張圖像用作網(wǎng)絡(luò)輸入,直接在輸出層回歸邊框位置及其所屬類別,流程如圖2所示。
圖1 夜間車輛檢測模型輕量化過程
圖2 夜間車輛檢測算法過程
(1)將輸入的原始圖像resize到416*416;(2)利用更改為MobileNet V2的主干特征提取網(wǎng)絡(luò),使得網(wǎng)絡(luò)參數(shù)量與計(jì)算量較少,可以更快地提取待檢測目標(biāo)的有效特征;(3)在加強(qiáng)特征提取網(wǎng)絡(luò)以SPP+PANet的模型結(jié)構(gòu)分別進(jìn)行最大池化、卷積、上下采樣、特征層融合的操作,實(shí)現(xiàn)將多層語義特征以及多尺度感受野進(jìn)行融合,同時(shí)將加強(qiáng)特征提取網(wǎng)絡(luò)里面的3×3普通卷積全部更改為深度可分離卷積;(4)在預(yù)測網(wǎng)絡(luò)利用加強(qiáng)特征提取網(wǎng)絡(luò)處理后的3個(gè)特征層進(jìn)行結(jié)果預(yù)測,判斷先驗(yàn)框里面是否存在待檢測對(duì)象以及對(duì)象類別,并采用非極大值抑制NMS處理和先驗(yàn)框調(diào)整來確定最終的預(yù)測框,得到車輛種類及坐標(biāo)信息。
訓(xùn)練前,對(duì)數(shù)據(jù)集進(jìn)行白平衡處理[8]以減少路燈顏色干擾進(jìn)而增強(qiáng)圖像畫質(zhì),并采用K-means++算法針對(duì)數(shù)據(jù)集聚類出合適的先驗(yàn)框,其中距離度量使用交并比距離。訓(xùn)練時(shí),首先采用Mosaic算法進(jìn)行數(shù)據(jù)增強(qiáng),有利于區(qū)別檢測物體的背景、前景,豐富了數(shù)據(jù)集中的圖像特征,尤其是隨機(jī)縮放出現(xiàn)了很多小目標(biāo)車輛,增強(qiáng)了網(wǎng)絡(luò)對(duì)小目標(biāo)車輛的特征提取能力。最后采用構(gòu)建的夜間車輛檢測模型對(duì)數(shù)據(jù)集進(jìn)行稀疏正則化訓(xùn)練。
YOLOv4夜間車輛檢測算法的特征提取網(wǎng)絡(luò)包括主干特征提取網(wǎng)絡(luò)和加強(qiáng)特征提取網(wǎng)絡(luò)兩部分,相比預(yù)測網(wǎng)絡(luò)參數(shù)量在這兩部分較多。而MobileNet即MobileNet V1是2017年谷歌提出的一種輕量化的CNN模型,目前共有3個(gè)版本,其結(jié)構(gòu)是以深度可分離卷積為基礎(chǔ)的,除第一層是普通卷積,其余卷積層都由深度可分離卷積組成,計(jì)算量與參數(shù)量非常少,簡單的網(wǎng)絡(luò)定義,就可獲得檢測性能優(yōu)異的網(wǎng)絡(luò),因此常作為輕量化的特征提取網(wǎng)絡(luò),故將主干特征提取網(wǎng)絡(luò)CSPDarknet53分別更改為三個(gè)版本的MobileNet,得到的模型參數(shù)量和體積如表1所示。
表1 不同主干特征提取網(wǎng)絡(luò)的模型參數(shù)量和體積
從表1可以看出,主干特征提取網(wǎng)絡(luò)使用了MobileNet后其參數(shù)量和模型體積還是相當(dāng)龐大,而夜間車輛檢測模型的大多數(shù)參數(shù)在加強(qiáng)特征提取網(wǎng)絡(luò)居多,其參數(shù)量主要集中在3×3的卷積上面,故嘗試將加強(qiáng)特征提取網(wǎng)絡(luò)里面的3×3普通卷積全部更改為在模型輕量化方面有優(yōu)異特性的深度可分離卷積,此時(shí)可得到模型參數(shù)量和體積的情況如表2所示。
表2 修改PANet后不同主干網(wǎng)絡(luò)的模型參數(shù)量和體積
從表2可以看出,在主干特征提取網(wǎng)絡(luò)使用MobileNet的基礎(chǔ)上,同時(shí)把加強(qiáng)特征提取網(wǎng)絡(luò)里面的普通卷積全部更改為深度可分離卷積,此時(shí)參數(shù)量和模型體積明顯縮減了。同時(shí)可以看到MobileNet V2的模型參數(shù)量和體積少于MobileNet V1和MobileNet V3,故決定將CSPDarknet53更改為MobileNet V2作為模型的主干特征提取網(wǎng)絡(luò),同時(shí)將加強(qiáng)特征提取網(wǎng)絡(luò)里面的3×3普通卷積全部更改為深度可分離卷積。
深層模型的通道稀疏性有利于通道剪枝,且能獲得有可能會(huì)被剪枝的重要性低的通道數(shù)量。按照通道修剪原理,稀疏訓(xùn)練過程中得為每個(gè)卷積層的每個(gè)通道分配一個(gè)縮放因子γ(γ作為通道剪枝的重要依據(jù)[9],將其正則項(xiàng)和權(quán)重?fù)p失函數(shù)聯(lián)合優(yōu)化,網(wǎng)絡(luò)本身就可識(shí)別重要性低的通道并將其安全剪除,而不會(huì)影響其泛化性能),將其與該通道的輸入相乘,使得每層的各通道提取的特征產(chǎn)生不一樣的作用效果,其中縮放因子的絕對(duì)值就表示通道重要性。因?yàn)橐归g車輛檢測網(wǎng)絡(luò)中每個(gè)卷積層后都增加了批量歸一化(BN)層,BN層的公式如(1)所示:
(1)
L1正則化是以L1范數(shù)為基礎(chǔ),即把參數(shù)的L1范數(shù)和項(xiàng)與目標(biāo)函數(shù)相加,如公式(2):
(2)
其中,C0是原始的代價(jià)函數(shù),n是樣本數(shù),λ是權(quán)衡正則項(xiàng)與C0項(xiàng)比重的正則項(xiàng)系數(shù),后面一項(xiàng)即L1正則項(xiàng)。計(jì)算時(shí)w梯度的變化如公式(3)所示:
(3)
其中,sgn是符號(hào)函數(shù),那么使用下面公式(4)對(duì)參數(shù)進(jìn)行更新:
(4)
從上式可以看出,L1正則項(xiàng)是將原本接近零(即|w|≈0)的那些參數(shù)w移到零,從而使某些參數(shù)為零,這意味著L1正則化能夠發(fā)揮選擇通道的作用,使得重要性降低的通道γ盡可能靠近0。故為有效地區(qū)分通道的重要與否,該文通過L1正則化來進(jìn)行通道的稀疏訓(xùn)練。與此同時(shí),依據(jù)網(wǎng)絡(luò)中參數(shù)的變化,引入與γ有關(guān)的懲罰項(xiàng),稀疏訓(xùn)練損失函數(shù)如公式(5)所示:
(5)
其中,(x,y)表示網(wǎng)絡(luò)的輸入、輸出,w表示權(quán)重,第一項(xiàng)表示原始網(wǎng)絡(luò)訓(xùn)練時(shí)的損失,第二項(xiàng)表示關(guān)于γ的L1正則,g(γ)表示縮放因子的稀疏誘導(dǎo)懲罰,λ表示超參數(shù),作用是將正常訓(xùn)練損失和通道縮放因子懲罰項(xiàng)損失的比例進(jìn)行平衡,Γ表示縮放因子γ的取值集合。通常L1正則化即g(γ)=|γ|為通道的重要性,被廣泛應(yīng)用于實(shí)現(xiàn)稀疏化。
模型剪枝是復(fù)雜模型輕量化時(shí)一種廣泛使用的方法。最早是用來去除模型中的多余參數(shù),減小復(fù)雜度,進(jìn)而提升泛化性能。模型剪枝可以從不同剪枝粒度上實(shí)現(xiàn),例如權(quán)重級(jí)、通道級(jí)或?qū)蛹?jí)。細(xì)粒度剪枝(如權(quán)重級(jí))比較靈活常用,而且剪枝率高,但它一般得使用特殊設(shè)備來輔助實(shí)現(xiàn)。相反粗粒度剪枝并不需要特殊設(shè)備,但是要對(duì)某些整層進(jìn)行修剪,所以并不靈活,而且只有當(dāng)深度足夠深時(shí),例如多余50層的網(wǎng)絡(luò)[10],剪枝才是有效果的。相比之下通道級(jí)別的剪枝能夠很好地權(quán)衡靈活性與易于實(shí)現(xiàn)程度,且能夠應(yīng)用于任何CNN或全連接的網(wǎng)絡(luò),由此生成一個(gè)輕量化的網(wǎng)絡(luò),使得傳統(tǒng)的CNN能夠在任何平臺(tái)上快速有效地運(yùn)行。
實(shí)現(xiàn)通道級(jí)剪枝需要修剪所有與通道相關(guān)的輸入和輸出,但是對(duì)已預(yù)訓(xùn)練好的模型做通道剪枝效率不高,因?yàn)椴豢赡芡ǖ浪休斎牖蜉敵龅臋?quán)重都有近似0的值。實(shí)驗(yàn)結(jié)果表明,在保證相對(duì)準(zhǔn)確率時(shí),對(duì)預(yù)訓(xùn)練好的ResNet做通道剪枝,僅僅可以減少10%的參數(shù)量[11]。
通道剪枝的實(shí)現(xiàn)流程如圖3所示。
圖3 通道剪枝流程
(1)對(duì)每個(gè)通道引入縮放因子γ,與該通道輸入相乘;(2)將γ正則項(xiàng)和權(quán)重?fù)p失函數(shù)聯(lián)合進(jìn)行稀疏正則化訓(xùn)練;(3)剪去較小縮放因子的通道;(4)微調(diào)剪枝后的模型;(5)經(jīng)過性能評(píng)估后再進(jìn)行修剪迭代,最后得到一個(gè)輕量化的車輛檢測模型。
圖4 通道剪枝
稀疏訓(xùn)練后獲得的通道縮放因子如圖4(a)所示,當(dāng)前的縮放因子γ是稀疏分布的,第i層卷積層中的通道2和4中縮放因子近似為0,這代表著經(jīng)過訓(xùn)練的模型認(rèn)為該通道所提取的特征對(duì)目標(biāo)的識(shí)別和分類基本沒有任何作用,通過剪枝操作后,會(huì)刪去該通道,里面的卷積核及其參數(shù)將不會(huì)被保存,達(dá)到輕量化模型的效果。剪枝之后的輕量化模型如圖4(b)所示。
(6)
實(shí)驗(yàn)的硬件配置為Intel(R)Core(TM)i7-8700K CPU @ 3.70 GHz,64 GB內(nèi)存與NVIDIA GeForce GTX 1080 Ti獨(dú)立顯卡,軟件環(huán)境為Windows 10系統(tǒng),算法基于Keras框架,CUDA版本為10.0。在實(shí)驗(yàn)中,選擇Adam作為優(yōu)化器,early_stopping用于設(shè)定早停,val_loss多次不下降自動(dòng)結(jié)束訓(xùn)練,表示模型基本收斂,batch_size=16,學(xué)習(xí)率設(shè)置為0.001,并在110 epoch后調(diào)整為0.000 1,共訓(xùn)練220 epoch。將實(shí)驗(yàn)里面的數(shù)據(jù)劃分為68%的訓(xùn)練集、12%的驗(yàn)證集與20%的測試集,其中訓(xùn)練驗(yàn)證集占到80%。
使用的數(shù)據(jù)集是UA-DETRAC數(shù)據(jù)集。該數(shù)據(jù)集是由佳能攝像機(jī)在天津和北京24個(gè)不同地點(diǎn)拍攝的10小時(shí)的視頻組成,圖像分辨率為960×540像素。該數(shù)據(jù)集將車輛分為四類,即car、bus、van和others,由于只有車輛被檢測,故只取前三類car、bus、van。因?yàn)橐芯康氖且归g場景下的車輛檢測算法,所以選取了16 000張夜間圖像作為該文的研究對(duì)象。
常用的車輛檢測算法評(píng)價(jià)指標(biāo)有:精確率(Precision,P)、召回率(Recall,R)、平均精度AP、全部類別目標(biāo)平均精度mAP、每秒處理幀數(shù)FPS等。
基于YOLO v4檢測模型,將CSPDarknet53更改為MobileNet V2作為模型的主干特征提取網(wǎng)絡(luò),并將加強(qiáng)特征提取網(wǎng)絡(luò)里面的普通卷積全部更改為深度可分離卷積后的車輛檢測模型(M1)進(jìn)行訓(xùn)練。對(duì)模型M1進(jìn)行220次迭代的稀疏性訓(xùn)練,稀疏因子λ采用默認(rèn)值0.000 1,剪枝率設(shè)為50%,可以發(fā)現(xiàn)剪枝后模型(M2)的檢測精度下降了4.9%,所以對(duì)模型進(jìn)行微調(diào),最終得到微調(diào)后的檢測模型(M3)。模型輕量化過程中各個(gè)模型的檢測結(jié)果如表3所示。
表3 模型輕量化過程中各個(gè)模型的檢測結(jié)果
從表3可知,通道剪枝可有效剪除網(wǎng)絡(luò)冗余,并且利用模型微調(diào)對(duì)剪枝后的模型進(jìn)行再訓(xùn)練可彌補(bǔ)剪枝帶來的檢測精度損失,在參數(shù)量及模型體積縮減一半以上的情況下,檢測精度只損失了0.68%。因此該方法能夠?qū)?shí)驗(yàn)中的檢測模型進(jìn)行有效的輕量化。該輕量化夜間車輛檢測模型的car、bus、van的AP和mAP的變化如圖5所示。
圖5 AP和mAP變化圖
損失函數(shù)曲線如圖6所示。
圖6 loss變化曲線
由圖可知網(wǎng)絡(luò)在迭代訓(xùn)練200次后損失曲線不再明顯波動(dòng),模型更快地趨于收斂,曲線相當(dāng)平滑,整體訓(xùn)練效果良好,且在迭代訓(xùn)練210次后網(wǎng)絡(luò)發(fā)生了早停,停止訓(xùn)練。
對(duì)于嵌入式及移動(dòng)終端設(shè)備來說,因計(jì)算性能、內(nèi)存有限,不能滿足深度神經(jīng)網(wǎng)絡(luò)的運(yùn)行需求時(shí),就會(huì)追求極致的剪枝率[14],但是對(duì)于模型輕量化來說,超過一定的剪枝率,就會(huì)使得檢測精度直線下降。因此,該文對(duì)模型剪枝率方面進(jìn)行了實(shí)驗(yàn)與對(duì)比分析,使得模型檢測精度在基本保持不變的情況下能夠去除更多的網(wǎng)絡(luò)冗余,使檢測速度更快,更能滿足夜間車輛檢測的實(shí)時(shí)性需求。
由表4可以看出,剪枝率越大,參數(shù)量和模型體積越小,檢測精度會(huì)隨之有一定的下降。當(dāng)剪枝率在75%時(shí),剪枝后模型的參數(shù)量和模型體積降為大約原來的5%,F(xiàn)PS提升為大約原來的2倍,同時(shí)mAP只降低了1.6%。當(dāng)剪枝率達(dá)到90%時(shí),檢測精度會(huì)大幅降低。故該文采用剪枝率為50%時(shí)的輕量化模型,此時(shí)檢測精度mAP為98.29%,且每秒處理幀數(shù)FPS為42幀圖像。
表4 剪枝率對(duì)比
模型輕量化后的檢測效果如圖7所示。
圖7 車輛檢測輕量化模型的檢測效果
為了驗(yàn)證輕量化模型對(duì)小目標(biāo)車輛的檢測效果,從UA-DETRAC數(shù)據(jù)集中專門挑選了3 200張未經(jīng)過預(yù)處理的夜間車輛圖像,其特點(diǎn)為存在小目標(biāo)車輛。經(jīng)過測試,在YOLO v4算法中的mAP為98.39%,而在該文輕量化模型的mAP達(dá)到98.04%,證明所提出的輕量化夜間車輛檢測模型對(duì)小目標(biāo)車輛也具有很好的魯棒性。
該文構(gòu)建了基于YOLO v4的輕量化夜間車輛檢測模型,其檢測精度和實(shí)時(shí)性都可滿足夜間車輛檢測的需求,而且對(duì)小目標(biāo)車輛也有很高的檢測精度。然而僅實(shí)現(xiàn)了夜間車輛的類別與位置檢測,對(duì)檢測到的車輛進(jìn)行實(shí)時(shí)跟蹤[15]以及預(yù)測其接下來準(zhǔn)確的行駛方向也具有重要意義。