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

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

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

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

圖3 深度可分離卷積

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

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

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

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

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

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

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

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