傅 強(qiáng),盧志偉,潘 磊
(中國民用航空飛行學(xué)院計(jì)算機(jī)學(xué)院,廣漢 618307)
無人機(jī)如今被廣泛應(yīng)用在城市巡檢、農(nóng)業(yè)、環(huán)境治理等方面。城市巡檢中,無人機(jī)用于檢測亂搭亂建;在農(nóng)業(yè)上,無人機(jī)用于蟲害檢測、農(nóng)作物監(jiān)管等;在環(huán)境治理上,無人機(jī)運(yùn)用在森林防火、湖泊治理等方面。而這些典型的行業(yè)應(yīng)用,都離不開航拍圖像的目標(biāo)檢測技術(shù)。
無人機(jī)航拍圖像目標(biāo)檢測相對于靜態(tài)圖像的目標(biāo)檢測任務(wù),其任務(wù)場景中的目標(biāo)所占像素很小,角度為垂直向下或傾斜角度向下,攝入?yún)^(qū)域背景大,干擾因素很多,較靜態(tài)圖像的檢測任務(wù)更難。同時(shí)由于無人機(jī)的硬件限制,很難搭載大型運(yùn)算平臺(tái),無法部署復(fù)雜度較高的網(wǎng)絡(luò)模型,需要兼顧較好實(shí)時(shí)性和較高的檢測精度比較困難。因此,區(qū)別于傳統(tǒng)的目標(biāo)檢測技術(shù),基于無人機(jī)的航拍圖像檢測技術(shù)具有更多的困難與挑戰(zhàn)。
目前的主流目標(biāo)檢測框架大致可分為兩類:單階段算法和兩階段算法。單階段算法以YOLO[1]系列、SSD[2]等為代表。兩階段算法以Faster R?CNN[3]、Mask R?CNN[4]等為代表。兩階段算法的網(wǎng)絡(luò)一般分為三部分:頭網(wǎng)絡(luò)、可能目標(biāo)檢測層、末端功能層,由于網(wǎng)絡(luò)結(jié)構(gòu)更復(fù)雜,整體性能更好,但是對算力要求也更高。單階段算法則取消了可能目標(biāo)檢測層,直接通過特征圖預(yù)測物體位置和分類結(jié)果,計(jì)算量明顯減少,檢測性能相對有所下降,但是可以搭載在小型設(shè)備上。
為了同時(shí)兼顧實(shí)時(shí)性和準(zhǔn)確率,常用的解決途徑是對單階段算法加以改進(jìn)。例如,主要的改進(jìn)方案是對特征金字塔網(wǎng)絡(luò)[5](feature pyra?mid network,F(xiàn)PN)進(jìn)行優(yōu)化。Google 在2019 年提出了NAS?FPN[6], 在2020 年又提出了BiFPN[7],都是在FPN 中尋找一個(gè)有效的Block,然后重復(fù)疊加,以彈性控制FPN 的大小。Liu等[8]提出了ASFF,在YOLOv3 的基礎(chǔ)上研究了每一個(gè)階段再次融合三個(gè)階段特征的效果,并采用了注意力機(jī)制,以控制其他階段對本階段的貢獻(xiàn)度。Qiao 等[9]提出了Recursive?FPN,將FPN 輸出作為backbone 對應(yīng)層的特征進(jìn)行卷積,卷積后的結(jié)果輸出到FPN,再與上次FPN 輸出的結(jié)果結(jié)合。Wang 等[10]基于深度均衡模型DEQ,提出引入隱函數(shù)對FPN 進(jìn)行建模,稱為i?FPN,引入類似殘差模塊以有效更新隱態(tài),通過非線性轉(zhuǎn)換器提高模型的非線性擬合能力。Zhang 等[11]提出了規(guī)模均衡特征金字塔網(wǎng)絡(luò)(SEFPN),通過迭代融合每個(gè)層次的特征來生成多個(gè)不同規(guī)模的特征,且通過平衡每一層特征的語義表示來提高網(wǎng)絡(luò)的整體性能。
因此,本文遵循上述思路,提出了一種新的CC?YOLOv5 目標(biāo)檢測算法。一方面,算法改進(jìn)了Neck部分的FPN 結(jié)構(gòu),在Neck中多加了兩層,并改變特征融合層;另一方面,在Back?bone 部分集成CBAM 模塊,豐富網(wǎng)絡(luò)獲取的目標(biāo)特征信息,降低網(wǎng)絡(luò)的復(fù)雜度,以滿足算法在實(shí)時(shí)性要求下的較高準(zhǔn)確率。
本文基于傳統(tǒng)的YOLOv5網(wǎng)絡(luò),提出了一種新的CC?YOLOv5 目標(biāo)檢測算法。整體框架如圖1 所示。模型由用于特征提取的主干網(wǎng)絡(luò)Back?bone、用于特征融合的頸部Neck 和進(jìn)行最終分類和回歸操作的檢測頭Head 三部分組成。圖像輸入網(wǎng)絡(luò)后,首先通過Backbone 進(jìn)行5 次特征提取,得到F1、F2、F3、F4、F5,隨后傳入Neck 部分。本文改進(jìn)了Neck 部分的FPN,在YOLOv5 的基礎(chǔ)上又加入兩層,由原本的4 層變?yōu)?層,以增強(qiáng)網(wǎng)絡(luò)的特征融合能力,同時(shí)每一層不僅融合來自Backbone 部分的feature map,也融合來自Neck 部分前三層對應(yīng)維度和尺度的feature map。此操作可以更好地獲得目標(biāo)的語義信息和幾何信息,從而更好地檢測到目標(biāo)。輸出的P4、P3、P2、P1 傳入檢測頭Head 做檢測,輸出最終結(jié)果。
圖1 CC?YOLOv5的整體框架
CC?YOLOv5 替換了Backbone 最后一層和Neck 最后一層的C3 為C3TR,使其能夠更好地提取全局信息,提高其對目標(biāo)的檢測性能。自Ultralytics 提出了YOLOv5[12]以來便不斷更新,設(shè)計(jì)出很多不同的模塊。YOLOv5 加入了C3TR[12]模塊,該模塊結(jié)合了Transformer,是對多頭自注意力模塊[13]和位置編碼[14]進(jìn)行應(yīng)用。用C3TR 模塊替換C3 模塊,可以減少FLOPs,加快訓(xùn)練和檢測的速度。
CC?YOLOv5 在Backbone 部分集成CBAM 模塊,豐富網(wǎng)絡(luò)獲取的目標(biāo)特征信息,降低網(wǎng)絡(luò)的復(fù)雜度。雙通道注意力機(jī)制(convolutional block attention module,CBAM)[15]是輕量級的卷積注意力模塊,它結(jié)合了通道和空間的注意力機(jī)制模塊。結(jié)構(gòu)如圖2 所示,包含CAM(channel attention module)和SAM(spartial attention module)兩個(gè)子模塊,分別進(jìn)行通道和空間上的Attention。
圖2 CBAM的結(jié)構(gòu)
通道注意力模塊使通道維度不變,壓縮空間維度。該模塊關(guān)注輸入圖片中有意義的信息,在本研究中,即所檢測目標(biāo)的信息。而空間注意力模塊則空間維度不變,壓縮通道維度,該模塊關(guān)注的是目標(biāo)的位置信息。在網(wǎng)絡(luò)中集成CBAM,能夠節(jié)約參數(shù)和計(jì)算力。
卷積網(wǎng)絡(luò)中,深層網(wǎng)絡(luò)相對容易提取語義特征,淺層網(wǎng)絡(luò)則容易提取圖像特征。然而,在目標(biāo)檢測中這個(gè)特征往往會(huì)產(chǎn)生一些問題:深層網(wǎng)絡(luò)雖然包含更豐富語義,但是由于Fea?ture Map 的尺寸太小,擁有的幾何信息并不多,不利于目標(biāo)的檢測;淺層網(wǎng)絡(luò)雖然包含較多的幾何特征,但是圖像的語義特征并不多,不利于圖像的分類。這個(gè)問題在小目標(biāo)檢測中更為突出。對于航拍圖像而言,目標(biāo)尺度變化較大,且背景復(fù)雜,導(dǎo)致網(wǎng)絡(luò)在特征融合階段可能會(huì)損失部分特征信息。
CC?YOLOv5對YOLOv5m 的FPN 層進(jìn)行了改進(jìn),在增加兩層的同時(shí),改變特征融合的層,使網(wǎng)絡(luò)能夠更好地融合不同feature map 中的特征信息。改進(jìn)的FPN 稱為CCFPN,詳細(xì)結(jié)構(gòu)如圖3所示。
圖3 CC?YOLOv5的詳細(xì)結(jié)構(gòu)
圖4 邊緣計(jì)算設(shè)備
由圖1和圖3,Backbone部分F1由輸入圖像執(zhí)行一次Focus 和Conv 操作,圖像大小變?yōu)檩斎雸D像的1/2,其后F2、F3、F4 都執(zhí)行一次C3和一次Conv,每次均使輸入的feature map 變?yōu)樵瓉淼?/2,然后F5則執(zhí)行一次C3TR和SPPF操作,C3TR 結(jié)合了Transformer,可以提高對全局信息的提取,從而增大對目標(biāo)的特征提取能力,提高目標(biāo)的檢測能力。隨后F5 通過CBAM 操作后,與原本的F5 一起輸入Neck 部分的P6。C3TR 和CBAM 都可以提升網(wǎng)絡(luò)的精度和速度,為了兼顧精確性和實(shí)時(shí)性,本文遂替換并加入了C3TR和CBAM。
由于無人機(jī)航拍圖像的特性,目標(biāo)尺度變化較大,本文認(rèn)為原本的YOLOv5 的Neck 部分只有4 層,并不能很好地融合feature map,為此本文在FPN 中又加了兩層,以期望能夠更好地融合特征信息。Neck 部分的P6、P5、P4 由Conv、Upsample、Concat、C3 組成,P3、P2 由Conv、Concat、C3 組成。P6 中Concat 的輸入為由上一步執(zhí)行完Upsample 輸出的feature 和F4 輸出的feature,P5 的則是F3 的輸出,P4 的為F2的輸出,P3 中Concat 的輸入為上一步Conv 的輸出、F2 的輸出和P5 的輸出,P2 則是F3 的輸出和P4 的輸出,以此來豐富目標(biāo)的語義信息,融合更多的特征信息,提升檢測精度。P1 則由Conv、Concat、C3TR 組成,Concat 的輸入為上一步Conv 后的輸出和F5 經(jīng)過CBAM 操作后的輸出。最后的檢測則分別取自P3、P2、P1 Conv后的feature map 以及最后經(jīng)過C3TR 處理后的fea?ture map。
實(shí)驗(yàn)數(shù)據(jù)集為VisDrone2019[16],由10209張帶標(biāo)注的圖像組成,圖片均由無人機(jī)拍攝采集,其中用于訓(xùn)練的圖片6491 張,用于驗(yàn)證的圖片548 張,以及用于測試的3190 張,總共包含10個(gè)類別:行人、人、汽車、面包車、巴士、卡車、摩托車、自行車、遮陽篷三輪車和三輪車,目標(biāo)總數(shù)量達(dá)260 萬。本文基于PyTorch 框架,在VisDrone2019 數(shù)據(jù)集上進(jìn)行訓(xùn)練,GPU 為兩張Nvidia RTX3080 Ti,輸入圖像尺寸為640×480,批處理大小為8。用參數(shù)量及每秒10 億次浮點(diǎn)運(yùn)算次數(shù)GFLOPs(Giga floating?point opera?tions per second)來評價(jià)模型的復(fù)雜度,以平均均值精度mAP(mean average precision)作為目標(biāo)檢測性能的評價(jià)指標(biāo),平均精度AP(average pre?cision)作為單個(gè)目標(biāo)的檢測性能的評價(jià)指標(biāo)。
本文選取了YOLOv4[17]、YOLOv5m[12]、Faster R?CNN[3]、Cascade R?CNN[16]共4 種典型的目標(biāo)檢測算法進(jìn)行對比。表1是基于VisDrone2019數(shù)據(jù)集中10類目標(biāo)的AP與mAP實(shí)驗(yàn)結(jié)果對比。
表1 不同算法在VisDrone2019數(shù)據(jù)集上的AP與mAP對比
從表1 可以看出,CC?YOLOv5 比其他算法的準(zhǔn)確率高,mAP 達(dá)到了33.5%,除了人和車兩類目標(biāo)外,均取得最好的檢測性能。相比于YOLOv5m 而言,CC?YOLOv5 對每一類別均取得了提升。
為了驗(yàn)證CBAM[14]以及CCFPN 結(jié)構(gòu)的有效性,在VisDrone2019 數(shù)據(jù)集上進(jìn)行了一系列的消融實(shí)驗(yàn),以YOLOv5m 作為Baseline 網(wǎng)絡(luò),同時(shí)對比了YOLOv5n、YOLOv5s、YOLOv5l和YO?LOv5x,以mAP、參數(shù)量及每秒10 億次浮點(diǎn)運(yùn)算次數(shù)為評價(jià)指標(biāo),最終結(jié)果如表2所示。
表2 VisDrone2019數(shù)據(jù)集消融實(shí)驗(yàn)結(jié)果
消融實(shí)驗(yàn)結(jié)果表明,CC?YOLOv5 網(wǎng)絡(luò)比YOLOv5m 的參數(shù)量多了2.9 M,每秒10 億次浮點(diǎn)運(yùn)算次數(shù)GFLOPs 增加了11.5,mAP 提升了3.3 個(gè)百分點(diǎn),精度的提升也體現(xiàn)了加入C3TR、CBAM,以及CC?YOLOv5 結(jié)構(gòu)增強(qiáng)目標(biāo)檢測性能的能力。值得注意的是,相比于YOLOv5l 和YOLOv5x,CC?YOLOv5的參數(shù)量和GFLOPs都小很多,但精度相比于YOLOv5l 卻高得多,且跟YOLOv5x 的精度相差無幾??紤]到該算法要搭載在小型邊緣計(jì)算設(shè)備上,模型過大會(huì)出現(xiàn)延遲較高或者檢測掉幀的問題,所以本文在改進(jìn)時(shí)選擇YOLOv5m,兼顧實(shí)時(shí)性的同時(shí),能夠在精度上有所提升。C3TR 結(jié)合了transformers,能夠有效提取全局的信息,增強(qiáng)對目標(biāo)的檢測性能;CBAM 結(jié)合了通道和空間的注意力機(jī)制模塊,分別進(jìn)行通道和空間上的Attention,精度有所提升,并且可以看出其有效減少了參數(shù)量和模型的GFLOPs;將YOLOv5m 的FPN 替換為本文的FPN 后,由于在Neck 部分增加了兩層,參數(shù)量和GFLOPs都有所增加,精度提升不是很明顯,但是加入C3TR 和CBAM 后精度提升較大,本文認(rèn)為是因?yàn)榻?jīng)過CBAM 和C3TR 的fea?ture map 攜帶更加豐富的語義信息和幾何信息,在融合時(shí)獲取了更好的特征信息,從而導(dǎo)致精度的提升。由于CBAM 可以有效節(jié)約計(jì)算成本,C3TR可以提升對目標(biāo)的檢測性能,因此保持了良好的實(shí)時(shí)性。CCFPN 融合了來自網(wǎng)絡(luò)前面的feature map,即能夠融合深層網(wǎng)絡(luò)的語義信息與淺層網(wǎng)絡(luò)的幾何信息,有效獲取航拍圖像的特征信息,從而使得算法的精度提升。綜上所述,CC?YOLOv5 提升了檢測性能,維持較小的計(jì)算成本,可以搭載在小型邊緣計(jì)算設(shè)備上。
由于小型無人機(jī)的硬件限制,不能在機(jī)體上部署大型運(yùn)算平臺(tái),致使無人機(jī)上無法部署更為復(fù)雜的算法。為了驗(yàn)證本文算法的實(shí)時(shí)性水平,將算法搭載在Nvidia Jetson Nano 小型邊緣計(jì)算設(shè)備上進(jìn)行實(shí)驗(yàn)。Nvidia Jetson Nano配備了四核Cortex?A57 處理芯片,包括4 GB LPDDR內(nèi)存以及128 核Maxwell GPU,能夠運(yùn)行多種算法和AI 框架,如TensorFlow、Keras、PyTorch、Caffe 等。該邊緣設(shè)備質(zhì)量為200 克左右,可以直接安裝在小型無人機(jī)上。
本文與YOLOv5m對比,分別對VisDrone2019數(shù)據(jù)集中的3190 張測試圖片做檢測,以每張圖片的平均檢測時(shí)間做對比,考慮到Y(jié)OLOv5x的mAP 與本文算法相差無幾,所以也對比了YOLOv5x 的時(shí)間。表3 是對比結(jié)果,圖5 是檢測結(jié)果。
表3 檢測時(shí)間對比
圖5 檢測結(jié)果對比
從表3 可以看出,在輸入圖像大小同為640 × 480 的情況下,CC?YOLOv5 與YOLOv5m都完全滿足實(shí)時(shí)性要求,但CC?YOLOv5 的準(zhǔn)確率更優(yōu),比后者高3.3 個(gè)百分點(diǎn)。YOLOv5x的平均檢測時(shí)間達(dá)0.725 s,產(chǎn)生了很嚴(yán)重的掉幀及卡頓問題,無法滿足實(shí)時(shí)性要求。
對圖5的實(shí)驗(yàn)結(jié)果進(jìn)行評價(jià),本文方法表現(xiàn)出更為優(yōu)異的檢測性能,能夠較為準(zhǔn)確地識(shí)別出圖像中的各類多尺度目標(biāo)。例如,YOLOv5m檢測不出來的遠(yuǎn)景小目標(biāo),CC?YOLOv5 也能識(shí)別出來。一些YOLOv5m 誤檢的目標(biāo),本文算法也能準(zhǔn)確地分類。但也注意到,對于個(gè)別的極小目標(biāo),偶爾還存在著誤檢的情況。這是由于輸入圖像的分辨率太低,極小目標(biāo)的視覺信息太少所導(dǎo)致,后續(xù)可考慮融合超分辨率的方法來解決該問題。
本文針對無人機(jī)航拍圖像的特點(diǎn)與挑戰(zhàn),提出一種新的目標(biāo)檢測算法CC?YOLOv5。通過C3TR 和CBAM,提升全局信息的提取,更好地融合了獲取的深層網(wǎng)絡(luò)的語義信息與淺層網(wǎng)絡(luò)的幾何信息,豐富了網(wǎng)絡(luò)獲取的特征信息,同時(shí)改進(jìn)的FPN 層更好地融合了這些獲取的特征信息,提升檢測性能,并且參數(shù)量和GFLOPs增加不多。實(shí)驗(yàn)結(jié)果表明,本文算法在滿足無人機(jī)邊緣計(jì)算平臺(tái)的實(shí)時(shí)性要求下,具有更為優(yōu)異的檢測準(zhǔn)確性。