胡 瀟,潘申富
(中國電子科技集團(tuán)公司 第54研究所,石家莊 050081)
近年來,多旋翼無人機(jī)因其行動靈活、操作門檻低、設(shè)備配置可塑性高,主動控制能力強(qiáng)[1]等優(yōu)點(diǎn)在多個領(lǐng)域中得到了廣泛的應(yīng)用。在邊境、城市巡邏中[2],無人機(jī)可以提供不同視角的現(xiàn)場圖像,便于工作人員掌握現(xiàn)場情況。隨著人工智能的發(fā)展,無人機(jī)更加智能自主[3],將目標(biāo)檢測技術(shù)應(yīng)用于無人機(jī),巡邏人員可以更快速地感知并捕獲現(xiàn)場關(guān)鍵信息,提高巡邏的效率。傳統(tǒng)方案將檢測算法部署在遠(yuǎn)程服務(wù)器中需要高清穩(wěn)定的圖像傳輸,對無線傳輸信道的要求高。在無線傳輸信道受限情況下,將檢測算法部署在機(jī)載側(cè)可以實(shí)現(xiàn)對連續(xù)采集圖像進(jìn)行目標(biāo)檢測,并根據(jù)信道情況向地面工作人員傳輸圖像或文字等類型檢測結(jié)果,減輕檢測任務(wù)對通信條件的依賴,提高巡邏效率。由于小型機(jī)載終端計(jì)算資源有限,需要對現(xiàn)有檢測算法進(jìn)行針對性的優(yōu)化訓(xùn)練,設(shè)計(jì)輕量化的無人機(jī)航拍目標(biāo)檢測算法。
目前基于深度學(xué)習(xí)的目標(biāo)檢測算法多基于卷積神經(jīng)網(wǎng)絡(luò),在主流數(shù)據(jù)集上有很好表現(xiàn)。Sevo和Avramovic[4]證明卷積神經(jīng)網(wǎng)絡(luò)可以有效地結(jié)合到航空圖像的目標(biāo)檢測算法中。一般來說,基于CNN的目標(biāo)檢測算法分為單階段和雙階段算法。R-CNN[5]和Fast R-CNN[6]是基于區(qū)域特征的雙階段算法,雙階段算法在選擇候選區(qū)域時耗時長、候選幀之間存在大量重疊、提取的特征冗余。單階段目標(biāo)檢測算法包括SSD[7]、YOLO[8]和RetinaNet[9]等,單階段算法速度快,更能得到航拍任務(wù)的青睞。Zhu[10]等人在YOLOv5算法基礎(chǔ)上增加了一個用于小微物體檢測的預(yù)測頭,提出TPH-YOLOXv5算法,提高了檢測精度。許多學(xué)者通過增加多種模塊提升網(wǎng)絡(luò)的檢測性能,但復(fù)雜的模型算法需要很大的內(nèi)存和計(jì)算開銷,無法應(yīng)用于機(jī)載終端。
隨著嵌入式目標(biāo)檢測成為研究熱點(diǎn),部分學(xué)者通過模型剪枝量化、替換輕量化模塊等方法進(jìn)行輕量化網(wǎng)絡(luò)的設(shè)計(jì),解決模型復(fù)雜度高無法運(yùn)行在邊緣端的問題。崔令飛[11]等人將SSD算法中的特征提取網(wǎng)絡(luò)替換為輕量化的MobileNet網(wǎng)絡(luò)進(jìn)行模型優(yōu)化,構(gòu)建了輕量化目標(biāo)檢測算法。黃海生[12]等人簡化了YOLOv5網(wǎng)絡(luò),提出了一種輕量化檢測網(wǎng)絡(luò)YOLOv5-tiny,提升了檢測速度。但小型機(jī)載終端計(jì)算資源更加有限,需要針對巡邏應(yīng)用進(jìn)一步設(shè)計(jì)輕量化算法。
針對巡邏應(yīng)用,論文首先選用單階段檢測算法中速度更快的YOLOX算法,在該算法基礎(chǔ)上使用輕量化Mobilenetv2[13]網(wǎng)絡(luò)替換原有CSPDarknet骨干網(wǎng)絡(luò),降低參數(shù)量;其次訓(xùn)練過程中為了更好的平衡正負(fù)、難易樣本,使用Focal Loss損失函數(shù)替代二元交叉熵置信度損失函數(shù);然后將定位損失改為CIOU損失函數(shù),改善網(wǎng)絡(luò)輕量化后檢測精度的下降問題,得到改進(jìn)后的輕量化目標(biāo)檢測算法。最后將算法移植到Jetson Xavier NX機(jī)載終端,實(shí)現(xiàn)目標(biāo)檢測應(yīng)用。
YOLOX[14]是2020年曠視基于YOLOv3提出的高性能單階段檢測器,目前已經(jīng)成為工業(yè)界實(shí)用算法之一。依照模型縮放的規(guī)則YOLOX有YOLOX-s、YOLOX-m、YOLOX-l和YOLOX-x四種不同參數(shù)量的模型。其中YOLOX-s模型參數(shù)量較少,且不像YOLOX-Nano等模型因過小的尺寸損失了檢測精度,達(dá)到了檢測速度和檢測精度的平衡,因此采用YOLOX-s作為改進(jìn)對象。其網(wǎng)絡(luò)主要包括輸入端、特征提取網(wǎng)絡(luò)Backbone、Neck特征融合層和Head預(yù)測頭,網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。

圖1 YOLOX網(wǎng)絡(luò)結(jié)構(gòu)
1)圖像輸入端。訓(xùn)練前對輸入的訓(xùn)練數(shù)據(jù)集進(jìn)行數(shù)據(jù)增強(qiáng),豐富檢測數(shù)據(jù)集。實(shí)際檢測時輸入端向網(wǎng)絡(luò)輸入一張采集的航拍圖像。
2)骨干網(wǎng)絡(luò)Backbone。YOLOX-s沿用YOLOv5采用的CSPDarknet網(wǎng)絡(luò)進(jìn)行特征提取,首先使用Fcous結(jié)構(gòu)對輸入圖像切片堆疊,展開特征信息。然后通過conv(卷積)+BN(歸一化)+SiLu激活函數(shù)的CBL模塊和融合殘差結(jié)構(gòu)的CSP模塊進(jìn)行特征提取,在最后一層經(jīng)過SPP (Spatial Pyramid Pooling)結(jié)構(gòu)改善感受野捕捉特征,最終輸出三個不同尺寸的有效特征圖。
3)特征融合網(wǎng)絡(luò)Neck。對骨干網(wǎng)絡(luò)輸出不同尺度的三個特征圖實(shí)現(xiàn)特征融合。采用FPN(feature pyramid networks)與PAN(pyramid attention network)級聯(lián)結(jié)構(gòu),F(xiàn)PN對特征圖進(jìn)行上采樣向淺層傳遞深層特征信息,PAN下采樣實(shí)現(xiàn)深層信息和淺層信息的特征融合。
4)預(yù)測層。針對Neck層獲得的三個加強(qiáng)特征圖預(yù)測目標(biāo)位置、類別和置信度。傳統(tǒng)的耦合檢測頭使用相同的特征圖通過1×1的卷積對被檢測對象進(jìn)行分類定位,無法獲得良好的檢測效果[15]。YOLOX的預(yù)測層Head采用解耦結(jié)構(gòu),先使用一個1×1的卷積對特征融合層的輸出進(jìn)行降維,然后在分類和回歸兩個分支中各使用兩個3×3的卷積實(shí)現(xiàn)位置類別和置信度的分別預(yù)測,結(jié)果更有說服力。
同時,YOLOX采用了無錨框的方法并引入SimOTA方法動態(tài)分配正負(fù)樣本,減少了聚類超參數(shù)對于預(yù)測結(jié)果的影響,在減少計(jì)算量基礎(chǔ)上提高模型準(zhǔn)確率,與部署在巡邏無人機(jī)機(jī)載端中需要考慮網(wǎng)絡(luò)推理速度快的要求相符合,因此以YOLOX-s為基礎(chǔ)算法進(jìn)行輕量化改進(jìn)。
然而,YOLOX算法雖能在實(shí)驗(yàn)室的高性能GPU中可以得到優(yōu)秀的檢測效果,但在計(jì)算資源有限的無人機(jī)機(jī)載側(cè)的邊緣終端部署的目標(biāo)檢測算法,需要進(jìn)一步輕量化,降低參數(shù)規(guī)模。
針對巡邏航拍場景,為降低模型參數(shù)保持檢測精度,在YOLOX算法基礎(chǔ)上,分別對骨干網(wǎng)絡(luò)和損失函數(shù)進(jìn)行了改進(jìn),對訓(xùn)練過程進(jìn)行微調(diào),設(shè)計(jì)了輕量化改進(jìn)算法,網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。

圖2 改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)
在改進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu)中,為獲取更多特征,將網(wǎng)絡(luò)輸入的圖像大小均縮放為960×960大小。改進(jìn)后將YOLOX的特征提取網(wǎng)絡(luò)替換為Mobilenetv2輕量化網(wǎng)絡(luò),由于Mobilenetv2中最后的池化層和卷積層與YOLOX的特征融合層PAFPN功能冗余,為更符合輕量化設(shè)計(jì)目標(biāo)將其去除。利用新的骨干網(wǎng)絡(luò)對航拍圖像特征進(jìn)行提取,輸出120×120×32,60×60×96,30×30×320三種特征圖送入PAFPN模塊,經(jīng)過Neck層特征傳遞融合輸出三個通道數(shù)均為96的特征圖,分別送入各自不共享權(quán)重的三個預(yù)測頭Head中。另外,為提升輕量化后的檢測精度,在模型訓(xùn)練過程中將置信度損失替換為Focal Loss,定位損失設(shè)計(jì)為CIOU Loss,得到預(yù)測框的目標(biāo)類別、目標(biāo)邊框位置和置信度信息。最后將三種大小特征圖的預(yù)測框信息進(jìn)行合并,經(jīng)過NMS非極大值抑制得到改進(jìn)后網(wǎng)絡(luò)的最終預(yù)測結(jié)果。下文詳細(xì)介紹了具體的改進(jìn)設(shè)計(jì)。
與VGG-16和Mobilenetv1骨干網(wǎng)絡(luò)相比,Mobilenetv2網(wǎng)絡(luò)具有更小的體積和計(jì)算量,但具有相當(dāng)?shù)臏?zhǔn)確率和更快的速度。因此,在對YOLOX的輕量化改進(jìn)中將骨干網(wǎng)絡(luò)替換為Mobilenetv2進(jìn)行圖像特征提取。
將輸入圖像放縮到960×960大小。表1為具體的網(wǎng)絡(luò)結(jié)構(gòu),t為Bottleneck結(jié)構(gòu)中的通道擴(kuò)展因子,s代表步長,c是輸出通道數(shù),n是操作重復(fù)次數(shù)。

表1 Mobilenetv2網(wǎng)絡(luò)結(jié)構(gòu)
Mobilenetv2網(wǎng)絡(luò)中最主要的結(jié)構(gòu)是輕量級的Bottleneck,與YOLOX-s網(wǎng)絡(luò)的CSP模塊中的Bottleneck結(jié)構(gòu)不同,由于Mobilenetv2網(wǎng)絡(luò)中使用了降低參數(shù)量和計(jì)算量的深度可分離卷積,為了不丟失特征,在Bottleneck中設(shè)計(jì)了倒殘差線性瓶頸結(jié)構(gòu),該結(jié)構(gòu)是網(wǎng)絡(luò)的核心。
2.2.1 深度可分離卷積
Mobilenetv2的Bottleneck主要應(yīng)用了深度可分離卷積,卷積是卷積神經(jīng)網(wǎng)絡(luò)中算法的核心,深度可分離卷積是CNN的一種,與標(biāo)準(zhǔn)卷積相比需要調(diào)整的參數(shù)更少,計(jì)算量更小,因此采用該操作可以實(shí)現(xiàn)網(wǎng)絡(luò)的輕量化。深度可分離卷積2016年首次在谷歌的Xception[16]網(wǎng)絡(luò)結(jié)構(gòu)中提出,Mobilenetv2的Bottleneck模塊繼承并使用了該結(jié)構(gòu)。它將傳統(tǒng)標(biāo)準(zhǔn)卷積拆分為一層深度卷積和一層逐點(diǎn)卷積,利用深度卷積分別對特征圖各個通道做卷積操作,一個卷積核對應(yīng)負(fù)責(zé)一個通道,深度卷積輸出的特征圖各通道再利用逐點(diǎn)卷積進(jìn)行關(guān)聯(lián)。最終得到的輸出特征圖效果與標(biāo)準(zhǔn)卷積相同,但該操作極大的降低了計(jì)算量。
下文給出了兩種卷積操作的計(jì)算量對比,具體方法和卷積操作對比如圖3和圖4所示。

圖3 深度可分離卷積

圖4 標(biāo)準(zhǔn)卷積與深度可分離卷積對比
設(shè)Sk×Sk×M為卷積核的大小,N為輸出特征圖的個數(shù),SF為輸出特征圖的通道數(shù),分別計(jì)算兩種卷積的參數(shù)量和計(jì)算量得到:
標(biāo)準(zhǔn)卷積的參數(shù)量:
Sk×Sk×M×N
(1)
標(biāo)準(zhǔn)卷積的計(jì)算量:
Sk×Sk×M×N×SF×SF
(2)
深度可分離卷積的參數(shù)量:
Sk×Sk×M+1×1×M×N
(3)
深度可分離卷積的計(jì)算量:
Sk×Sk×M×SF×SF+M×N×SF×SF
(4)
通過計(jì)算得到,深度可分離卷積的計(jì)算量和參數(shù)量是標(biāo)準(zhǔn)卷積的:
(5)
通過詳細(xì)計(jì)算可以證明該設(shè)計(jì)極大的降低了卷積的參數(shù)量和計(jì)算量,由該結(jié)構(gòu)組成的網(wǎng)絡(luò)更加輕量化,對硬件計(jì)算資源的要求更低。
2.2.2 線性瓶頸殘差塊
Mobilenetv2中Bottleneck是線性瓶頸殘差結(jié)構(gòu),基于深度可分離卷積設(shè)計(jì),分為線性瓶頸結(jié)構(gòu)和殘差結(jié)構(gòu)。殘差結(jié)構(gòu)早已在ResNet[17]中證明了對網(wǎng)絡(luò)檢測精度有提高作用,在YOLOX-s網(wǎng)絡(luò)中的CSP模塊中也有應(yīng)用。
而Mobilenetv2中對原始?xì)埐罱Y(jié)構(gòu)在卷積操作和維度操作上進(jìn)行了改進(jìn),設(shè)計(jì)了倒殘差結(jié)構(gòu),提升輕量化后網(wǎng)絡(luò)的檢測精度。傳統(tǒng)殘差結(jié)構(gòu)先通過1*1卷積降維、3*3卷積提取特征后再通過1*1卷積升維。Mobilenetv2將殘差結(jié)構(gòu)中的卷積操作替換為深度可分離卷積,降低殘差網(wǎng)絡(luò)的計(jì)算量。其次由于深度可分離卷積提取的特征被限制在輸入特征的維度中,若在此基礎(chǔ)上使用ResNet的殘差塊則會在輸入特征圖的基礎(chǔ)上先降維,先壓縮再進(jìn)行特征提取會丟失到大量的特征。因此,網(wǎng)絡(luò)設(shè)計(jì)為先通過1*1逐點(diǎn)卷積擴(kuò)張?zhí)卣鲌D通道數(shù),在更高維的特征圖中通過3*3卷積提取特征,然后通過1*1卷積降維,同時將輸入特征與經(jīng)過逆向殘差結(jié)構(gòu)輸出的特征圖相加,形成最終的輸出特征。
Bottleneck在倒殘差結(jié)構(gòu)中加入線性操作。由于傳統(tǒng)殘差結(jié)構(gòu)中采用統(tǒng)一的Relu激活函數(shù),在高維空間中Relu有效增加非線性能力,但在深度可分離卷積的低維空間中若輸入特征為負(fù)數(shù)則該特征被清零破壞造成信息丟失,因此在逐點(diǎn)卷積后將Relu改為Linear激活函數(shù)減少信息丟失對網(wǎng)絡(luò)進(jìn)行優(yōu)化。
實(shí)際網(wǎng)絡(luò)設(shè)計(jì)中表1的所有Bottleneck中,若步長為1,輸入輸出特征圖相同則使用殘差結(jié)構(gòu)。若步長設(shè)計(jì)為2時輸入輸出特征圖不同則不使用該殘差結(jié)構(gòu)。該設(shè)計(jì)很大程度上豐富了特征數(shù)量,同時保留輸入特征的信息,避免出現(xiàn)梯度消息和梯度爆炸的問題。具體Bottleneck模塊的結(jié)構(gòu)如圖5所示。

圖5 MobilenetV2中Bottleneck模塊
在骨干網(wǎng)絡(luò)替換時,將Mobilenetv2中最后的池化層和卷積層去除用以保證不與YOLOX的Neck層功能重復(fù),將其作為Backbone加入檢測算法中,使模型更加輕量化。
訓(xùn)練過程中,模型損失的計(jì)算是將網(wǎng)絡(luò)預(yù)測結(jié)果與真實(shí)結(jié)果進(jìn)行對比,計(jì)算梯度回傳從而不斷調(diào)整模型的網(wǎng)絡(luò)參數(shù)進(jìn)行優(yōu)化,模型訓(xùn)練的效果與損失函數(shù)的設(shè)計(jì)強(qiáng)相關(guān)。在訓(xùn)練過程中,所有特征點(diǎn)生成的預(yù)測框被SimOTA策略動態(tài)分配為正樣本和負(fù)樣本,網(wǎng)絡(luò)通過正樣本學(xué)習(xí)目標(biāo)特征,通過負(fù)樣本學(xué)習(xí)背景特征。
在YOLOX的解耦頭中,總共有三個小的預(yù)測分支,分別為得到預(yù)測框類別的分支,判斷預(yù)測框是目標(biāo)或背景的分支以及對預(yù)測框的坐標(biāo)信息(x,y,w,h)進(jìn)行回歸的分支。因此網(wǎng)絡(luò)的損失計(jì)算分為三部分,分別是分類損失、置信度損失和定位損失。定位損失和分類損失僅針對正樣本進(jìn)行計(jì)算,置信度損失包含正負(fù)所有樣本。計(jì)算公式如下:
L=Lcls+λLreg+Lobj
(6)
定位部分Lreg采用IoU[18]交并比作為邊界框預(yù)測的損失函數(shù),分類Lcls和置信度Lobj均采用二元交叉熵?fù)p失函數(shù)。
2.3.1 CIOU Loss
在訓(xùn)練過程中,已知所有目標(biāo)的真實(shí)框和其對應(yīng)的特征點(diǎn),網(wǎng)絡(luò)可以針對該特征點(diǎn)得到一個預(yù)測框,計(jì)算定位損失回傳使預(yù)測框向真實(shí)框方向移動。YOLOX預(yù)測頭的定位損失采用交并比IOU,計(jì)算預(yù)測框與真實(shí)框之間的重疊面積。IOU損失函數(shù)計(jì)算公式如下:
(7)
LIOU=1-IOU
(8)
但是當(dāng)兩個框不相交或者互相包含時,IOU并不能正確反映預(yù)測框與真實(shí)框之間的距離和位置關(guān)系,IOU值相同時兩個框的重合效果也不同,無法快速準(zhǔn)確的確認(rèn)定位框的優(yōu)化方向。而CIOU損失函數(shù)在懲罰項(xiàng)中加入了預(yù)測與真值框兩個框之間的重疊率、框中心點(diǎn)間距離和目標(biāo)框的長寬比,在不斷訓(xùn)練中使預(yù)測框更接近真實(shí)框,并且加快網(wǎng)絡(luò)的收斂速度和回歸精度,因此將定位損失替換為CIOU。CIOU計(jì)算定義如下:
(9)
(10)
(11)
其中:α為權(quán)重函數(shù),v為真實(shí)框和預(yù)測框長寬比一致性函數(shù)。b和bgt為預(yù)測框與真實(shí)框的中心點(diǎn),wgt、w、hgt、h分別為真實(shí)框與預(yù)測框的寬和高。ρ為兩中心點(diǎn)之間的歐氏距離。
2.3.2 Focal Loss
YOLOX解耦頭中判斷預(yù)測框中是否存在目標(biāo)的置信度損失為二元交叉熵?fù)p失,其計(jì)算定義如下:
(12)
式中,yi為預(yù)測框的標(biāo)簽值,p(yi)為邊界框?qū)儆趛標(biāo)簽的概率。
在YOLOX中每個真實(shí)目標(biāo)對應(yīng)可變K值個正樣本預(yù)測框,其余特征點(diǎn)生成的預(yù)測框均為負(fù)樣本,而圖像中的目標(biāo)數(shù)量相對所有待預(yù)測特征點(diǎn)是少數(shù),因此負(fù)樣本遠(yuǎn)多于正樣本,導(dǎo)致置信度損失計(jì)算時出現(xiàn)正負(fù)不平衡問題。同時在訓(xùn)練中還存在對一些樣本預(yù)測置信度值較低的難分樣本,這些樣本對模型訓(xùn)練精度的貢獻(xiàn)更大,YOLOX中僅使用二元交叉熵?fù)p失無法對難易樣本進(jìn)行平衡。因此加入Focal Loss損失函數(shù),同時平衡正負(fù)和難易樣本,計(jì)算公式如下:
(13)
在該損失函數(shù)中,加入了參數(shù)αi,通過設(shè)置αi的值控制正負(fù)樣本對總損失的權(quán)重。引入了調(diào)制參數(shù)γ解決難易分類樣本不平衡的問題,通過減少損失中易分類樣本權(quán)重,促使模型對難分類的樣本在訓(xùn)練中更關(guān)注。當(dāng)模型預(yù)測樣本概率較大時,(1-pi)γ趨近于0,降低其損失值,當(dāng)預(yù)測概率較小樣本難度較大時,(1-pi)γ趨近于1,提高該樣本對回傳梯度的貢獻(xiàn)。
通過對損失函數(shù)的改進(jìn)增加了模型檢測的性能,雖然一定程度會上導(dǎo)致計(jì)算速度下降,增加模型的訓(xùn)練時間,但損失函數(shù)計(jì)算量的小幅度增加并不會對檢測的推理應(yīng)用速度產(chǎn)生影響,符合輕量化設(shè)計(jì)目標(biāo)。
巡邏航拍目標(biāo)檢測任務(wù)的完成包括訓(xùn)練階段和移植部署應(yīng)用階段。訓(xùn)練階段在PC端將大量標(biāo)注好的數(shù)據(jù)投入到改進(jìn)的目標(biāo)檢測模型中進(jìn)行訓(xùn)練,通過計(jì)算網(wǎng)絡(luò)預(yù)測輸出和真值之間的損失值進(jìn)行梯度回傳更新網(wǎng)絡(luò)參數(shù)完成訓(xùn)練,得到迭代訓(xùn)練后的檢測網(wǎng)絡(luò)模型。部署階段是將上述改進(jìn)后的模型訓(xùn)練后加速優(yōu)化移植到機(jī)載端,最終在機(jī)載端調(diào)用機(jī)載攝像頭完成目標(biāo)檢測。
由于機(jī)載端推理并不需要網(wǎng)絡(luò)的反向傳播,為解決機(jī)載端的算力受限問題,部署階段利用TensorRT對已訓(xùn)練好的改進(jìn)后YOLOX模型優(yōu)化加速,部署在Jetson Xavier NX上。TensorRT[19]是一個基于深度學(xué)習(xí)前向傳播架構(gòu)的高性能推理優(yōu)化器,通過去除無用層、將卷積層、BN層和激活層合并為CBR層等操作對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行重構(gòu),加快模型在邊緣端的推理速度。
詳細(xì)的部署過程如圖6。首先在機(jī)載端配置好航拍檢測所依賴的環(huán)境,將PC端利用Pytorch框架訓(xùn)練生成的pth格式模型轉(zhuǎn)換為onnx中間格式模型,然后利用TensorRT加載解析onnx模型優(yōu)化為Engine格式模型,最后通過加載Engine模型完成對機(jī)載攝像頭獲取圖像的檢測推理。

圖6 模型部署步驟
VisDrone2019-DET[20]是一個在中國不同城市不同場景拍攝的無人機(jī)航拍圖像數(shù)據(jù)集,共有不同地點(diǎn)、不同高度圖像10 209張,其中訓(xùn)練集、驗(yàn)證集和測試集分別為6 471張、548張和3 190張。圖像大小囊括現(xiàn)有無人機(jī)航拍器的拍攝分辨率,場景涉及了雨天、霧天、夜晚等不同的天氣狀況和光照條件,還包含目標(biāo)遮擋和視角變化等多種挑戰(zhàn)性的情況,可使訓(xùn)練出的模型泛化性能更強(qiáng)。數(shù)據(jù)集共標(biāo)注了人、汽車、行人、面包車、公共汽車、卡車、摩托車、自行車、遮陽篷三輪車和三輪車十類目標(biāo),滿足巡邏任務(wù)對車輛和行人分布情況的感知應(yīng)用。
實(shí)驗(yàn)選取該數(shù)據(jù)集作為算法訓(xùn)練和測試的數(shù)據(jù)集。在該數(shù)據(jù)集基礎(chǔ)上為了提高訓(xùn)練出模型的魯棒性,訓(xùn)練過程中采用Mosaic[21]和MixUp[22]數(shù)據(jù)增強(qiáng)策略進(jìn)行隨機(jī)抽取縮放旋轉(zhuǎn)拼接,豐富現(xiàn)有數(shù)據(jù)集增加訓(xùn)練樣本。
實(shí)驗(yàn)算法的訓(xùn)練和測試均采用顯存為12 GB的GPU型號NVIDIA GeForce RTX 3060的環(huán)境完成。實(shí)驗(yàn)系統(tǒng)版本為Ubuntu20.04,內(nèi)核為Linux,運(yùn)行環(huán)境基于開源深度學(xué)習(xí)框架PyTorch1.13,采用CUDA11.6加速計(jì)算,實(shí)驗(yàn)代碼由python3.8編寫,YOLOX模型的訓(xùn)練基于官方提出的YOLOX-s算法,改進(jìn)后的算法基于MMdetection框架完成。
由于VisDrone2019-DET數(shù)據(jù)集以小目標(biāo)為主,因此在訓(xùn)練硬件性能允許的情況下,設(shè)置圖像的輸入分辨率大小為960×960。設(shè)置網(wǎng)絡(luò)最多訓(xùn)練輪次為300次。在訓(xùn)練過程中,設(shè)置初始學(xué)習(xí)率為0.001 25,使用隨機(jī)梯度下降(SGD)方法,采用帶預(yù)熱策略的余弦學(xué)習(xí)率調(diào)度,權(quán)重衰減為0.000 5,SGD動量設(shè)為0.9。在訓(xùn)練的最后15輪關(guān)閉數(shù)據(jù)增強(qiáng)操作,避免訓(xùn)練出的模型脫離實(shí)際的巡邏目標(biāo)檢測應(yīng)用。將訓(xùn)練好的網(wǎng)絡(luò)模型作為各算法最終模型進(jìn)行檢測測試。
實(shí)驗(yàn)采用的機(jī)載計(jì)算邊緣端型號為Nvidia Jetson Xavier NX,訓(xùn)練好的算法模型最終部署到該平臺上用于實(shí)際應(yīng)用推理。算法運(yùn)行環(huán)境基于邊緣端的Jetpack5.1,由cuda 11.4、python3.8、pytorch2.0和tensorRT8.5搭建的深度學(xué)習(xí)框架實(shí)現(xiàn)算法目標(biāo)推理檢測。
4.3.1 模型評價(jià)指標(biāo)
在目標(biāo)檢測任務(wù)中,模型的評估指標(biāo)包括平均精度AP(average precision)、參數(shù)量、計(jì)算量即浮點(diǎn)運(yùn)算次數(shù)GFlops(giga floating-point operations)和單張圖像的推理速度等,AP值與精確率Precision和召回率Recall有關(guān)。mAP是模型檢測所有類別的平均精度。
(16)
(17)

(18)
其中:TP表示模型正確預(yù)測的正樣本個數(shù)。FP表示算法模型將負(fù)樣本錯誤預(yù)測為正樣本個數(shù)。FN表示模型將正樣本預(yù)測為負(fù)樣本的個數(shù)。為了證明改進(jìn)算法的有效性,進(jìn)行了消融實(shí)驗(yàn)。
4.3.2 消融實(shí)驗(yàn)
為了評估改進(jìn)后算法的檢測效果,分別設(shè)計(jì)了加入不同模塊后改進(jìn)算法的消融實(shí)驗(yàn),在PC端VisDrone2019-DET測試集上對訓(xùn)練好的模型進(jìn)行測試推理評估,測試環(huán)境為模型訓(xùn)練時使用的運(yùn)行環(huán)境。選取IOU閾值為0.5分別計(jì)算各類別和模型的mAP值,模型對各類別檢測情況如表2所示。

表2 改進(jìn)前后模型在十類目標(biāo)上的mAP
在測試集上對各類別的檢測結(jié)果表明,將特征提取網(wǎng)絡(luò)替換為Mobilenetv2輕量化網(wǎng)絡(luò),替換后模型的mAP降低了0.2%。在加入Focal Loss損失函數(shù)和CIOU Loss損失函數(shù)進(jìn)行訓(xùn)練后,模型mAP增長了0.3%和0.4%,與YOLOX算法的檢測精度相當(dāng),改進(jìn)后的算法提高了人、自行車等小型目標(biāo)的檢測精度。下面分別計(jì)算每個訓(xùn)練好模型的參數(shù)量、計(jì)算量和PC端單張圖像推理時間,各算法的模型性能如表3所示。

表3 各算法模型性能
由實(shí)驗(yàn)結(jié)果可知,將YOLOX算法的骨干網(wǎng)絡(luò)換為Mobilenetv2后,網(wǎng)絡(luò)模型參數(shù)量由8.94 M降低為3.914 M,降低了56.2%。計(jì)算量由26.78 G FLOPS降低為12.733 G FLOPS,單張圖片的推理時間降低了41.4%,后續(xù)損失函數(shù)的改進(jìn)對參數(shù)量和計(jì)算量并無明顯影響。與基準(zhǔn)算法YOLOX相比改進(jìn)后的算法在保持檢測精度的情況下大大提升了檢測速度。最后將改進(jìn)的Mobilenetv2-YOLOX-Focal Loss-CIOU算法移植到Nvidia Jetson Xavier NX巡邏無人機(jī)機(jī)載邊緣端中運(yùn)行測試,推理速度達(dá)到22 FPS,符合應(yīng)用要求。
4.3.3 實(shí)驗(yàn)結(jié)果
將航拍圖像輸入改進(jìn)后的網(wǎng)絡(luò)上進(jìn)行檢測推理,得到算法檢測到的目標(biāo)可視化結(jié)果。可以看出算法在(a)、(b)、(c)、(d)四幅圖像所示的密集、稀疏等不同場景、傍晚、黑夜等不同光照條件和模糊、旋轉(zhuǎn)等多種圖像中都表現(xiàn)出不錯的效果,檢測結(jié)果如圖7所示。

圖7 改進(jìn)后算法的檢測效果
為更好的驗(yàn)證部署后的算法在實(shí)際巡邏中的應(yīng)用效果,采用DJI M300 RTK無人機(jī)拍攝了國內(nèi)某城市的巡邏圖像,將其送入部署在Jetson Xavier NX機(jī)載端的模型中進(jìn)行檢測推理,各關(guān)注目標(biāo)均被明顯標(biāo)出,得到實(shí)際目標(biāo)檢測效果如圖8所示。

圖8 部署算法巡邏應(yīng)用情況
通過對無線傳輸信道受限情況下城市巡邏中無人機(jī)航拍目標(biāo)檢測的輕量化技術(shù)進(jìn)行研究,提出了改進(jìn)的YOLOX輕量化目標(biāo)檢測算法,并在機(jī)載邊緣端進(jìn)行了實(shí)驗(yàn)驗(yàn)證。提出的算法在YOLOX基礎(chǔ)上采用Mobilenetv2特征提取網(wǎng)絡(luò),降低了網(wǎng)絡(luò)的參數(shù)量和計(jì)算量;其次將置信度損失函數(shù)換為Focal Loss損失函數(shù),更好的平衡正負(fù)樣本和難易樣本;然后對定位損失進(jìn)行改進(jìn),在IOU交并比基礎(chǔ)上加入目標(biāo)框長寬比懲罰項(xiàng),將其替換為CIOU損失函數(shù),提升網(wǎng)絡(luò)的回歸精度。通過改進(jìn)前后模型參數(shù)、運(yùn)行速度和精度對比實(shí)驗(yàn),證明設(shè)計(jì)的輕量化的航拍目標(biāo)檢測網(wǎng)絡(luò)在同等檢測精度下模型更小、檢測速度更快,更適合部署在機(jī)載邊緣終端。為驗(yàn)證算法的實(shí)際應(yīng)用性能,將輕量化模型移植到部署在小型無人機(jī)上的Jetson Xavier NX中進(jìn)行測試,檢測速度達(dá)到22FPS,滿足巡邏任務(wù)的應(yīng)用需求,對機(jī)載目標(biāo)檢測算法的輕量化和工程實(shí)現(xiàn)有參考意義。