劉展威,陳慈發(fā)*,董方敏
(1.三峽大學 計算機與信息學院,湖北 宜昌 443002;2.三峽大學 湖北省建筑質量檢測裝備工程技術研究中心,湖北 宜昌 443002)
隨著基于深度學習的目標檢測技術的快速發(fā)展,“無人機航拍+目標檢測”方法的使用越來越普遍,如森林防火、電路巡檢和農業(yè)監(jiān)管等。目前針對“小目標”的定義主要有2種:一種是絕對尺寸,尺寸小于32 pixel×32 pixel的目標被認為是小目標;另一種是相對尺寸,根據(jù)國際光電工程學會定義,小目標為256 pixel×256 pixel的圖像中成像面積小于80 pixel的目標,即目標的尺寸小于原圖的0.12%則可被認為是小目標[1],因此研究出一個針對航拍小目標檢測的算法模型成為關鍵的研究內容之一。
目標檢測從早期的傳統(tǒng)方法到如今基于深度學習的方法,發(fā)展已有21年。當前基于深度學習的目標檢測算法有2種:第1種是以Faster R-CNN[2]為代表的雙階段檢測算法等,利用算法生成預選框,再使用深度卷積網(wǎng)絡對預選框進行檢測類別的分類,雙階段檢測算法的精度更高,但速度過慢,不能滿足實時性要求較高的場合;第2種是以YOLO[3]、YOLOv3[4]、YOLOv4[5]、YOLOv5以及SSD[6]為代表的單階段檢測算法,將檢測框的定位和分類任務結合,能夠快速檢測出目標位置,通過適當?shù)馗倪M可同時具有更好的實時性與檢測精度。韓玉潔等[7]在YOLO上進行數(shù)據(jù)增強,修改激活函數(shù),添加CIoU,修改后模型精度有所提升,但模型內存占用過大。丁田等[8]加入注意力以及CIoU,加快了模型收斂速度,增加檢測準確率,但同時也增加了計算成本。肖粲俊等[9]加入注意力機制,并引入自適應特征模塊,增強了網(wǎng)絡特征提取能力,但精度提升幅度較小且漏檢率過大。目前改進方法主要通過添加模塊來提升檢測精度,但同時增加了計算成本。因此本文不局限于模塊添加,將在網(wǎng)絡結構上進一步改進。
目前無人機航拍檢測任務主要有以下難題:
① 不同于普通目標檢測,航拍所檢測對象大多數(shù)是小目標,可以提取到有用的特征過少,絕大多數(shù)算法都存在對小目標檢測的漏檢、誤檢問題。
② 現(xiàn)實場景中目標繁多,圖片中背景復雜,常常混雜許多其他干擾性較大的目標。
③ 由于飛行高度問題,各個目標之間大小不同,存在著尺度不一致的問題,導致檢測效果不佳。
為提高無人機航拍目標的檢測精度,結合應用場景的限制,本文提出一種基于YOLOv5s的航拍小目標改進算法VA-YOLO。該算法主要改進與創(chuàng)新有:
① 融入模塊來重新構建主干網(wǎng)絡,提升對小目標的檢測精度。
② 通過添加小目標檢測層與加權雙向金字塔(Bidirectional Feature Pyramid Network,BiFPN)[10]將深層語義跟淺層語義進行多尺度特征融合,解決尺度不一、特征信息利用不充分的問題。
③ 將損失函數(shù)改為Varifocal loss與EIoU,解決檢測精度低與背景干擾過大的問題,使得算法對小目標取得更好的檢測效果。
YOLOv5是一種單階段的目標檢測算法,相比較前一代,它汲取了許多優(yōu)秀網(wǎng)絡結構的優(yōu)點,精度更高、速度也更快,已經能夠做到實時地檢測目標。YOLOv5一共有4個版本:YOLOv5s、YOLOv5m、YOLOv5l和YOLOv5x四種,其網(wǎng)絡深度和寬度逐漸加大??紤]到應用場景,相比其他3個版本,YOLOv5s的網(wǎng)絡結構最簡潔,運行速度最快,計算資源消耗最少,同時也更容易移植到其他平臺,本研究選擇使用模型深度與寬度最淺的YOLOv5s模型。其網(wǎng)絡結構如圖1所示。
YOLOv5s模型主要包括圖片輸入端、Backbone網(wǎng)絡、Neck網(wǎng)絡和Head輸出層四部分。
輸入端會對輸入的圖片進行預處理。首先,對幾張圖片進行隨機裁剪拼接,不僅可以充分利用數(shù)據(jù)集,還能提升訓練速度;其次,在模型訓練中,YOLOv5s算法根據(jù)數(shù)據(jù)集自適應地計算出最佳錨點框,考慮到無人機航拍檢測對象絕大部分為小目標,本文將錨框調整為[3,4,4,8,6,6]、[6,12,12,9,11,17]、[21,11,17,22,36,18]或[26,34,54,41,100,85];最后,將圖片調整到統(tǒng)一大小后輸入到Backbone網(wǎng)絡中。
YOLOv5s(6.0)[11]的Backbone網(wǎng)絡由特征提取模塊CSP[12]、卷積模塊CBL與空間金字塔池化(Spatial Pyramid Pooling-Fast,SPPF)模塊組成。CSP結構分為2類,如圖2所示。SPPF模塊不再使用1×1、5×5、9×9、13×13的最大池化,而是通過多個5×5的MaxPool2d取代原有的池化層,例如2個5×5卷積操作代替一個9×9的卷積操作,用以提高效率。CBL由Conv、BN歸一層和Leaky ReLU激活函數(shù)組成,如圖2所示。
圖2 CSP和CBL結構Fig.2 Structure of CSP and CBL
Neck由特征金字塔網(wǎng)絡(Feature Pyramid Networks,FPN)[13]和路徑聚合網(wǎng)絡(Path Aggregation Network,PAN)[14]構成。FPN自上而下用來強化語義特征,PAN自下而上用來強化位置特征,二者將不同階段特征圖進行特征融合,提高對主干網(wǎng)絡輸出特征的利用率,從而提升對小目標檢測精度。
Head輸出層主要是對Neck層的3個輸出進行卷積操作,并在大小為20×20、40×40、80×80的特征圖上生成對應的預測邊界框。
YOLOv5s具有較好的檢測效果,但其平均檢測精度(mean Average Precision,mAP)與YOLOv3、ClusDet[15]等主流算法相比仍有較大差距,因此,本文將從Backbone網(wǎng)絡、Neck網(wǎng)絡與Head輸出層、損失函數(shù)三方面對YOLOv5s進行改進,力求在不增加運算資源消耗的同時提高精度。
YOLOv5s在進行航拍目標檢測時,往往檢測的對象過小,檢測過程中容易丟失特征信息,導致檢測效果不佳。因此本文加入Coordinate Attention(CA)[16]注意力機制,可以讓算法模型集中在需要關注的區(qū)域,有效提升對小目標檢測的精度。與Squeeze-and-Excitation(SE)[17]注意力機制使用2D全局池化轉變成單個特征向量不同的是,CA將其分成了2個不同方向聚合特征的ID編碼,既可以獲得空間方向的長程依賴,同時也不會缺少位置信息。CA結構如圖3所示。
圖3 CA結構Fig.3 CA structure
首先在輸入端使用2個池化核向水平方向和豎直方向進行池化,得到高度為h,寬度為w的輸出。然后將輸出的特征圖進行融合拼接后使用1×1大小的卷積核進行卷積,生成過渡特征圖。其次,將過渡特征圖分解為單獨的特征圖,再使用1×1大小的卷積核進行卷積,得到與輸入一致的通道數(shù)量。最后使用激活函數(shù),將結果與輸入進行相乘輸出,從而達到強化特征的目的。
為同時確保檢測網(wǎng)絡的大小與精度,經過實驗,選擇在Backbone網(wǎng)絡中將原有的一個CSP模塊替換為CA模塊,不僅計算資源開銷更低效果也更為明顯,實驗對比結果如圖4所示。圖4(a)為未更改的YOLOv5s檢測情況,圖4(b)為將CSP替換為CA的檢測效果圖??梢钥吹綀D片下方不僅檢測出多個漏掉的行人以及摩托目標,而且準確率也有所提升。實驗結果表明,加入注意力機制后,在檢測小目標上模型效果得到顯著提升的同時也具有較好的魯棒性。
(b)替換為CA的檢測效果圖4 檢測效果對比Fig.4 Comparison of detection effects
通常來講,無人機航拍圖像檢測都是小目標,目標的類別以及位置尤為重要,對于較淺層分辨率較高的特征圖,往往能夠保留更加全面的小目標位置信息;較深層的分辨率較低的特征圖,往往保留大目標特征復雜的語義信息。因此,本文在YOLOv5s原有基礎上,通過添加小目標檢測層來繼續(xù)上采樣擴大特征圖,進而增強多尺度之間的特征圖的關聯(lián),讓更為淺層的位置信息與深層的語義信息進一步結合,提升對小目標信息的利用率。
YOLOv5s中Neck網(wǎng)絡部分使用的是FPN+PAN結構,主要是為了解決檢測小目標精度不佳的情況,通過FPN結構將淺層特征圖的位置信息進行向下的遞增,再使用PAN結構做向上的語義信息的遞增,達到融合多層特征信息特征圖的效果。但這種方式只能進行相同尺寸特征圖之間的融合,未利用到不同尺寸的特征圖信息。因此,本文引入了新的BiFPN特征圖融合網(wǎng)絡結構。首先,將單個特征圖輸入的節(jié)點去除,由于該節(jié)點融合的特征信息過少,去掉可以避免不必要的運算;其次,融合同一尺度但更淺層的特征圖,強化了特征圖的豐富性;最后,不限于自頂向下或者自底向上的路徑,將刪除節(jié)點的輸入特征圖輸出到下一級特征圖中,形成新的BiFPN結構,如圖5所示。P1、P2、P3、P4為經過主干網(wǎng)絡的特征圖,F1、F2、F3、F4為經過BiFPN處理后的特征圖。
圖5 BiFPN結構Fig.5 BiFPN structure
BiFPN使用加權融合,通過權值來控制對不同特征信息的學習程度,這里BiFPN使用快速歸一化法,即:
(1)
式中:ωi為經過網(wǎng)絡訓練的權重,由激活函數(shù)確保其大于等于零,ε用來保持整體結果的穩(wěn)定性,為常數(shù),Ii表示輸入圖片的特征,Out表示融合結果。經過改進后,BiFPN從Backbone網(wǎng)絡中提取不同尺度的特征圖進行加權特征融合。
增加小目標檢測層后,其對應檢測層輸出也比原有多了一個,分別為160×160、80×80、40×40、20×20,其中最大的特征圖為添加的小目標檢測層。例如,在17層過后,增加上采樣的同時,在20層與Backbone層中的第2層特征圖進行拼接融合,由此獲得更大的特征圖用以進行小目標檢測。
YOLOv5s的損失計算主要有矩形框損失(box_loss)、置信度損失(obj_loss)和分類損失(cls_loss)三種,YOLOv5s使用CIoU_LOSS[18]作為衡量矩形框的損失。矩形框損失函數(shù)為:
(2)
(3)
式中:IoU為預測的物體框和真實的物體框的交集的面積與并集的面積之比,b、bgt分別表示預測框和真實框的中心點,ρ2(b,bgt)為計算2個中心點的歐式距離,c為能同時包含預測框和真實框的最小閉包區(qū)域的對角線距離,α為權重函數(shù),υ用來度量長寬比的相似性,w為寬,h為高,gt為真實框,p為預測框。
CIoU同時考慮了邊界框的重疊面積、中心點距離以及長寬比,但長寬比v是一個模糊值,并不精確,并且CIoU未能很好地平衡正負樣本的問題。所以本文選用EIoU[19]作為矩形框回歸的損失函數(shù),EIoU_Loss函數(shù)為:
(4)
式中:EIoU Loss總共包含3個損失,即重疊損失、中心距離損失和寬高損失,前半部分參數(shù)與CIoU一致,Cw與Ch為覆蓋2個邊界框的最小外接框的寬度與長度。EIoU在CIoU基礎上將寬高比進一步細節(jié)化,解決了寬高比過于模糊的問題,有效提升了回歸框的精度。
YOLOv5s的置信度與分類損失使用BCEWithLogitsLoss損失函數(shù),該損失函數(shù)將sigmoid與BCELoss整合到一起,在輸入之前自動進行sigmoid激活操作映射到(0,1),然后再對輸出和target進行BCELoss處理。其BCEWithLogitsLoss計算公式為:
(5)
ln=-ω[yn·lnxn+(1-yn)·ln(1-xn)],
(6)
式中:N為樣本數(shù)量,ln為第n個樣本對應的loss,xn為對應樣本的預測概率,由sigmoid激活處理,yn為對應樣本類別的真實概率,取0或1,ω為超參數(shù),表示樣本真實類別。sigmoid函數(shù)為:
(7)
BCEWithLogitsLoss通常用于檢測較為明顯的樣本,但對于無人機航拍的小目標樣本而言,存在著大量負樣本,類別極其不均衡,且占比大容易對訓練結果產生影響,從而降低模型檢測目標的精度。因此,本文引入置信度與定位精度的IoU感知分類評分(IoU-Aware Classification Score,IACS),該評分可以同時表示物體樣本置信度與位置精度,從而在密集小目標中生成更為優(yōu)秀的檢測排序。在此基礎上引入了Varifocal loss,該函數(shù)由Focal Loss[20]改進而來,Varifocal loss函數(shù)定義為:
(8)
式中:p為前景類的預測概率,q為目標IoU得分。在訓練的正樣本中,將p設置為生成的預測框和真實框之間的IoU;而在訓練的負樣本中,所有類別的訓練目標q均為0。
本文借鑒了Focal Loss利用加權的方法解決樣本不平衡的問題,Focal Loss選擇平等地對待正負樣本,但本文選擇有所重點地對待它們。Varifocal loss首先預測IACS評分,再通過p的γ次方人為地降低負樣本的權重,正樣本保持不變。再通過q的IoU得分提升正樣本的權重,由此實現(xiàn)將訓練重點放在高質量的樣本上。同時,為了讓正負樣本的比例更加合理,在上述公式中添加了α因子來進行平衡。
根據(jù)上述改進方法,可以得到本文的VA-YOLO算法,其網(wǎng)絡結構如表1所示。
實驗環(huán)境配置:CPU為AMD Ryzen 7 5800H with Radeon Graphics 3.20 GHz,GPU為NVIDIA RTX3060 6 GB顯存,操作系統(tǒng)為Windows 11,學習框架為Pytorch1.9.0。
本文所使用的數(shù)據(jù)集是VisDrone2019-DET[21],共包含8 599 張靜態(tài)圖像,其中6 471 張用于訓練,548 張用于驗證,1 580 張用于測試。類別主要包含行人、人、汽車、面包車、巴士、卡車、摩托車、自行車、遮陽棚三輪車和三輪車。
使用單類別平均精度(Average Precision,AP)、多類別mAP、精準率(Precision)、模型權重和檢測速度(Frame per Second,FPS)作為評價指標。共設置了以下幾組不同情況下的實驗:YOLOv5s、替換為CA模塊的YOLOv5s、網(wǎng)絡結構更改后的YOLOv5s、損失函數(shù)改進后的YOLOv5s、VA-YOLO,以此來驗證各個模塊的提升效果。實驗結果如表2所示。
表2 消融實驗結果Tab.2 Results of ablation experiments
表2中的結果表明,加入CA注意力機制后,mAP提升了2.14%,模型權重減少2.2 MB,這是因為將CSP替換為更輕量化的CA后,整體網(wǎng)絡層數(shù)減少了13層,從而訓練生成的模型權重也略微降低;結構更改后mAP提升了5.16%,但模型權重增加0.9 MB;Varifocal loss的引入帶來精度的小幅度提升,同時不會導致模型體積的增加;損失函數(shù)的改進在保證模型權重不變的情況下,mAP分別提高了1.78%、3%。綜上所述,VA-YOLO的絕大多數(shù)指標有優(yōu)勢,其中mAP提升了6.26%,且模型權重也有所下降,僅只有PFS低于其他模型。由此可見,改進后的算法對網(wǎng)絡性能的提升起到了明顯作用。
為了驗證本文算法較其他算法的優(yōu)勢,本文與各種主流算法進行對比,結果如表3所示。其中mAP相比Mixed YOLOv3-LITE提升了10.5%,相比次高位提升了6.2%。而在行人、人、汽車、面包車、巴士、摩托車和自行車這7個類別的AP都達到了最優(yōu)檢測效果,各自取得了48.2%、37.4%、81.2%、40.8%、51.4%、44.8%、14.8%。本文算法經過改進后對小目標關注度更多,提升了對其特征信息的利用,同時融合多個尺度的特征圖,減少特征信息的丟失,提升了對小目標的檢測效果。根據(jù)實驗可知,本文算法在檢測種類繁雜、檢測對象過小時,依然能夠充分利用特征圖中的小目標信息,在進行航拍圖像小目標檢測時擁有更大優(yōu)勢。
表3 對比試驗結果Tab.3 Comparative experiment results
為了進一步驗證本文算法在實際場景中的效果,選取測試集中具有挑戰(zhàn)性的圖片進行可視化對比,類型分別為:密集人群小目標、復雜干擾背景小目標、高空車輛小目標、遠距離多尺度小目標。檢測結果如圖6所示,左側為本文算法實驗效果,右側為未經更改的YOLOv5s實驗效果。經過改進后的算法融合了不同尺度下小目標的語義信息,強化了對小目標的特征信息利用,同時也減少對目標的誤檢、漏檢問題。例如在夜間密集人群環(huán)境下,本文算法能夠檢測更多行人目標與車輛目標,且受到光照等背景因素影響的可能性也更小,有效降低了誤檢率與漏檢率。綜上所述,本文改進后的算法對比未經更改的YOLOv5s算法具有顯著的優(yōu)勢,檢測準確率更高、抗干擾更強,對于常見環(huán)境下密集小目標檢測的特征信息提取均有明顯提升。
本文提出的基于YOLOv5s的無人機目標檢測算法,針對航拍目標對象大小不一致、類別繁多且易受背景干擾的問題,首先用CA模塊替換掉Backbone網(wǎng)絡中的一個CSP模塊,在能夠小幅提升檢測精度同時,還能降低模型參數(shù)量與模型權重,并對密集小目標更有興趣。其次更改網(wǎng)絡結構,將YOLOv5s中未被利用到的淺層特征圖與已有的深層特征圖進行融合,并添加小目標檢測層來對小目標進行針對性的檢測,有效減少語義與位置信息的丟失。接著改進損失函數(shù),引入了Varifocal loss與EIoU函數(shù),降低負樣本權重并提高正樣本權重的同時提升回歸框的準確性。最后同幾種主流算法進行對比實驗,實驗證明,本文算法的精度在VisDrone2019-DET數(shù)據(jù)集上同其他算法相比具有一定優(yōu)勢,但由于網(wǎng)絡結構的更改,一定程度上增加了訓練之后模型推理的時間開銷,因此后續(xù)工作重點將優(yōu)化模型參數(shù),在保證速度的同時使其能夠更好地應用于不同環(huán)境。