傅 強,盧志偉,潘 磊
(中國民用航空飛行學院計算機學院,廣漢 618307)
無人機如今被廣泛應用在城市巡檢、農業、環境治理等方面。城市巡檢中,無人機用于檢測亂搭亂建;在農業上,無人機用于蟲害檢測、農作物監管等;在環境治理上,無人機運用在森林防火、湖泊治理等方面。而這些典型的行業應用,都離不開航拍圖像的目標檢測技術。
無人機航拍圖像目標檢測相對于靜態圖像的目標檢測任務,其任務場景中的目標所占像素很小,角度為垂直向下或傾斜角度向下,攝入區域背景大,干擾因素很多,較靜態圖像的檢測任務更難。同時由于無人機的硬件限制,很難搭載大型運算平臺,無法部署復雜度較高的網絡模型,需要兼顧較好實時性和較高的檢測精度比較困難。因此,區別于傳統的目標檢測技術,基于無人機的航拍圖像檢測技術具有更多的困難與挑戰。
目前的主流目標檢測框架大致可分為兩類:單階段算法和兩階段算法。單階段算法以YOLO[1]系列、SSD[2]等為代表。兩階段算法以Faster R?CNN[3]、Mask R?CNN[4]等為代表。兩階段算法的網絡一般分為三部分:頭網絡、可能目標檢測層、末端功能層,由于網絡結構更復雜,整體性能更好,但是對算力要求也更高。單階段算法則取消了可能目標檢測層,直接通過特征圖預測物體位置和分類結果,計算量明顯減少,檢測性能相對有所下降,但是可以搭載在小型設備上。
為了同時兼顧實時性和準確率,常用的解決途徑是對單階段算法加以改進。例如,主要的改進方案是對特征金字塔網絡[5](feature pyra?mid network,FPN)進行優化。Google 在2019 年提出了NAS?FPN[6], 在2020 年又提出了BiFPN[7],都是在FPN 中尋找一個有效的Block,然后重復疊加,以彈性控制FPN 的大小。Liu等[8]提出了ASFF,在YOLOv3 的基礎上研究了每一個階段再次融合三個階段特征的效果,并采用了注意力機制,以控制其他階段對本階段的貢獻度。Qiao 等[9]提出了Recursive?FPN,將FPN 輸出作為backbone 對應層的特征進行卷積,卷積后的結果輸出到FPN,再與上次FPN 輸出的結果結合。Wang 等[10]基于深度均衡模型DEQ,提出引入隱函數對FPN 進行建模,稱為i?FPN,引入類似殘差模塊以有效更新隱態,通過非線性轉換器提高模型的非線性擬合能力。Zhang 等[11]提出了規模均衡特征金字塔網絡(SEFPN),通過迭代融合每個層次的特征來生成多個不同規模的特征,且通過平衡每一層特征的語義表示來提高網絡的整體性能。
因此,本文遵循上述思路,提出了一種新的CC?YOLOv5 目標檢測算法。一方面,算法改進了Neck部分的FPN 結構,在Neck中多加了兩層,并改變特征融合層;另一方面,在Back?bone 部分集成CBAM 模塊,豐富網絡獲取的目標特征信息,降低網絡的復雜度,以滿足算法在實時性要求下的較高準確率。
本文基于傳統的YOLOv5網絡,提出了一種新的CC?YOLOv5 目標檢測算法。整體框架如圖1 所示。模型由用于特征提取的主干網絡Back?bone、用于特征融合的頸部Neck 和進行最終分類和回歸操作的檢測頭Head 三部分組成。圖像輸入網絡后,首先通過Backbone 進行5 次特征提取,得到F1、F2、F3、F4、F5,隨后傳入Neck 部分。本文改進了Neck 部分的FPN,在YOLOv5 的基礎上又加入兩層,由原本的4 層變為6層,以增強網絡的特征融合能力,同時每一層不僅融合來自Backbone 部分的feature map,也融合來自Neck 部分前三層對應維度和尺度的feature map。此操作可以更好地獲得目標的語義信息和幾何信息,從而更好地檢測到目標。輸出的P4、P3、P2、P1 傳入檢測頭Head 做檢測,輸出最終結果。

圖1 CC?YOLOv5的整體框架
CC?YOLOv5 替換了Backbone 最后一層和Neck 最后一層的C3 為C3TR,使其能夠更好地提取全局信息,提高其對目標的檢測性能。自Ultralytics 提出了YOLOv5[12]以來便不斷更新,設計出很多不同的模塊。YOLOv5 加入了C3TR[12]模塊,該模塊結合了Transformer,是對多頭自注意力模塊[13]和位置編碼[14]進行應用。用C3TR 模塊替換C3 模塊,可以減少FLOPs,加快訓練和檢測的速度。
CC?YOLOv5 在Backbone 部分集成CBAM 模塊,豐富網絡獲取的目標特征信息,降低網絡的復雜度。雙通道注意力機制(convolutional block attention module,CBAM)[15]是輕量級的卷積注意力模塊,它結合了通道和空間的注意力機制模塊。結構如圖2 所示,包含CAM(channel attention module)和SAM(spartial attention module)兩個子模塊,分別進行通道和空間上的Attention。

圖2 CBAM的結構
通道注意力模塊使通道維度不變,壓縮空間維度。該模塊關注輸入圖片中有意義的信息,在本研究中,即所檢測目標的信息。而空間注意力模塊則空間維度不變,壓縮通道維度,該模塊關注的是目標的位置信息。在網絡中集成CBAM,能夠節約參數和計算力。
卷積網絡中,深層網絡相對容易提取語義特征,淺層網絡則容易提取圖像特征。然而,在目標檢測中這個特征往往會產生一些問題:深層網絡雖然包含更豐富語義,但是由于Fea?ture Map 的尺寸太小,擁有的幾何信息并不多,不利于目標的檢測;淺層網絡雖然包含較多的幾何特征,但是圖像的語義特征并不多,不利于圖像的分類。這個問題在小目標檢測中更為突出。對于航拍圖像而言,目標尺度變化較大,且背景復雜,導致網絡在特征融合階段可能會損失部分特征信息。
CC?YOLOv5對YOLOv5m 的FPN 層進行了改進,在增加兩層的同時,改變特征融合的層,使網絡能夠更好地融合不同feature map 中的特征信息。改進的FPN 稱為CCFPN,詳細結構如圖3所示。

圖3 CC?YOLOv5的詳細結構

圖4 邊緣計算設備
由圖1和圖3,Backbone部分F1由輸入圖像執行一次Focus 和Conv 操作,圖像大小變為輸入圖像的1/2,其后F2、F3、F4 都執行一次C3和一次Conv,每次均使輸入的feature map 變為原來的1/2,然后F5則執行一次C3TR和SPPF操作,C3TR 結合了Transformer,可以提高對全局信息的提取,從而增大對目標的特征提取能力,提高目標的檢測能力。隨后F5 通過CBAM 操作后,與原本的F5 一起輸入Neck 部分的P6。C3TR 和CBAM 都可以提升網絡的精度和速度,為了兼顧精確性和實時性,本文遂替換并加入了C3TR和CBAM。
由于無人機航拍圖像的特性,目標尺度變化較大,本文認為原本的YOLOv5 的Neck 部分只有4 層,并不能很好地融合feature map,為此本文在FPN 中又加了兩層,以期望能夠更好地融合特征信息。Neck 部分的P6、P5、P4 由Conv、Upsample、Concat、C3 組成,P3、P2 由Conv、Concat、C3 組成。P6 中Concat 的輸入為由上一步執行完Upsample 輸出的feature 和F4 輸出的feature,P5 的則是F3 的輸出,P4 的為F2的輸出,P3 中Concat 的輸入為上一步Conv 的輸出、F2 的輸出和P5 的輸出,P2 則是F3 的輸出和P4 的輸出,以此來豐富目標的語義信息,融合更多的特征信息,提升檢測精度。P1 則由Conv、Concat、C3TR 組成,Concat 的輸入為上一步Conv 后的輸出和F5 經過CBAM 操作后的輸出。最后的檢測則分別取自P3、P2、P1 Conv后的feature map 以及最后經過C3TR 處理后的fea?ture map。
實驗數據集為VisDrone2019[16],由10209張帶標注的圖像組成,圖片均由無人機拍攝采集,其中用于訓練的圖片6491 張,用于驗證的圖片548 張,以及用于測試的3190 張,總共包含10個類別:行人、人、汽車、面包車、巴士、卡車、摩托車、自行車、遮陽篷三輪車和三輪車,目標總數量達260 萬。本文基于PyTorch 框架,在VisDrone2019 數據集上進行訓練,GPU 為兩張Nvidia RTX3080 Ti,輸入圖像尺寸為640×480,批處理大小為8。用參數量及每秒10 億次浮點運算次數GFLOPs(Giga floating?point opera?tions per second)來評價模型的復雜度,以平均均值精度mAP(mean average precision)作為目標檢測性能的評價指標,平均精度AP(average pre?cision)作為單個目標的檢測性能的評價指標。
本文選取了YOLOv4[17]、YOLOv5m[12]、Faster R?CNN[3]、Cascade R?CNN[16]共4 種典型的目標檢測算法進行對比。表1是基于VisDrone2019數據集中10類目標的AP與mAP實驗結果對比。

表1 不同算法在VisDrone2019數據集上的AP與mAP對比
從表1 可以看出,CC?YOLOv5 比其他算法的準確率高,mAP 達到了33.5%,除了人和車兩類目標外,均取得最好的檢測性能。相比于YOLOv5m 而言,CC?YOLOv5 對每一類別均取得了提升。
為了驗證CBAM[14]以及CCFPN 結構的有效性,在VisDrone2019 數據集上進行了一系列的消融實驗,以YOLOv5m 作為Baseline 網絡,同時對比了YOLOv5n、YOLOv5s、YOLOv5l和YO?LOv5x,以mAP、參數量及每秒10 億次浮點運算次數為評價指標,最終結果如表2所示。

表2 VisDrone2019數據集消融實驗結果
消融實驗結果表明,CC?YOLOv5 網絡比YOLOv5m 的參數量多了2.9 M,每秒10 億次浮點運算次數GFLOPs 增加了11.5,mAP 提升了3.3 個百分點,精度的提升也體現了加入C3TR、CBAM,以及CC?YOLOv5 結構增強目標檢測性能的能力。值得注意的是,相比于YOLOv5l 和YOLOv5x,CC?YOLOv5的參數量和GFLOPs都小很多,但精度相比于YOLOv5l 卻高得多,且跟YOLOv5x 的精度相差無幾。考慮到該算法要搭載在小型邊緣計算設備上,模型過大會出現延遲較高或者檢測掉幀的問題,所以本文在改進時選擇YOLOv5m,兼顧實時性的同時,能夠在精度上有所提升。C3TR 結合了transformers,能夠有效提取全局的信息,增強對目標的檢測性能;CBAM 結合了通道和空間的注意力機制模塊,分別進行通道和空間上的Attention,精度有所提升,并且可以看出其有效減少了參數量和模型的GFLOPs;將YOLOv5m 的FPN 替換為本文的FPN 后,由于在Neck 部分增加了兩層,參數量和GFLOPs都有所增加,精度提升不是很明顯,但是加入C3TR 和CBAM 后精度提升較大,本文認為是因為經過CBAM 和C3TR 的fea?ture map 攜帶更加豐富的語義信息和幾何信息,在融合時獲取了更好的特征信息,從而導致精度的提升。由于CBAM 可以有效節約計算成本,C3TR可以提升對目標的檢測性能,因此保持了良好的實時性。CCFPN 融合了來自網絡前面的feature map,即能夠融合深層網絡的語義信息與淺層網絡的幾何信息,有效獲取航拍圖像的特征信息,從而使得算法的精度提升。綜上所述,CC?YOLOv5 提升了檢測性能,維持較小的計算成本,可以搭載在小型邊緣計算設備上。
由于小型無人機的硬件限制,不能在機體上部署大型運算平臺,致使無人機上無法部署更為復雜的算法。為了驗證本文算法的實時性水平,將算法搭載在Nvidia Jetson Nano 小型邊緣計算設備上進行實驗。Nvidia Jetson Nano配備了四核Cortex?A57 處理芯片,包括4 GB LPDDR內存以及128 核Maxwell GPU,能夠運行多種算法和AI 框架,如TensorFlow、Keras、PyTorch、Caffe 等。該邊緣設備質量為200 克左右,可以直接安裝在小型無人機上。
本文與YOLOv5m對比,分別對VisDrone2019數據集中的3190 張測試圖片做檢測,以每張圖片的平均檢測時間做對比,考慮到YOLOv5x的mAP 與本文算法相差無幾,所以也對比了YOLOv5x 的時間。表3 是對比結果,圖5 是檢測結果。

表3 檢測時間對比

圖5 檢測結果對比
從表3 可以看出,在輸入圖像大小同為640 × 480 的情況下,CC?YOLOv5 與YOLOv5m都完全滿足實時性要求,但CC?YOLOv5 的準確率更優,比后者高3.3 個百分點。YOLOv5x的平均檢測時間達0.725 s,產生了很嚴重的掉幀及卡頓問題,無法滿足實時性要求。
對圖5的實驗結果進行評價,本文方法表現出更為優異的檢測性能,能夠較為準確地識別出圖像中的各類多尺度目標。例如,YOLOv5m檢測不出來的遠景小目標,CC?YOLOv5 也能識別出來。一些YOLOv5m 誤檢的目標,本文算法也能準確地分類。但也注意到,對于個別的極小目標,偶爾還存在著誤檢的情況。這是由于輸入圖像的分辨率太低,極小目標的視覺信息太少所導致,后續可考慮融合超分辨率的方法來解決該問題。
本文針對無人機航拍圖像的特點與挑戰,提出一種新的目標檢測算法CC?YOLOv5。通過C3TR 和CBAM,提升全局信息的提取,更好地融合了獲取的深層網絡的語義信息與淺層網絡的幾何信息,豐富了網絡獲取的特征信息,同時改進的FPN 層更好地融合了這些獲取的特征信息,提升檢測性能,并且參數量和GFLOPs增加不多。實驗結果表明,本文算法在滿足無人機邊緣計算平臺的實時性要求下,具有更為優異的檢測準確性。