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