劉家豪, 陸玉芳
(桂林理工大學信息科學與工程學院,廣西桂林 541004)
目標檢測是計算機視覺領域的重要研究課題之一,其研究內容就是識別和定位圖像中想要關注的內容[1]。大部分深度學習目標檢測算法雖然在傳統目標檢測中擁有較高的識別精度和準確率,但在小目標檢測方面,特征信息較少,分辨率也較低,目前人工智能領域對于定位精度的要求更高,給小目標檢測任務也提出了更高的要求。
目前已有很多學者對小目標檢測進行了相關的研究。在端到端的單級目標檢測中,Liu 等[2]提出一種兼顧檢測速度和檢測精度的多框檢測算法(Single Shot MultiBox Detector,SSD)算法,該算法在圖像特征信息的提取上不夠充分,對小目標檢測,識別效果仍然有提升空間;Redmon 等[3]提出了基于深度神經網絡的對象識別和定位算法(You Only Look Once,YOLO)進行目標檢測,其中YOLOv2 主要使用了批標準化(batch normalization,BN)技術,并且引入錨框機制,YOLOv3采用darknet-53 作為骨干網絡和3 種不同大小的錨框;趙鵬飛等[4]提出一種融合注意力機制的深層次小目標檢測算法,該算法通過替換主骨干網絡結構的連接并且結合不同通道的特征信息提高視覺感受區域的大小,在多尺度檢測方面進行了特征增強和通道注意力機制融合不同特征層,使淺層特征語義信息更加充足。目前YOLOv5 結合前幾個版本的優點,在檢測精度和速度上都有所提高,但在小目標檢測上仍然有改進和提升的空間。
本文對于相關的課題研究與文獻進行分析,在此基礎上提出了一種基于YOLOv5 的小目標檢測改進算法。在圖像中小目標的特征信息很容易被忽略,引入雙向特征金字塔網絡模塊(Bidirectional Feature Pyramid Network,Bi-FPN)加權的結構,避免以往平等對待不同尺度特征的情況;針對小目標包含特征信息少以及定位精度高的問題,加入一種卷積注意力模塊(Convolutional block attention module,CBAM)機制,可更多地識別原圖像更詳細的特征信息,分析表明,改進后的算法和原算法相比檢測精度更高,并且提升了小目標的檢測能力。
YOLO系列是目前目標檢測中效果較好的網絡框架。YOLO算法就是直接在輸入圖像上獲取目標對象的相關信息,使檢測速度更快[5]。YOLOv1 算法的核心思想就是將整張圖像作為網絡的輸入,直接在網絡的輸出層輸出目標物體的類別和對應的具體位置[6]。YOLOv2 決定在加入BN層的同時,將預訓練網絡變為Darknet-19 網絡,提出一種聯合訓練的新算法,使用一種分層的觀點對物體進行分類,用巨量的分類數據集數據來擴充檢測數據集[7]。YOLOv3 算法的網絡結構則變得更加復雜,與YOLOv2 網絡相比,YOLOv3 在多尺度預測和取消softmax 作為候選框分類上都有所改進,Darknet53 網絡結構也更復雜,使得YOLOv3 的速度和準確率有所提升。YOLOv4 網絡能適應不同大小的輸入,在特征融合方面還加入了PAN-Net 結構,能夠更準確地保存空間信息。
YOLOv5 是由Glenn Jocher 等基于YOLO 優化改進而來。YOLOv5 算法主要分為4 個部分,網絡結構如圖1 所示。第1 部分為輸入端,輸入端主要用于處理數據,增強圖像的處理能力,自適應完成錨框計算和圖片縮放,在數據處理上采用了Mosaic數據增強;第2部分為主干網絡(Backbone),由Focus 結構和CSP 結構組成,主要用于提取目標特征;第3 部分為頸部網絡(Neck),由特征金字塔FPN和路徑聚合網絡結構PAN組成,用于收集組合目標特征;第4 部分為檢測層(Prediction),由損失函數和預測框篩選函數組成,可在大小不同的特征圖上預測不同尺寸的目標[8]。

圖1 YOLOv5網絡結構
本文基于YOLOv5 算法提出一種結合CBAM 和Bi-FPN結構模塊的改進YOLOv5 算法,該算法將原網絡結構的PAN-Net模塊替換成Bi-FPN模塊,在改進網絡的基礎上引入CBAM。和原網絡相比主要有以下兩方面改進:
引入Bi-FPN網絡結構代替原來的PAN-Net,實現了更高效的多尺度融合方式,對每個尺度的特征進行權重分配,不同尺度之間的特征信息有了更好地平衡,讓網絡更加關注重要的層次,減少一些不必要的層的結點連接。
引入CBAM 通過在空間和通道二個維度上對圖像信息進行注意力特征融合,提高各個特征在通道和空間上的聯系,更加有效地提取圖像小目標的特征信息。
目標檢測中對小物體檢測很困難,大物體的像素點多,小物體的像素點少,隨著卷積的深入,大物體的特征容易被保留,小物體的特征越往后越容易被忽略。所以產生了FPN結構,如圖2 所示。

圖2 FPN結構
其對特征點先進行下采樣,在有了一些具有高語義內容的特征層后,重新進行上采樣,使特征層的長寬面積變大,用大size 的feature map 去檢測小目標。在上采樣的同時可將下采樣中與上采樣中長寬相同的特征層進行堆疊,可保證小目標的特征與信息和U-net結構相似,但多了堆疊的過程。
Bi-FPN是在EfficientDet 中提出的一種加權雙向特征金字塔網絡,它允許簡單和快速的多尺度特征融合。其目的主要是為追求更高效的多尺度融合方式,以往的特征融合是平等地對待不同尺度特征,在Bi-FPN中引入了權重,類似于attention,能更好地平衡不同尺度的特征信息。
如圖3 所示,PAN-FPN在FPN的基礎上引入了一條自底向上的通道來融合特征,Bi-FPN若輸入和輸出結點是同一水平的,則添加一條額外的邊,在不增加額外成本的同時可融合更多的特征信息。Bi-FPN 給不同特征層賦予不同的權重,讓網絡更加關注重要的層次,對圖像中的小目標有更加詳細的輸出信息。

圖3 PAN-FPN與Bi-FPN特征信息對比
注意力機制主要來自對于人類視覺的研究,當人類在觀察外界事物時,一般不會整體性地看待眼前的事物,更傾向于選擇性地獲取被觀察事物的一些重要信息[9-10]。注意力機制可以幫助網絡模型對輸入圖像的每個部分賦予不同的權重,使模型做出更加準確的識別與判定[11-12]。
目前計算機視覺中常用的注意力機制有空間注意力機制和通道注意力機制兩種[13],空間注意力機制通過調整不同通道上所有像素點的權重以增強網絡特征提取能力,更注重不同通道上各個像素的重要程度;通道注意力機制則調整每個通道的權重,更加注重卷積層中每個通道的重要程度。
CBAM注意力機制特點為輕便有效,是一種適用于卷積神經網絡的注意力模塊。如圖4 所示。給定一個中間特征圖,相應的模塊會沿著通道和空間2 個獨立的維度依次推斷注意力圖,將注意力圖進行相應的處理自適應修飾特征信息,CBAM 是輕量級的通用模塊,適用于任何CNN架構,開銷較小[14]。如圖5 所示即為CBAM 注意力機制模塊。CBAM注意力機制分為空間注意力和通道注意力兩部分,在輸入端輸入特征圖后,圖像會優先接觸上方通道注意力處理,進行全局平均化和最大化,經過多層感知器(Multi-Layer Perception,MLP)處理,再通過Sigmoid 函數獲得歸一化注意力權重,通過通道處理加權到原始特征圖,通道注意力就重新標定了原始特征[15]。

圖4 CBAM結構示意圖

圖5 CBAM模塊工作流程
為提升特征圖的注意力權重,需對特征圖進行通道和空間上的標定處理。輸入特征F 進入通道注意力模塊時,通道注意力處理特征
式中:AvgPool為全局平均池化;MaxPool 為全局最大池化;W1、W0為2 個卷積層;σ 為Sigmoid 激活函數;分別為平均池化特征和最大池化特征。通過平均池化和最大池化,得到2 個空間上下文描述符,將兩個描述符傳入共享網絡生成通道注意力特征圖Mc,經過共享網絡后得到的結果,通過元素求和并輸出特征向量。
當特征F進入空間注意力模塊時,空間注意力
式中,f7×7為卷積核處理。首先沿著通道軸進行平均池化Fcavg和最大池化Fcmax操作,并將它們連接起來生成一個有效特征描述符。在連通的特征描述符上,用卷積核為7 ×7 的卷積層處理生成二維空間注意圖Ms,經Sigmoid激活函數處理,并通過編碼進行特征的強調或抑制。
實驗平臺分為硬件和軟件兩部分,硬件使用八核Inter Core i7-12700H 處理器,顯卡為NVIDIA Geforce RTX 3060 顯卡,顯存為12GB,內存為48GB。在軟件層面上操作系統為Ubuntu 18.04,各項版本分別為Python3.8、CUDA10.2 以及Pytorch1.9.0。
為測試改進YOLOv5 算法的可行性,實驗將使用公開數據集(Vision Meets Drone,VisDrone)對圖片中的小目標進行訓練檢測,該數據集主要分為訓練集和測試集兩部分,本實驗訓練集包含6 471 張圖片,測試集包含1 610 張圖片。
本次實驗使用的是VisDrone2019 數據集,基準數據集由288 個視頻片段組成,由261 908 幀和10 209個靜態圖像組成,由各無人機安裝的攝像機捕獲,涵蓋范圍廣泛,包括位置、環境、物體和密度等[16-17]。這些框架是用超過2.6 ×106個經常感興趣的目標邊界框手動注釋的,例如行人、汽車、自行車和三輪車。為更好地利用數據,還提供了一些重要的屬性,包括場景可見性、對象類別和遮擋。
本文所有定量分析均采用評價指標中的AP 值、精確率(Precision)和召回率(Recall)衡量網絡對測試圖片的檢測性能。精確率是指正確樣本占所有樣本的比重;召回率是指樣本中正樣本被預測正確的比重,召回率高時精確度較低,召回率低時精確度較高,因此兩者存在一定的互斥關系
式中:TP為真正例,即樣本為正,預測結果為正;FP為假正例,樣本為負,預測結果為正;FN 為假負例,樣本為正,預測結果為負;Psmooth(r)為召回率和準確率的關系;AP值為相應的網絡檢測性能。
本實驗針對Faster-RCNN、YOLOv3 和YOLOv5 3種經典目標檢測模型進行定量分析,并且它們和改進YOLOv5 算法使用相同的測試集做實驗對比。在訓練前選取640 ×640 的圖像,實驗結果見表1。
由對比數據可見,改進后YOLOv5 小目標檢測的結果與YOLOv5 相比,mAP@0.5 提高了2.7%,精度提高了4.1%,召回率提高了2.3%,小目標檢測的整體效果更好。相比于Faster-RCNN和YOLOv3 的目標檢測算法,改進算法的檢測性能也更好,檢測速度也更快。由于在YOLOv5 的網絡結構中加入了Bi-FPN,能更好獲取不同尺度的特征信息,在加入了CBAM注意力機制后,有效地提高了小目標的信息獲取,改進后的算法對小尺寸目標的檢測性能及最終AP值都要優于其他幾種算法。
為進一步了解改進YOLOv5 算法對小目標的檢測情況,如圖6 所示,記錄了其訓練過程中各項數據的趨勢,一共進行了200 輪測試。從圖中可見,閾值為0.5、從0.5 ~0.95 的AP值始終呈上升趨勢,在50 輪左右開始收斂,精度曲線在10 輪左右有一段下降趨勢,因為受訓練中加入了預訓練權重所影響。精度和召回率由于相互矛盾的緣故,它們的波動趨勢相反,但整體趨勢都呈上升。

圖6 改進YOLOv5模型訓練關鍵參數變化
針對Faster-RCNN、YOLOv3、傳統YOLOv5 算法和改進YOLOv5 算法進行定性分析,選擇了兩張在小目標檢測具有代表性的圖片樣張,測試結果如圖7 所示。圖7(a)上方出現的車輛小目標對象,分布比較集中,在比較集中的區域傳統目標檢測算法對于小目標的特征表現效果較差,在深層特征的語義表達信息不夠充分,所以會出現檢測遺漏情況。改進后的算法由于加入了Bi-FPN網絡結構模塊,所以改進YOLOv5 算法可通過學習權重獲取不同層次的特征信息,能更有效地得到小目標對象在深層特征的語義表達信息,最終能更精確地檢測出圖片中的車輛小目標對象;圖7(b)整體環境較復雜,干擾因素比較多,但小目標主要是行人。在沒有引入注意力機制之前的傳統目標檢測算法對信息提取不夠充分,不能夠關注更加重要的層次,所以會出現對行人的檢測不夠精確,改進后的YOLOv5算法由于引入了CBAM注意力機制,所以無論是在特征提取能力還是定位能力上跟普通目標檢測算法相比均有提高。

圖7 不同目標檢測算法檢測結果對比圖
從圖像中能看出改進后的算法也提高了圖像中行人小目標的檢測精度。由實驗結果可見,改進YOLOv5 算法的檢測精度更高,也改善了檢測遺漏的情況。改進YOLOv5 算法在小目標檢測方面檢測能力確實更好。
由于目前小目標在圖像中像素度較低以及背景環境等因素而出現的較高漏檢率,檢測精度較低的問題,本實驗在YOLOv5 的基礎上,在權重參數加入Bi-FPN網絡模塊以及CBAM 注意力機制,在VisDrone2019 數據集的測試,測試結果表明,改進YOLOv5 目標檢測算法在對于小目標的檢測方面識別效果更好,并經各項客觀數據分析后可知,改進YOLOv5 算法的精度和其他幾種目標檢測算法相比均有所提高。改進后的YOLOv5 算法具有較好的識別能力,更加關注小目標特征信息,在小目標檢測能力上有了一定的提升。改進YOLOv5 算法在某些特殊情況上仍有提升空間,后面會繼續進行在某些極端情況下的檢測優化工作。