韓鎮(zhèn)洋,王先蘭
(1.武漢郵電科學(xué)研究院,湖北武漢 430074;2.武漢郵電科學(xué)研究院研究生部,湖北武漢 430074)
目標(biāo)檢測(cè)的核心任務(wù)在于分類、定位、檢測(cè)和分割,其基于深度學(xué)習(xí)的算法主要分為Two stage 和One stage 兩類[1],而YOLO 系列就是One stage 的代表性算法,其包 括v1、v2、v3[2]、v4[3]、v5,其中YOLOv5 作為最新代的YOLO 算法,其對(duì)目標(biāo)的檢測(cè)精度及速度相比YOLOv4 均有所提升。但是隨著無(wú)人機(jī)[4]及自動(dòng)駕駛[5]技術(shù)的發(fā)展與普及,在某些小目標(biāo)檢測(cè)場(chǎng)景下YOLOv5 仍滿足不了相應(yīng)的需求。
YOLOv5 結(jié)構(gòu)分為輸入端、Backbone、Neck、Prediction 四部分,其中輸入端包括Mosaic 數(shù)據(jù)增強(qiáng)、自適應(yīng)錨框計(jì)算、自適應(yīng)圖片縮放;Backbone 包括Focus[6]結(jié)構(gòu)和CSP[7]結(jié)構(gòu);Neck 包括FPN 和PAN 結(jié)構(gòu);Prediction 包括GIoU Loss[8]。
其中在自適應(yīng)錨框計(jì)算部分,YOLOv5 將此功能嵌入到模型代碼中,每次訓(xùn)練時(shí)模型會(huì)自動(dòng)計(jì)算不同訓(xùn)練集中的最佳錨框參數(shù)。
而在自適應(yīng)圖片縮放部分,YOLOv5 對(duì)代碼進(jìn)行了修改,對(duì)輸入圖像自適應(yīng)地添加最少的黑邊。填充后的圖像兩端的黑邊變少了,在推算時(shí)計(jì)算量也相應(yīng)減少了,從而提升了目標(biāo)檢測(cè)速度。
除上述幾個(gè)方面的改進(jìn)之外,YOLOv5 還有一些細(xì)節(jié)方面也存在差異。
YOLOv5 具有檢測(cè)性能好、速度快、靈活性強(qiáng)的優(yōu)點(diǎn),但是在需要小目標(biāo)檢測(cè)的場(chǎng)景中仍存在識(shí)別精度不足[9]的問(wèn)題,因此考慮從以下三方面進(jìn)行算法改進(jìn):
1)改變Backbone 結(jié)構(gòu);
2)改變Neck 結(jié)構(gòu);
3)其他方面。
將改進(jìn)后的算法命名為“YOLOv5-Sobj”,即YOLOv5-Smallobject。
模型中的Backbone 部分即主干部分。該主干網(wǎng)絡(luò)常認(rèn)為提取特征的網(wǎng)絡(luò),其作用是提取圖片中的信息,以供后面的網(wǎng)絡(luò)使用。
嘗試用兩個(gè)Backbone 替代YOLOv5 中原有的一個(gè)Backbone,下面對(duì)這兩個(gè)替換的Backbone 進(jìn)行簡(jiǎn)單介紹。
深度殘差網(wǎng)絡(luò)(Deep Residual Network,ResNet)的提出是CNN 圖像發(fā)展史上的一件重要事件,其原理是通過(guò)引入殘差連接將輸入數(shù)據(jù)直接傳遞到輸出端,從而跨越了多個(gè)神經(jīng)網(wǎng)絡(luò)層。
不同于ResNet 解決了深層神經(jīng)網(wǎng)絡(luò)的梯度消失問(wèn)題,密集卷積網(wǎng)絡(luò)(Dense Convolutional Network,DenseNet)則是從特征入手,通過(guò)對(duì)特征的充分利用實(shí)現(xiàn)了以更少的參數(shù)達(dá)到更好的效果。DenseNet 使用類似的連接,在網(wǎng)絡(luò)中盡可能多地保存信息。實(shí)現(xiàn)這些功能需要確保特征圖尺寸正確,因此必要時(shí)需要修改模型的深度縮放系數(shù)和寬度縮放系數(shù)。
在這兩種情況下,為了保持結(jié)構(gòu)本身的復(fù)雜性,要避免修改后的層數(shù)與原始的層數(shù)相差過(guò)大。因此,最終選擇了ResNet 中的ResNet50,并且成比例縮小了DenseNet 來(lái)確保其核心功能不變。此外,在原有模型中還利用了Backbone 和Neck 之間的空間金字塔池化層(Spatial Pyramid Pooling,SPP),但在實(shí)際實(shí)驗(yàn)中沒(méi)有對(duì)該部分進(jìn)行修改。
模型中的Neck 部分是位于Backbone 和Head 之間的結(jié)構(gòu),其作用是將Backbone 中提取到的信息反饋到Head 之前盡可能多地聚合這些信息。Neck 部分能夠有效提高特征圖的分辨率,可以聚合從Backbone 傳遞來(lái)的不同層特征,從而提升整體模型的檢測(cè)性能[10]。
嘗試將原有模型中的PAN-Net替換為bi-FPN[11]。雖然兩者具有的特征相似,但兩者的復(fù)雜性不同,因此所需的層數(shù)和連接數(shù)也就不同。
Head 部分主要負(fù)責(zé)特征的捕獲,并通過(guò)從Neck捕獲的聚合特征來(lái)預(yù)測(cè)邊界框和類。Head 部分對(duì)小目標(biāo)檢測(cè)影響不大,因此實(shí)驗(yàn)中無(wú)需修改該結(jié)構(gòu)。
除了上述三個(gè)方面,還有其他一些因素會(huì)影響小目標(biāo)檢測(cè)的性能。可從輸入圖像的大小,還可以修改模型的深度和寬度,從而改變推算的主要方向。此外,為了檢測(cè)特定的特征圖也可以通過(guò)手動(dòng)改變Neck 和Head 的層連接方式來(lái)實(shí)現(xiàn)。
對(duì)于層連接方式的改變,可利用高分辨率特征的重定向?qū)⑻卣髦苯臃答伒絅eck 和Head。要達(dá)到該效果可以通過(guò)以下兩種方法來(lái)實(shí)現(xiàn):
1)擴(kuò)充Neck 部分以適應(yīng)額外的特征圖;
2)替換最低分辨率特征圖以適應(yīng)新的特征圖。
如圖1 展現(xiàn)了這兩個(gè)可能的方向以及原有布局的對(duì)比示例圖。
圖1 兩種可能方向和原有布局對(duì)比示例圖
研究中的所有實(shí)驗(yàn)均在如表1 所示的硬件環(huán)境中完成:
表1 實(shí)驗(yàn)電腦的配置
為了訓(xùn)練改進(jìn)后的模型并為實(shí)驗(yàn)提供信息,實(shí)驗(yàn)選取了一個(gè)以自動(dòng)駕駛車輛視角拍攝的路障數(shù)據(jù)集[12]。該數(shù)據(jù)集原本的目的是利用路障的不同顏色來(lái)指導(dǎo)自動(dòng)駕駛車輛選擇行車路徑。如圖2所示,該數(shù)據(jù)集中包括四種不同顏色的路障,總計(jì)接近4 000張圖片。
圖2 數(shù)據(jù)集中各顏色實(shí)例數(shù)
數(shù)據(jù)集中包括數(shù)據(jù)增強(qiáng)圖像和惡劣天氣條件下的圖片,因此可以更好地模擬自動(dòng)駕駛汽車在真實(shí)行駛環(huán)境中遇到的復(fù)雜情況。此外,也可以用包含交通標(biāo)志[13]的小目標(biāo)數(shù)據(jù)集替代路障數(shù)據(jù)集。
盡管數(shù)據(jù)集中包含路障的圖片并不多,但路障的目標(biāo)密度[14]卻非常高,總共有超過(guò)10 000 個(gè)標(biāo)記目標(biāo),因此并不存在目標(biāo)數(shù)不足的問(wèn)題。
與自動(dòng)駕駛場(chǎng)景中的其他物體(如行人和車輛)相比,路障很小。實(shí)驗(yàn)得到的關(guān)系圖3 顯示了數(shù)據(jù)集中路障目標(biāo)邊界框的位置、高度和寬度,由圖可見(jiàn)該數(shù)據(jù)集具有高度集中的較小目標(biāo)框,這種高密度的小目標(biāo)數(shù)據(jù)集給研究小目標(biāo)檢測(cè)帶來(lái)了諸多好處[15],同時(shí)也克服了網(wǎng)絡(luò)上許多流行數(shù)據(jù)集在小目標(biāo)檢測(cè)[16]上的問(wèn)題(如MS COCO)。
將數(shù)據(jù)集按7∶1∶2 的比例分為訓(xùn)練集、驗(yàn)證集和測(cè)試集,并取模型的多次測(cè)試的平均性能作為代表。
圖3 實(shí)例的中心點(diǎn)位置(橫坐標(biāo)x、縱坐標(biāo)y)、高度和寬度關(guān)系圖
YOLOv5 的原始模型在目標(biāo)的邊界框區(qū)域和聯(lián)合交集(Intersection over Unions,IoU)提供了與COCO的兼容性,因此按COCO 數(shù)據(jù)集來(lái)定義小目標(biāo)的尺寸大小。
由于這些指標(biāo)默認(rèn)只與COCO 數(shù)據(jù)集兼容,因此在測(cè)試代碼中重新嘗試實(shí)現(xiàn),以便在使用任何數(shù)據(jù)集時(shí)為研究獲得更有價(jià)值的數(shù)據(jù)。測(cè)試模塊將會(huì)計(jì)算大、中、小目標(biāo)的值以及整體性能。目標(biāo)大小的判定為:小目標(biāo)(目標(biāo)面積小于32 平方像素)、大目標(biāo)(目標(biāo)面積大于96 平方像素)、中目標(biāo)(目標(biāo)面積介于大、小目標(biāo)之間)。
由圖2 可知橙色和綠色路障數(shù)據(jù)更為集中,因此僅選擇兩者展示性能。
表2 對(duì)四種YOLOv5-Sobj模型的改進(jìn)
3.4.1 改進(jìn)效果分析
圖4(a)所示為以50% IoU 得到的所有目標(biāo)mAP(mean Average Precision),圖4(b)是以50% IoU 得到的小目標(biāo)mAP,圖4(c)是以每秒幀數(shù)為單位的推算速度。橫坐標(biāo)中l(wèi)r02 代表將學(xué)習(xí)率更改為0.02,lr005則為0.005;用ResNet50替換Backbone,DenseNet表示將Backbone 更改為DenseNet;3anch 指每個(gè)尺度自動(dòng)生成3 個(gè)錨框,5anch 指生成自動(dòng)生成5 個(gè)。fpn是將Neck 更改為fpn 的Neck,bifpn 則是將Neck 更改為bifpn 的Neck;deep 指增加模型深度,wide 則指增加模型寬度;XS_inc 指擴(kuò)充Neck 部分以適應(yīng)額外的特征圖,XS_ex 指替換最低分辨率特征圖以適應(yīng)新的特征圖。此外,圖中每個(gè)橫坐標(biāo)對(duì)應(yīng)的四條柱狀線從左至右依次為S、M、L、X 模型下的實(shí)驗(yàn)結(jié)果。
表3 YOLOv5-Sobj與YOLOv5性能參數(shù)對(duì)比
分析改變Backbone 結(jié)構(gòu)帶來(lái)的影響,可以發(fā)現(xiàn)隨著模型的逐漸增大,DenseNet 的推算時(shí)間也在小幅固定增加(大約3 ms),但其檢測(cè)性能也得到了顯著的改進(jìn)。對(duì)比之下,ResNet 在大多數(shù)情況下性能會(huì)下降,而且推算時(shí)間也明顯更長(zhǎng)。
分析改變Neck 結(jié)構(gòu)帶來(lái)的影響,fpn 僅在S 模型中性能優(yōu)于bifpn,而bifpn 的推算時(shí)間和YOLOv5 原有模型近似。這表明保持特征圖相對(duì)不變對(duì)于簡(jiǎn)單的模型來(lái)說(shuō)可能更有益,但對(duì)于相對(duì)復(fù)雜些的模型就需要對(duì)特征圖額外處理。
在特征圖方面,研究發(fā)現(xiàn),重定向被送到Head和Neck 的特征圖對(duì)性能有著明顯的影響。用更高分辨率的特征圖替換最低分辨率的特征圖在性能上帶來(lái)的成效顯著。
在錨框數(shù)量方面,根據(jù)數(shù)據(jù)集生成錨框在性能上確實(shí)是有效的,并且其推算時(shí)間和原有模型近似。然而,性能提升的大小似乎受到模型大小的影響。
在其他方面,研究發(fā)現(xiàn),更大的學(xué)習(xí)率確實(shí)可以更好地利用模型,但這可能會(huì)隨小學(xué)習(xí)率訓(xùn)練模型的epoch數(shù)量變化而變化。此外,與更深的模型相比,更寬的模型對(duì)小尺度目標(biāo)檢測(cè)效果更好。這些類型的改進(jìn)對(duì)推算速度有著明顯的負(fù)面影響,因此不考慮使用。
圖4 單獨(dú)結(jié)構(gòu)更改對(duì)模型性能的影響
3.4.2 實(shí)驗(yàn)總結(jié)
對(duì)于上述提出的改進(jìn)進(jìn)行技術(shù)組合之后,就得到了一種基于YOLOv5 優(yōu)化針對(duì)小目標(biāo)檢測(cè)的算法并將其命名為YOLOv5-Sobj。實(shí)驗(yàn)證明,YOLOv5-Sobj 在以50% IoU 得到的所有目標(biāo)絕對(duì)mAP 上實(shí)現(xiàn)了平均2.4%的性能提升,在以50% IoU 得到的小目標(biāo)絕對(duì)mAP 上實(shí)現(xiàn)了5.3%的提升,同時(shí)付出了推算時(shí)間平均增加大約3 ms 的代價(jià),但這是可以接受的。
在對(duì)YOLOv5 小目標(biāo)檢測(cè)算法的改進(jìn)中提出了幾種架構(gòu)修改,與原有模型相比,以相對(duì)較低的成本實(shí)現(xiàn)了較大的性能改進(jìn),而且保證了推算速度與原有模型基本近似。雖然實(shí)驗(yàn)提出的架構(gòu)有著不錯(cuò)的改進(jìn)效果,但實(shí)驗(yàn)結(jié)論的普遍性還應(yīng)進(jìn)一步研究。最后,還有很多的方向和技術(shù)在文章中沒(méi)有提及,這也是需要進(jìn)一步研究的地方。