祝星馗,蔣球偉
(華北計(jì)算技術(shù)研究所 系統(tǒng)七部,北京 100083)
無(wú)人機(jī)圖像上的目標(biāo)檢測(cè)工作被廣泛的應(yīng)用于實(shí)際項(xiàng)目當(dāng)中,例如野生動(dòng)物保護(hù)[1]、作物病害檢測(cè)[2-3]、安全監(jiān)控等[4]。本研究致力于提高目標(biāo)檢測(cè)算法在無(wú)人機(jī)圖像上的性能,為上述的多種實(shí)際應(yīng)用提供幫助。
近些年來(lái),深度神經(jīng)網(wǎng)絡(luò)在目標(biāo)檢測(cè)方向取得了重大的進(jìn)展,大型的數(shù)據(jù)集作為神經(jīng)網(wǎng)絡(luò)訓(xùn)練和測(cè)試的基準(zhǔn),是這些發(fā)展的基石。自然圖像的基準(zhǔn)數(shù)據(jù)集主要包括:MS COCO[5]、pascal VOC[6];遙感、無(wú)人機(jī)圖像的基準(zhǔn)數(shù)據(jù)集包括:VisDrone[7]、DOTA[8]。然而,最先進(jìn)的深度神經(jīng)網(wǎng)絡(luò)主要針對(duì)自然圖像的數(shù)據(jù)集而設(shè)計(jì)。由于無(wú)人機(jī)拍攝圖像的高度多變,拍攝視場(chǎng)大,拍攝場(chǎng)景復(fù)雜導(dǎo)致無(wú)人機(jī)圖像與自然場(chǎng)景圖像相比具有目標(biāo)尺寸多變、背景復(fù)雜、遮擋嚴(yán)重、分布不均勻和小目標(biāo)豐富等特點(diǎn)(如圖1所示),針對(duì)自然圖像的深度神經(jīng)網(wǎng)絡(luò)無(wú)法解決上述問(wèn)題,這使得無(wú)人機(jī)圖像檢測(cè)成為了一項(xiàng)具有挑戰(zhàn)性的工作。
圖1 具代表性的無(wú)人機(jī)拍攝圖像
目標(biāo)檢測(cè)算法通常分為兩大類(lèi),即單階段目標(biāo)檢測(cè)算法和雙階段目標(biāo)檢測(cè)算法。單階段算法直接預(yù)測(cè)出目標(biāo)的邊界框與目標(biāo)種類(lèi),是速度與精度的平衡,最具有代表性的單階段檢測(cè)算法是YOLO系列[9-12],集單階段檢測(cè)技術(shù)之大成。除此之外SSD[13]利用了多尺度的特征圖,RetinaNet[14]提出了Focal Loss都為單階段目標(biāo)檢測(cè)算法的發(fā)展做出了貢獻(xiàn)。雙階段的檢測(cè)算法首先通過(guò)區(qū)域提議算法提取出包含目標(biāo)的區(qū)域候選框,然后基于候選區(qū)域做進(jìn)一步的邊界框回歸以及目標(biāo)分類(lèi)。兩個(gè)階段的細(xì)分使得二階段算法以檢測(cè)速度的降低為代價(jià)獲得了較高的檢測(cè)精度。具有代表性的二階段檢測(cè)算法是Faster-RCNN[15]以及在其基礎(chǔ)上改進(jìn)的Cascade R-CNN[16]等。近些年隨著Transformer[17]結(jié)構(gòu)從自然語(yǔ)言處理(NLP)領(lǐng)域進(jìn)入到計(jì)算機(jī)視覺(jué)領(lǐng)域,Transformer給目標(biāo)檢測(cè)注入了新的活力。Transformer結(jié)構(gòu)打破了CNN有限的感受野限制,憑借注意力機(jī)制捕獲整個(gè)特征圖的長(zhǎng)距離依賴(lài)關(guān)系,具有更強(qiáng)的建模能力,不足之處是計(jì)算量巨大。因此LIU等[18]等提出各種方法降低其計(jì)算量,DETR[19]是最具代表性的Transformer結(jié)構(gòu)單階段目標(biāo)檢測(cè)算法。
筆者提出的算法在YOLOv5的基礎(chǔ)上,對(duì)YOLOv5的結(jié)構(gòu)進(jìn)行調(diào)整優(yōu)化,并將Transformer結(jié)構(gòu)與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合以解決上述無(wú)人機(jī)圖像檢測(cè)遇到的問(wèn)題。Transformer模塊被插入到骨干網(wǎng)絡(luò)與頸部檢測(cè)層當(dāng)中來(lái)獲取目標(biāo)上下文信息,用于解決目標(biāo)尺寸多變、分布不均和背景復(fù)雜的問(wèn)題,并使用降維和滑動(dòng)窗口處理以降低Transformer模塊的計(jì)算量與內(nèi)存消耗。頸部使用BiFPN[20]融合了多個(gè)特征層的信息,增強(qiáng)了對(duì)特征圖的重用與特征提取,并添加了額外的大檢測(cè)層用于獲得豐富的小目標(biāo)信息,使小目標(biāo)的檢測(cè)更加精準(zhǔn)。為了進(jìn)一步提高檢測(cè)算法的性能,一系列技巧在算法訓(xùn)練測(cè)試的過(guò)程中被使用:訓(xùn)練階段使用特殊的圖像增強(qiáng),測(cè)試過(guò)程采用測(cè)試增強(qiáng)(test time augmentation,TTA)來(lái)解決物體遮擋和尺寸變化的問(wèn)題,最后采用模型融合增加算法的魯棒性,獲得更加準(zhǔn)確的測(cè)試結(jié)果。
主要貢獻(xiàn)如下:①在保證模型檢測(cè)速度的情況下,將輕量Transformer結(jié)構(gòu)引入到無(wú)人機(jī)圖像檢測(cè)當(dāng)中用于解決目標(biāo)尺寸多變、分布不均、目標(biāo)遮擋與背景復(fù)雜問(wèn)題。②使用BiFPN結(jié)構(gòu)增強(qiáng)對(duì)特征圖的利用,并使用大尺度的特征圖解決小目標(biāo)檢測(cè)困難的問(wèn)題。③使用特殊的圖像增強(qiáng)、測(cè)試增強(qiáng)和模型融合技巧,解決目標(biāo)相互遮擋和尺寸變化的問(wèn)題,提高模型準(zhǔn)確率。④在VisDrone2021數(shù)據(jù)集的驗(yàn)證集上,提出的算法平均精確率達(dá)到了42.5%,比YOLOv5提高了約7%,展現(xiàn)了算法對(duì)無(wú)人機(jī)圖像強(qiáng)大的檢測(cè)性能。
數(shù)據(jù)增強(qiáng)是對(duì)數(shù)據(jù)集進(jìn)行擴(kuò)充,相當(dāng)于增大了神經(jīng)網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù)量,使模型能夠?qū)?fù)雜環(huán)境下獲得的圖像具有更好的識(shí)別效果。通常數(shù)據(jù)增強(qiáng)包括光度畸變(photometric distortions)和幾何畸變(geometric distortions),光度畸變中的圖像的色調(diào)、飽和度和光照強(qiáng)度的調(diào)整被用在文章算法的數(shù)據(jù)增強(qiáng)中。在幾何畸變方面,使用了隨機(jī)縮放、圖像裁剪、圖像平移和旋轉(zhuǎn)操作。光度畸變與幾何畸變都是傳統(tǒng)的全局像素增強(qiáng)方法,近些年還出現(xiàn)了將多個(gè)圖像的特征進(jìn)行合成的特殊圖像增強(qiáng)處理,這些方法包括MixUp[21](圖像混和)、CutMix[22](圖像裁剪混合)和Mosaic(馬賽克混合)。圖像混合方法是隨機(jī)抽取訓(xùn)練集中的兩個(gè)圖像,對(duì)兩張圖像的像素值按照任意的比例進(jìn)行加權(quán)求和,圖像中實(shí)例的標(biāo)簽也按照相同比例進(jìn)行對(duì)應(yīng)的加權(quán)求和。圖像裁剪混合與通常的圖像裁剪(Cutout)方式不同,圖像裁剪使用0值也就是黑色圖像塊來(lái)遮擋切下的圖像塊,CutMix則使用另一張圖像中樣本的某個(gè)區(qū)域來(lái)覆蓋裁剪下來(lái)的區(qū)域。馬賽克增強(qiáng)是圖像裁剪混合的改進(jìn)版本,馬賽克增強(qiáng)會(huì)選取4張圖片進(jìn)行拼接組成一張輸入圖像,這種操作擴(kuò)充了檢測(cè)圖像包含的特征,使得一張?jiān)鰪?qiáng)后的圖片包含4張圖像的部分特征。此外,使用拼接后的圖片在批量歸一化計(jì)算時(shí),每層相當(dāng)于使用4個(gè)不同圖像激活統(tǒng)計(jì)數(shù)據(jù)。數(shù)據(jù)增強(qiáng)方面,筆者使用了MixUp、Mosaic和光度畸變、幾何畸變的組合訓(xùn)練圖片,數(shù)據(jù)增強(qiáng)效果如圖2所示。
圖2 混淆(MixUp)、馬賽克(Mosaic)算法和光度畸變、幾何畸變相結(jié)合的數(shù)據(jù)增強(qiáng)效果
目標(biāo)檢測(cè)神經(jīng)網(wǎng)絡(luò)可以按照結(jié)構(gòu)劃分為3個(gè)不同的部分:骨干網(wǎng)絡(luò)、頸部和頭部。骨干網(wǎng)絡(luò)通常使用圖像分類(lèi)任務(wù)中的神經(jīng)網(wǎng)絡(luò)來(lái)提取出圖像特征圖,因?yàn)檫@些神經(jīng)網(wǎng)絡(luò)在圖像分類(lèi)任務(wù)上獲得了很高的精度,證明它們具有強(qiáng)大的特征提取能力。頸部的作用是對(duì)骨干網(wǎng)絡(luò)提取的圖像特征進(jìn)行進(jìn)一步的利用,已被證明能夠大大提升目標(biāo)檢測(cè)網(wǎng)絡(luò)的檢測(cè)精度,是目標(biāo)檢測(cè)框架中的關(guān)鍵環(huán)節(jié)。通常,頸部會(huì)對(duì)骨干網(wǎng)絡(luò)提取的特征經(jīng)過(guò)幾個(gè)自下而上和幾個(gè)自上而下的路徑進(jìn)行進(jìn)一步的計(jì)算處理,通過(guò)反復(fù)將主干網(wǎng)絡(luò)獲得的特征圖形擴(kuò)大與縮放,對(duì)其進(jìn)行重新計(jì)算與聚合以獲得更豐富的特征信息。頭部的作用是在頸部提取的特征圖上進(jìn)行目標(biāo)的定位與分類(lèi),輸出預(yù)測(cè)的結(jié)果。
目標(biāo)檢測(cè)模型總體來(lái)說(shuō)由以下4部分組成。①輸入:圖像、圖像塊。②骨干網(wǎng)絡(luò):VGG、ResNet[23]、EfficientNet、CSPDarkNet、vision Transformer、Swin Transformer、MAE。③頸部-路徑聚合模塊:Feature Pyramid Networks (FPN)、Path Aggregation Network (PANet)、BiFPN、NAS-FPN,各種特征金字塔網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示;頸部-額外的模塊:Spatial Pyramid Pooling (SPP)、Atrous Spatial Pyramid Pooling (ASPP)、Convolutional Block Attention Module (CBAM)。④頭部-單階段檢測(cè)算法:YOLO、SSD、RetinaNet、CenterNet、FCOS、DETR;頭部-雙階段檢測(cè)算法:Fast-RCNN、Faster-RCNN[15]、Mask RCNN、Cascade RCNN。
圖3 各種特征金字塔網(wǎng)絡(luò)結(jié)構(gòu)
數(shù)據(jù)增強(qiáng)是對(duì)訓(xùn)練集進(jìn)行處理,與其類(lèi)似,測(cè)試增強(qiáng)是對(duì)測(cè)試集進(jìn)行處理。在測(cè)試增強(qiáng)的過(guò)程中測(cè)試集圖片會(huì)經(jīng)過(guò)一系列的空間畸變與色彩畸變操作,然后使用檢測(cè)算法對(duì)測(cè)試增強(qiáng)獲得的測(cè)試圖片與原圖進(jìn)行多次檢測(cè),最后將多個(gè)結(jié)果進(jìn)行合成得到最終的結(jié)果。
模型融合能夠提高神經(jīng)網(wǎng)絡(luò)算法的精度。神經(jīng)網(wǎng)絡(luò)算法具有很強(qiáng)的拓展性,同一個(gè)網(wǎng)絡(luò)可以使用不同的數(shù)據(jù)進(jìn)行訓(xùn)練產(chǎn)生不同的結(jié)果,還可以根據(jù)訓(xùn)練集的大小對(duì)網(wǎng)絡(luò)的深度與寬度進(jìn)行成比例的擴(kuò)展,增加網(wǎng)絡(luò)的信息容量。這種靈活性也會(huì)帶來(lái)一些弊害,那就是訓(xùn)練過(guò)程的隨機(jī)性:神經(jīng)網(wǎng)絡(luò)算法可以認(rèn)為是一種復(fù)雜的非線性函數(shù),神經(jīng)網(wǎng)絡(luò)通過(guò)梯度下降優(yōu)化算法進(jìn)行隨機(jī)的學(xué)習(xí)過(guò)程,每次的學(xué)習(xí)過(guò)程中數(shù)據(jù)輸入的順序與組合都不會(huì)相同,這就造成了每次訓(xùn)練的神經(jīng)網(wǎng)絡(luò)權(quán)重都不盡相同,從而導(dǎo)致每個(gè)神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)結(jié)果各有千秋,預(yù)測(cè)結(jié)果的分布方差較高。降低神經(jīng)網(wǎng)絡(luò)模型方差的方法是訓(xùn)練多個(gè)模型,并將這些模型權(quán)重或者模型的預(yù)測(cè)結(jié)果通過(guò)一些算法融合起來(lái),而不是僅僅使用單個(gè)模型的預(yù)測(cè)結(jié)果。
對(duì)模型檢測(cè)結(jié)果的融合方法有非極大值抑制(non-maximum suppression,NMS)、NMS算法的一些變體以及加權(quán)框融合[24](weighted boxes fusion,WBF)等。在NMS方法中,如果多個(gè)預(yù)測(cè)框之間的交并比(intersection over union,IoU)高于某個(gè)閾值,則算法認(rèn)為這些預(yù)測(cè)框?qū)儆谕荒繕?biāo)。對(duì)于每個(gè)目標(biāo),NMS只保留一個(gè)置信度最高的預(yù)測(cè)框,其他置信度較低的預(yù)測(cè)框?qū)⒈恢苯觿h除。預(yù)測(cè)框的濾除過(guò)程取決于IoU閾值的選取,該值的大小會(huì)對(duì)模型結(jié)果產(chǎn)生很大影響,而且置信度高的預(yù)測(cè)框只是代表分類(lèi)效果較好,位置不一定準(zhǔn)確,簡(jiǎn)單的濾除低置信度的預(yù)測(cè)框會(huì)影響模型的定位效果。不同于NMS刪除所有置信度較低的預(yù)測(cè)框,WBF會(huì)根據(jù)置信度來(lái)合并所有的預(yù)測(cè)框以形成最終結(jié)果,不浪費(fèi)每個(gè)預(yù)測(cè)框的信息,因此預(yù)測(cè)框的位置更加的準(zhǔn)確,兩種算法的結(jié)果對(duì)比如圖4所示。
圖4 NMS融合算法與WBF融合算法的結(jié)果對(duì)比
網(wǎng)絡(luò)的整體結(jié)構(gòu)如圖5所示,每個(gè)模塊的編號(hào)用數(shù)字標(biāo)注在模塊左側(cè)。骨干網(wǎng)絡(luò)主體部分采用CSPDarkNet53的結(jié)構(gòu),其中0、1、3、5、7模塊采用步距為2的卷積模塊對(duì)圖像進(jìn)行下采樣,分別將輸入圖像的大小縮小為2、4、6、8、32倍。2、4、6、8模塊采用大小為3步距為1的卷積核對(duì)特征圖進(jìn)行特征計(jì)算,特征圖的大小不發(fā)生變化。模塊9采用Transformer模塊,對(duì)特征圖進(jìn)行全局信息的處理。這樣骨干網(wǎng)絡(luò)首先使用CNN獲取具有平移不變性的特征圖,再使用Transformer獲取特征圖之間的全局關(guān)聯(lián),結(jié)合了兩者之間的優(yōu)點(diǎn)。
圖5 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
網(wǎng)絡(luò)的頸部由兩個(gè)特征金字塔結(jié)構(gòu)組成,分別是模塊10~21和模塊22~30。由于無(wú)人機(jī)圖像中小目標(biāo)豐富,下采樣倍率過(guò)大會(huì)導(dǎo)致小目標(biāo)特征的消失,加大了小目標(biāo)定位和分類(lèi)工作的困難,最適合的特征圖下采樣倍率是目標(biāo)大小的1/8,因此模塊11、15、19對(duì)特征圖進(jìn)行雙線性插值的上采樣操作,用于獲得更大的特征圖。P2特征圖是原圖下采樣4倍因此適合原圖中邊長(zhǎng)約32像素的小目標(biāo)檢測(cè)。模塊22~30對(duì)特征圖進(jìn)行重計(jì)算和下采樣,在輸出特征圖之前采用Transformer結(jié)構(gòu)來(lái)獲取上下文信息,增強(qiáng)對(duì)難以分辨物體的檢測(cè)效果。
網(wǎng)絡(luò)的頭部采用YOLO原版的頭部對(duì)目標(biāo)進(jìn)行分類(lèi)和位置回歸,頭部的通道數(shù)為b×(4+1+c),b表示在特征圖上每個(gè)特征格的預(yù)測(cè)框的數(shù)量,一般取3;數(shù)字4表示預(yù)測(cè)框的四個(gè)位置屬性(x,y,h,w);數(shù)字1表示框內(nèi)是否有物體;c代表預(yù)測(cè)種類(lèi)的總數(shù)。
網(wǎng)絡(luò)采用的損失由3部分構(gòu)成:①預(yù)測(cè)框中是否存在物體的置信度損失,②預(yù)測(cè)框中目標(biāo)類(lèi)別的分類(lèi)損失,③預(yù)測(cè)框與真實(shí)框之間的誤差造成的邊界框定位損失。總體損失函數(shù)的表達(dá)式為:
L=λ1Lconf+λ2Lcls+λ3Lloc
(1)
式中:L為總體損失;λ為權(quán)重;Lconf為置信度損失;Lcls為分類(lèi)損失;Lloc為定位損失。
置信度損失描述的是輸出檢測(cè)框內(nèi)物體存在的概率與真實(shí)物體存在概率之間的差異,使用二值交叉熵(BCE)作為損失函數(shù):
Lconf(o,c)=-∑(oi)ln(sigmoid(ci))+
(1-oi)ln(1-sigmoid(ci))
(2)
式中:oi為預(yù)測(cè)目標(biāo)邊界框i中實(shí)際物體是不是存在;ci為預(yù)測(cè)值。
目標(biāo)類(lèi)別損失代表預(yù)測(cè)類(lèi)別與真實(shí)標(biāo)簽之間的差別,使用的二值交叉熵作為損失函數(shù):
(1-Oij)ln(1-sigmoid(Cij))
(3)
式中:Oij為預(yù)測(cè)目標(biāo)邊界框i中實(shí)際物體是不是當(dāng)前類(lèi)別;Cij為預(yù)測(cè)值。
目標(biāo)定位損失代表了預(yù)測(cè)框與真實(shí)框之間的差異,YOLOv5采用CIoU[25]損失作為目標(biāo)定位損失,表達(dá)式為:
(4)
式中:IoU為預(yù)測(cè)框與真實(shí)框的交并比;ρ2(b,bgt)為預(yù)測(cè)框與真實(shí)框的中點(diǎn)之間的歐氏距離;c為能同時(shí)包含預(yù)測(cè)框與真實(shí)框的最小閉包對(duì)角線距離;α為權(quán)重系數(shù);v用來(lái)衡量長(zhǎng)寬比的相似性,定義為:
(5)
式中:w、h為預(yù)測(cè)框的寬和高;wgt、hgt為真實(shí)框的寬和高。
與自然圖像比起來(lái),無(wú)人機(jī)圖像中包含更多的小目標(biāo),VisDrone數(shù)據(jù)集與MS COCO數(shù)據(jù)集之中不同大小目標(biāo)所占比例的對(duì)比如圖6所示。
圖6 不同面積范圍內(nèi)包含目標(biāo)數(shù)量對(duì)比(像素)
在自然圖像上進(jìn)行目標(biāo)檢測(cè)網(wǎng)絡(luò)是為了檢測(cè)大物體,提高網(wǎng)絡(luò)的速度會(huì)在對(duì)圖像降采樣16倍以上的特征圖上進(jìn)行圖像預(yù)測(cè)。但是無(wú)人機(jī)圖像中很多小的物體經(jīng)過(guò)降采樣后在特征圖上的像素值減小為1,甚至消失,導(dǎo)致檢測(cè)與回歸無(wú)法滿(mǎn)足要求,這樣就造成了小物體的檢測(cè)困難。由表1可知即使在MS COCO數(shù)據(jù)集上,APS(小物體的平均精度)遠(yuǎn)遠(yuǎn)小于APL(大物體的平均精度)。
表1 MS COCO數(shù)據(jù)集上目標(biāo)檢測(cè)網(wǎng)絡(luò)精度對(duì)比 %
為了解決小物體檢測(cè)的問(wèn)題,大多數(shù)目標(biāo)檢測(cè)算法采用的都是在目標(biāo)檢測(cè)網(wǎng)絡(luò)的頸部使用特征金字塔結(jié)構(gòu)FPN,與FPN的各種變體,這種結(jié)構(gòu)能夠?qū)⑸窠?jīng)網(wǎng)絡(luò)中高層特征與低層特征糅合達(dá)到取長(zhǎng)補(bǔ)短的效果。低層特征圖的分辨率高,能夠?qū)ξ矬w的位置進(jìn)行準(zhǔn)確回歸,但是包含的語(yǔ)義信息較少,分類(lèi)效果很差。與之相反,高層特征圖中包含了充足的語(yǔ)義信息,但是由于特征圖的低分辨率,對(duì)位置信息的回歸造成了很大的困難。所以將神經(jīng)網(wǎng)絡(luò)中底層的特征和高維度特征結(jié)合在一塊就能提高神經(jīng)網(wǎng)絡(luò)對(duì)于物體邊界框的回歸性能和物體類(lèi)別的分類(lèi)性能。文章采用復(fù)雜的BiFPN網(wǎng)絡(luò)結(jié)構(gòu)(如圖7所示),使用下采樣4、8、16、32倍的4個(gè)特征圖用于不同大小的目標(biāo)檢測(cè),圖7右側(cè)的檢測(cè)層便是用于最終檢測(cè)的P2、P3、P4、P5層。P2是低層特征圖分辨率很高,只對(duì)原圖的物體下采樣了4倍,因此對(duì)微小物體更敏感,能對(duì)原圖中10~100像素左右的小物體進(jìn)行定位檢測(cè)。P5是高層特征圖分辨率低,但是語(yǔ)義豐富,能對(duì)原圖中768左右的大物體進(jìn)行檢測(cè)。文章使用的四層BiFPN結(jié)構(gòu)能對(duì)小物體和大物體都有較好的檢測(cè)效果,可以減輕物體尺寸急劇變化造成的弊端。越多的檢測(cè)層會(huì)消耗越多的內(nèi)存與計(jì)算成本,為了平衡精度與速度只對(duì)4個(gè)不同分辨率的特征圖進(jìn)行特征融合與檢測(cè)。同時(shí)BiFPN還采用了不同的殘差連接將早期提取的特征直接與輸出特征圖相連接,使得小目標(biāo)的特征不會(huì)在計(jì)算中逐漸消失,提升了小目標(biāo)的檢測(cè)性能。
圖7 加權(quán)雙向特征金字塔網(wǎng)絡(luò)(BiFPN)結(jié)構(gòu)
受到DETR和Swin transformer工作的啟發(fā),使用Transformer 模塊代替了骨干網(wǎng)絡(luò)和頸部的一些卷積模塊,使得神經(jīng)網(wǎng)絡(luò)突破了卷積神經(jīng)網(wǎng)絡(luò)的局限獲得了全局的感受野。算法僅在骨干網(wǎng)絡(luò)的最后和BiFPN的末端添加Transformer結(jié)構(gòu),骨干網(wǎng)絡(luò)的末端特征圖經(jīng)過(guò)了32倍下采樣所需的計(jì)算資源較少,若將整個(gè)網(wǎng)絡(luò)替換為T(mén)ransformer結(jié)構(gòu)將增加巨大的計(jì)算成本,無(wú)法支撐大分辨率的訓(xùn)練圖像,也失去了卷積的平移不變性和強(qiáng)大的局部特征提取能力。Transformer模塊的結(jié)構(gòu)如圖8所示。
圖8 Transformer模塊組成結(jié)構(gòu)
每個(gè)Transformer模塊由多個(gè)子層搭建而成,主要功能由兩層實(shí)現(xiàn):多頭注意力(Multi-Head Attention)和多層感知機(jī)(MLP),每層之間使用ResNet中的殘差結(jié)構(gòu)進(jìn)行連接,注意力的計(jì)算過(guò)程如圖9所示。
圖9 注意力機(jī)制的計(jì)算過(guò)程
首先通過(guò)輸入序列X生成對(duì)應(yīng)的查詢(xún)(query,Q)、鍵(key,K)和值(value,V):
Q=X×WQ
K=X×WK
V=X×WV
(6)
式中:X為輸入的樣本序列特征,X與不同的權(quán)重矩陣WQ、Wk、WV相乘生成對(duì)應(yīng)的Q、K、V。然后通過(guò)Q、K、V之間的計(jì)算得到注意力特征圖,即加權(quán)處理后的V矩陣:給出一個(gè)Q,計(jì)算Q與所有K的相關(guān)性,然后根據(jù)Q與每一個(gè)K的相關(guān)性去找到最合適的V。具體的計(jì)算過(guò)程是將Q與K相乘,因?yàn)镼和K都是張量,因此Q與K越相似,那么得到的乘積也就會(huì)越大,將所得的乘積除以根號(hào)下K矩陣維度dk后進(jìn)行SoftMax處理得到權(quán)重矩陣WA,計(jì)算公式為:
(7)
將WA與V矩陣相乘,那么就對(duì)V進(jìn)行了一個(gè)加權(quán)處理,這樣就得到了加權(quán)后的特征圖矩陣:
(8)
與原始的卷積模塊相比,Transformer模塊中的多頭注意力機(jī)制能夠能計(jì)算整張?zhí)卣鲌D的所有特征之間的相關(guān)性來(lái)獲得全局視野和充足的上下文信息,卷積模塊的感受野是有限的,這就讓它比卷積模塊對(duì)大物體和難以辨認(rèn)的物體有更好的特征提取能力。
但是Transformer模塊的不足之處是它對(duì)計(jì)算量的需求是巨大的,由于需要捕獲全局信息,Transformer模塊會(huì)計(jì)算特征圖內(nèi)所有像素之間的相關(guān)聯(lián)系,而卷積模塊只用計(jì)算相鄰像素(通常是3×3)之間的聯(lián)系,這就使得Transformer模塊需要的計(jì)算量與顯存遠(yuǎn)遠(yuǎn)多于卷積模塊。無(wú)人機(jī)圖像通常比較大,MS COCO數(shù)據(jù)集上通常使用608大小的圖片進(jìn)行訓(xùn)練,而VisDrone中圖像的平均尺寸是1 920×1 080,直接使用Transformer模塊會(huì)使得神經(jīng)網(wǎng)絡(luò)占用內(nèi)存過(guò)多而無(wú)法進(jìn)行訓(xùn)練。因此采用Swin Transformer中的滑動(dòng)窗口機(jī)制和空間降維注意力(spatial-reduction attention)方法來(lái)減小計(jì)算量,不同多頭注意力機(jī)制的計(jì)算方法對(duì)比如圖10所示。
圖10 不同多頭注意力機(jī)制的計(jì)算方法對(duì)比
Swin transformer模塊中將輸入的特征圖拆成更小的窗口計(jì)算局部注意力來(lái)減少計(jì)算量,但是分割為窗口后,窗口內(nèi)的特征能夠進(jìn)行信息交互,不同的窗口之間特征無(wú)法交流。進(jìn)一步的解決辦法是將不同Transformer層的窗口進(jìn)行滑動(dòng),這樣不同層就能計(jì)算不同的窗口包含的特征之間的關(guān)系,這樣既降低了計(jì)算量也獲得了全局的特征依賴(lài)關(guān)系??臻g降維注意力減少計(jì)算量的方法是在K、V矩陣相乘之前對(duì)他們進(jìn)行了空間降維操作,在保留重要信息的同時(shí)降低K、V矩陣的高和寬以減小計(jì)算量。結(jié)合這兩種方法大大降低了Transformer結(jié)構(gòu)的計(jì)算量使得融合的神經(jīng)網(wǎng)絡(luò)在計(jì)算量并不增加很多,保證算法實(shí)時(shí)性的情況下獲得了Transformer結(jié)構(gòu)的優(yōu)點(diǎn)和更高的檢測(cè)精度。
整個(gè)算法的訓(xùn)練檢測(cè)流程如圖11所示,首先訓(xùn)練圖像經(jīng)過(guò)一系列的數(shù)據(jù)增強(qiáng)后輸入到神經(jīng)網(wǎng)絡(luò)中對(duì)目標(biāo)檢測(cè)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,訓(xùn)練完成后的網(wǎng)絡(luò)接收測(cè)試增強(qiáng)后的測(cè)試圖像,并輸出檢測(cè)網(wǎng)絡(luò)的預(yù)測(cè)結(jié)果。測(cè)試增強(qiáng)包括圖像的縮放和水平翻轉(zhuǎn)操作,首先將圖像縮放為1.3倍、1倍和0.87倍,然后將其水平翻轉(zhuǎn),這樣就得到了6張不同的測(cè)試圖像,將6張不同測(cè)試圖像的檢測(cè)結(jié)果通過(guò)NMS和WBF算法進(jìn)行模型融合后便得到最終的預(yù)測(cè)結(jié)果。同時(shí)網(wǎng)絡(luò)的訓(xùn)練過(guò)程會(huì)進(jìn)行多次以得到多個(gè)權(quán)重不同的目標(biāo)檢測(cè)模型,最后將多個(gè)模型的預(yù)測(cè)結(jié)果經(jīng)過(guò)模型融合以獲得更加精確的預(yù)測(cè)結(jié)果。
圖11 目標(biāo)檢測(cè)算法工作流程
CNN與Transformer融合的目標(biāo)檢測(cè)算法在VisDrone2021數(shù)據(jù)集的訓(xùn)練集進(jìn)行訓(xùn)練,競(jìng)賽測(cè)試集與驗(yàn)證集進(jìn)行測(cè)試,VisDrone2021數(shù)據(jù)集與VisDrone2017數(shù)據(jù)集一樣,這幾年未經(jīng)過(guò)改變。算法采取目標(biāo)檢測(cè)中廣泛使用的平均精確度mAP和AP50作為評(píng)價(jià)指標(biāo)。
目標(biāo)檢測(cè)算法在Pytorch v1.10上實(shí)現(xiàn),所有的模型均使用一塊NVIDIA GTX 3090顯卡進(jìn)行訓(xùn)練與測(cè)試。訓(xùn)練時(shí)使用了YOLOv5在COCO數(shù)據(jù)集上的預(yù)訓(xùn)練權(quán)重進(jìn)行遷移學(xué)習(xí),算法在VisDrone 2021訓(xùn)練集上采用多個(gè)尺度的圖像訓(xùn)練65輪,圖像大小從768到1 536之間變化,后在1 920×1 080的大圖像上進(jìn)行微調(diào)。算法使用AdamW優(yōu)化器進(jìn)行訓(xùn)練,并使用3×10-4作為初始學(xué)習(xí)率,前兩輪的學(xué)習(xí)率從零開(kāi)始緩慢增長(zhǎng)用于模型的預(yù)熱,學(xué)習(xí)率采用余弦函數(shù)逐步衰減,最后一輪衰減到初始學(xué)習(xí)率的0.12。
筆者提出的算法曾參與VisDrone2021無(wú)人機(jī)圖像檢測(cè)比賽,比賽過(guò)后進(jìn)行了進(jìn)一步的優(yōu)化與改良。競(jìng)賽的測(cè)試服務(wù)器在2021年8月關(guān)閉因此無(wú)法繼續(xù)在競(jìng)賽服務(wù)器中的競(jìng)賽測(cè)試集中測(cè)試,后續(xù)改進(jìn)只能在本地驗(yàn)證集上進(jìn)行實(shí)驗(yàn)。未完全改進(jìn)算法所獲得的分?jǐn)?shù)與競(jìng)賽委員會(huì)提交的算法分?jǐn)?shù)和歷年最高分的結(jié)果對(duì)比如表2所示,可知筆者提出的算法取得了優(yōu)秀的成績(jī),刷新了歷史記錄。
表2 各個(gè)算法在VisDrone競(jìng)賽數(shù)據(jù)集上的結(jié)果對(duì)比
在本地的VisDrone2021驗(yàn)證集中分析了目標(biāo)檢測(cè)算法每個(gè)改動(dòng)的重要性,對(duì)性能的提升,每個(gè)改動(dòng)的影響如表3所示。
表3 算法每個(gè)改動(dòng)在VisDrone2021驗(yàn)證集上的對(duì)比試驗(yàn)
算法在具有代表性的無(wú)人機(jī)圖像上的檢測(cè)結(jié)果如圖12所示,可知該算法對(duì)背景復(fù)雜的目標(biāo)、多尺寸目標(biāo)、小目標(biāo)、遮擋嚴(yán)重的目標(biāo)具有很好的檢測(cè)效果。每個(gè)改動(dòng)對(duì)于模型準(zhǔn)確率都產(chǎn)生了不錯(cuò)的效果,與此同時(shí)也帶來(lái)了更多的時(shí)間損耗。測(cè)試增強(qiáng)使用了6張測(cè)試圖片,因此會(huì)額外消耗6倍模型的檢測(cè)時(shí)間與模型融合的時(shí)間。使用BiFPN并增加大尺度的特征圖用于檢測(cè)小的物體,這讓YOLOv5x的層數(shù)從567層變?yōu)?43層,由圖12的左下方可知,算法在檢測(cè)小物體時(shí)表現(xiàn)良好,因此增加的層數(shù)是值得的。在使用Transformer模塊后,模型的總層數(shù)從643層增加到了786層,從圖12第一排可以看出算法對(duì)于密集物體、遮擋物體都有很好的檢測(cè)效果,計(jì)算量的增加也是值得的。
圖12 目標(biāo)檢測(cè)算法檢測(cè)結(jié)果樣例
筆者在YOLOv5中添加了前沿技術(shù)并使用了一些經(jīng)驗(yàn)和技巧,把計(jì)算機(jī)視覺(jué)新興的Transformer模塊引入到了無(wú)人機(jī)圖像檢測(cè)領(lǐng)域,將CNN與Transformer相結(jié)合,構(gòu)建出無(wú)人機(jī)圖像檢測(cè)任務(wù)中最先進(jìn)的檢測(cè)算法之一,該神經(jīng)網(wǎng)絡(luò)算法尤其擅長(zhǎng)無(wú)人機(jī)圖像中的目標(biāo)檢測(cè)任務(wù),刷新了目標(biāo)檢測(cè)算法在VisDrone數(shù)據(jù)集上的記錄。通過(guò)在VisDrone2021驗(yàn)證集上的實(shí)驗(yàn)驗(yàn)證了算法各個(gè)模塊的有效性,以期幫助開(kāi)發(fā)者和研究人員在分析和處理無(wú)人機(jī)圖像方面獲得更好的經(jīng)驗(yàn)。
武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版)2022年2期