李曉軒,甄子洋,劉 彪,梁永勛,黃祎聞
(1.南京航空航天大學(xué) 自動化學(xué)院,南京 210016;2.沈陽飛機設(shè)計研究所 揚州協(xié)同創(chuàng)新研究院,江蘇 揚州 225006)
隨著無人機技術(shù)的飛速發(fā)展,大量難題已被解決,但仍然還存在一些需要解決的問題,其中就包括無人機回收技術(shù)[1-2]。在無人機導(dǎo)航領(lǐng)域中,無人機自主降落系統(tǒng)已成為研究熱點。傳統(tǒng)的導(dǎo)航方式有GPS 全球衛(wèi)星定位導(dǎo)航、慣性導(dǎo)航、無線電導(dǎo)航等。GPS采用的是多衛(wèi)星單程測距系統(tǒng),如果接收機測量到了其與空間中至少四顆導(dǎo)航衛(wèi)星之間的距離,那么就可以通過計算從而確定接收機的位置。但GPS受制于美軍,且信號接收容易受到無人機所處環(huán)境的影響。因此,在無人機自主降落時僅使用GPS是非常受限的。慣性導(dǎo)航的應(yīng)用是最廣泛的,它不依賴于外界信息,僅通過其內(nèi)部的加速度計以及陀螺儀就可以確定自身導(dǎo)航信息。但是隨著時間增加會導(dǎo)致它的估計誤差積累,所以它往往與其他導(dǎo)航方法結(jié)合使用。無線電導(dǎo)航利用了電磁波的傳播特性,缺點在于無線電信號容易被干擾且需要自身主動發(fā)射電磁波信號,這就容易暴露自身位置。
由于傳統(tǒng)導(dǎo)航方式有上述的各種缺點,利用計算機視覺信息作為導(dǎo)航信息實現(xiàn)無人機自主降落已成為熱點。計算機視覺是多學(xué)科交叉的產(chǎn)物,是包含大量信息的被動信息源。無人機的計算機視覺導(dǎo)航通過在無人機上安裝機載相機,從而通過相機捕捉到實時圖像,并輸入到機載計算機中,通過各種算法計算出無人機的各項導(dǎo)航參數(shù),然后將這些導(dǎo)航信息提供給控制系統(tǒng)從而完成各項任務(wù)。相機是一種成本相對較低的傳感器,且可以提供豐富的環(huán)境信息。相對于其他傳感器,基于視覺的自主降落技術(shù)能夠捕獲大量的環(huán)境信息,且不依賴外部的其他設(shè)備,不易受干擾,在電子對抗時有較大優(yōu)勢,因此使用計算機視覺已經(jīng)成為國內(nèi)外的無人機自主降落技術(shù)以及著艦技術(shù)的主流[3-4]。
確定了計算機視覺的導(dǎo)航方式后,就要考慮選擇合適的目標(biāo)檢測算法。傳統(tǒng)的目標(biāo)檢測算法一般由人工提取目標(biāo)特征,由于檢測過程比較復(fù)雜,這就導(dǎo)致了目標(biāo)檢測的效率不高,精度較低,效果較差。近年來,由于深度學(xué)習(xí)技術(shù)的研究取得了一定的突破,基于深度學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)(CNN)[5]在目標(biāo)檢測中的應(yīng)用也取得了長足的進展,人們已經(jīng)開始逐漸拋棄傳統(tǒng)的人工提取圖像中特征的方式,而使用卷積神經(jīng)網(wǎng)絡(luò)來自動提取圖像中的特征并進行分析?;谏疃葘W(xué)習(xí)的目標(biāo)檢測算法大大提高了目標(biāo)檢測效果,且范化能力更強,應(yīng)用范圍更廣,在實際情況下更容易應(yīng)用,已應(yīng)用于自動駕駛[6]、人臉識別[7]、智慧醫(yī)療[8-9]、工業(yè)檢測[10]、活動識別[11]等領(lǐng)域中。目前,基于深度學(xué)習(xí)的檢測算法最常見的兩種方法分別是基于區(qū)域的卷積神經(jīng)網(wǎng)絡(luò)(R-CNN)系列為代表的基于候選框的二階段目標(biāo)檢測算法和以YOLO(You Only Look Once)系列為代表的基于回歸的單階段目標(biāo)檢測算法。二階段目標(biāo)檢測算法雖然在精度上有著較好的表現(xiàn),但檢測速度較慢不適用于實時檢測系統(tǒng)。而單階段目標(biāo)檢測算法在有著較快檢測速度的同時,在檢測精度上也表現(xiàn)不俗。
二階段目標(biāo)檢測算法的代表是R-CNN 系列算法。美國的工程師R.Girshick在2013年第一次將CNN 應(yīng)用到目標(biāo)檢測領(lǐng)域,即R-CNN[12]。它使用CNN 自動提取圖片中的特征信息,在訓(xùn)練網(wǎng)絡(luò)時先采用大樣本進行有監(jiān)督的預(yù)訓(xùn)練,再通過小樣本進行微調(diào),以此來解決模型訓(xùn)練過度產(chǎn)生過擬合的問題。這種做法相對于傳統(tǒng)方式極大地提升了檢測性能,但它需要對圖像中的候選區(qū)域的卷積特征進行很多重復(fù)的計算。為了解決圖片縮放后會產(chǎn)生形變,提出了SSP Net網(wǎng)絡(luò)[13],它的特點是無論輸入什么尺寸的圖片,輸出的大小都是固定的,這就令SSP Net可以提取不同尺度的特征,且僅需提取一次圖片中候選區(qū)域的卷積特征,大大節(jié)省了計算資源的浪費,加快了檢測速度。在此基礎(chǔ)上又提出了Fast R-CNN[14],它在R-CNN 中結(jié)合了SSP Net的思想,不但提高檢測的精度還提高了檢測的速度。之后又提出了Faster R-CNN[15],它引入了RPN(region proposal networks,區(qū)域檢測網(wǎng)絡(luò)),進一步提升了檢測的精度與速度。然而檢測速度與單階段目標(biāo)檢測算法相比仍有一定差距。
單階段目標(biāo)檢測算法主要包括YOLO 系列算法以及SSD(single shot multibox detector)算法[16]。2015年,單階段目標(biāo)檢測算法的開山之作YOLO 系列算法被首次提出[17]。YOLO 算法最后采用全連接層得到檢測結(jié)果,而SSD算法直接使用卷積提取不同尺度的特征圖來得到檢測結(jié)果。YOLOv2[18]在YOLOv1的基礎(chǔ)上進行改進,它在引入錨框機制的同時還引入了批標(biāo)準(zhǔn)化(BN,batch normalization,)的概念。YOLOv3[19]又進行了進一步改進,它的骨干網(wǎng)絡(luò)(Backbone)使用darknet53,并將錨框的大小擴增到3種類型,此外使用sigmoid函數(shù)作為邏輯分類器將輸出限制在0和1之間,這大大提高了YOLOv3的推理速度。在此基礎(chǔ)上改進又提出了YOLOv4算法[20],它用Mish函數(shù)代替原先的ReLU 函數(shù)作為激活函數(shù),因為Mish的函數(shù)圖像比ReLU 更加平滑,在檢測速度與精度之間做到了較好權(quán)衡。而YOLOv5將之前版本的優(yōu)點融會貫通,無論是在精度還是速度上,都有了較大的進步[21]。YOLOv5算法包 括 YOLOv5n,YOLOv5s,YOLOv5m,YOLOv5l,YOLOv5x五個版本,他們的參數(shù)量逐漸增加,檢測精度也隨之升高,但檢測速度會逐漸減慢。YOLOv5s在有著良好檢測精度的同時速度也較快[22],適用于無人機自主降落實時系統(tǒng)中,但在一些獨特場景下對小目標(biāo)的檢測仍有一些不足。
本研究以二維碼構(gòu)成的降落標(biāo)識物為檢測目標(biāo),如圖1所示,采集一千多張不同高度不同角度無人機拍攝的降落標(biāo)識物圖片,構(gòu)建降落標(biāo)識物檢測數(shù)據(jù)集。基于YOLOv5s檢測網(wǎng)絡(luò),為了增強對小目標(biāo)檢測的能力,做出如下改進:
圖1 降落標(biāo)識物
1)增加小目標(biāo)檢測層,即增加了一個預(yù)測頭來檢測更小尺度的目標(biāo);
2)采用BiFPN 加權(quán)雙向特征金字塔網(wǎng)絡(luò)代替原先PANet結(jié)構(gòu),快速進行多尺度特征融合;
3)將EIoU Loss替換CIoU Loss作為算法的損失函數(shù),在提高邊界框回歸速率的同時提高模型整體性能。
YOLOv5 算法的速度快,靈活性高,該算法在YOLOv4的基礎(chǔ)上做出了一些改進,使得其速度與精度都有了一定提高。它由4個部分組成,分別是輸入端、Backbone、Neck和Head。YOLOv5s的網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)圖
輸入端起到預(yù)處理輸入數(shù)據(jù)集的作用,包括自適應(yīng)錨框計算、Mosaic數(shù)據(jù)增強等步驟。在網(wǎng)絡(luò)訓(xùn)練時,模型首先會在初始錨點框的基礎(chǔ)上輸出得到的預(yù)測框,然后計算預(yù)測框與真實框的差值,接下來就可以反向更新網(wǎng)絡(luò)中的各項參數(shù),因此設(shè)定初始錨點框也是比較關(guān)鍵的一環(huán)。在之前的YOLO 系列檢測算法中,訓(xùn)練不同的數(shù)據(jù)集時,為了獲得初始錨點框,需要運行單獨的程序來獲得,而YOLOv5s的代碼集成了此項功能,每次訓(xùn)練時,依賴數(shù)據(jù)集的名稱,它可以進行自適應(yīng)的計算,從而得到最佳的錨點框。Mosaic數(shù)據(jù)增強借鑒了CutMix增強的方法,只不過本方法采用了4張圖片,對其進行了隨機裁剪、縮放、旋轉(zhuǎn)等操作,從而合成了1張圖像,采用Mosaic數(shù)據(jù)增強的方法,不僅使圖片能豐富檢測目標(biāo)的背景,而且能夠提高小目標(biāo)的檢測效果。并且在Batch Normalization計算的時候一次性會處理四張圖片。
Backbone用于提取輸入圖像的信息特征,它使用了CSPDarknet53網(wǎng)絡(luò)。Backbone作為YOLOv5s的骨干結(jié)構(gòu),還包含F(xiàn)ocus、Conv、C3、SPP等模塊。其中Focus結(jié)構(gòu)在YOLOv1-YOLOv4中沒有引入,F(xiàn)ocus模塊重要的是切片操作,它從縱向和橫向兩通道對輸入進行切片后重新拼接;Conv中主要的操作有卷積、正則化和激活層;C3中包括N個殘差網(wǎng)絡(luò)Bottleneck,輸入的特征圖首先經(jīng)過1×1的卷積層,再經(jīng)過3×3的卷積層,然后將得到的結(jié)果直接與輸入特征相加;SPP 是空間金字塔池化層,它用于解決輸入不是固定尺寸的情況,它能將任意大小的特征圖轉(zhuǎn)換成固定大小的特征向量,它在3 種尺度上進行最大池化操作,然后將輸出結(jié)果進行拼接。
Neck是為了實現(xiàn)不同尺度特征信息的融合,它包括特征金字塔(FPN)[23]結(jié)構(gòu)和路徑聚合網(wǎng)絡(luò)(PAN)[24]結(jié)構(gòu)。由于高層的語義特征比低層的要強,為了增強整個金字塔的語義特征,F(xiàn)PN 自頂向下的將高層的強語義特征傳遞下來,但是它并沒有傳遞定位信息。PAN 針對這一點不足,為了將低層較強的定位特征傳遞到上層,它在FPN 的基礎(chǔ)上又添加了一個自底向上的金字塔,彌補了FPN 的不足。
Head是YOLOv5s的檢測部分,它繼承了YOLOv4的Head進行多尺度預(yù)測,提高了對不同尺寸目標(biāo)的檢測性能,它可以輸出大、中、小3種不同尺寸的特征圖,分別用于檢測小、中、大3種目標(biāo)。
本文以YOLOv5s網(wǎng)絡(luò)為基礎(chǔ)進行了如下3種改進:通過增加一個小目標(biāo)檢測頭來提升對小尺度目標(biāo)的檢測能力;采用BiFPN 加權(quán)雙向特征金字塔網(wǎng)絡(luò)代替原先PANet結(jié)構(gòu),快速進行多尺度特征融合;損失函數(shù)使用EIoU Loss,提高邊界框回歸速率的同時提高模型整體性能。下面分別從以上3個方面進行詳細(xì)介紹。
原來的YOLOv5s骨干網(wǎng)絡(luò)為了檢測大中小3種尺度的目標(biāo)使用了3種大小的特征圖,這3種不同大小的特征圖分別來自網(wǎng)絡(luò)對原始輸入圖像進行8倍、16倍和32 倍下采樣,如圖3所示,得到這3種特征圖后將其輸入到特征融合網(wǎng)絡(luò)中進行特征融合。雖然經(jīng)過卷積次數(shù)越多的特征圖的語義信息越豐富,但是代價是目標(biāo)的位置信息也會慢慢丟失,這樣就不利于檢測小目標(biāo)。相反的,雖然卷積次數(shù)越少,特征圖語義信息不足,但是目標(biāo)的位置信息更加準(zhǔn)確。因此為了提升小目標(biāo)的檢測效果,本文在YOLOv5s原有的網(wǎng)絡(luò)上將4 倍下采樣得到的特征圖也輸入到特征網(wǎng)絡(luò)中,從而得到新的大小的特征圖,此特征圖的感受野小,且擁有更加豐富的位置信息,能對更小尺度的目標(biāo)有更好的檢測效果,如圖4所示。
圖3 原始YOLOv5s目標(biāo)檢測層
圖4 改進算法的目標(biāo)檢測層
BiFPN 是加權(quán)雙向特征金字塔,BiFPN 有兩個主要思想:1)高效的雙向跨尺度連接;2)加權(quán)特征融合。BiFPN構(gòu)造了自上而下、自下而上的雙向通道,對主干網(wǎng)絡(luò)中的不同尺度信息進行融合。在融合時,通過上采樣和下采樣將不同尺度信息變?yōu)橥怀叨?,并在同一特征的原始輸入?jié)點和輸出節(jié)點之間添加橫向連接,這樣不僅不增加成本還能融合更多特征。相比于PANet,它還移除了單輸入邊的結(jié)點,因為單輸入邊的結(jié)點沒有進行特征融合,故具有的信息比較少,對于最后的融合沒有什么貢獻度,相反,移除還能減少計算量。加權(quán)特征融合簡單來說,就是針對融合的各個尺度特征增加一個權(quán)重,調(diào)節(jié)每個尺度的貢獻度,這其實是注意力機制與FPN 的碰撞。此外,還可以將BiFPN 看成一個基本單元,通過重復(fù)堆疊幾次此單元的方式可以融合更多特征,它的網(wǎng)絡(luò)結(jié)構(gòu)如圖5所示。
圖5 BiFPN 結(jié)構(gòu)
本文采用EIoU Loss替代原始模型的CIoU Loss作為損失函數(shù)。EIoU Loss的收斂速度更快,評價也更加準(zhǔn)確,不但可以提高模型整體性能,而且在一定程度上可以彌補多尺度特征融合模塊增加導(dǎo)致的訓(xùn)練時間增加、收斂速度變慢的問題。EIoU Loss是針對CIoU Loss進行改進的,CIoU Loss的計算公式為:
式中,I為真實框與預(yù)測框的交并比,bgt與b分別代表真實框的中心點與預(yù)測框的中心點;ρ代表真實框的中心點與預(yù)測框的中心點之間的歐式距離;c代表可以同時包含真實框和預(yù)測框的最小外接四邊形的對角線長度;θ是一個權(quán)重系數(shù),其表達式為:
式中,v是兩框長寬比的距離,其表達式為:
式中,wgt、hgt分別為真實框的長和寬;w、h分別為預(yù)測框的長和寬。
從公式可以看出CIoU Loss的優(yōu)點在于同時兼顧了真實框與預(yù)測框的交并比即重疊面積、中心點距離和縱橫比,但缺點是其公式中的v反映的是兩框長寬比的差異,沒有考慮到寬度和高度分別與其置信度的真實差異,所以有時會降低模型優(yōu)化的速率。而EIoU Loss繼承了CIoU Loss的優(yōu)勢,沿用了交并比損失LIoU、中心點距離損失Ldis,而寬高損失Lasp直接設(shè)置為真實框和預(yù)測框之間的寬度和高度最小差,使收斂速度更快。計算公式如下:
式中,cw和ch為可以包含真實框與預(yù)測框的最小外接矩形框的寬和高。
經(jīng)過上述3 種改進后,算法的整體網(wǎng)絡(luò)結(jié)構(gòu)如圖6所示。
圖6 改進的YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)圖
本文主要針對無人機自主降落場景下的降落標(biāo)識進行視頻采集,共計采集1 350張圖片,其中80%用于訓(xùn)練集,15%用于驗證集,5%用于測試集,其中部分?jǐn)?shù)據(jù)如圖7所示,他們是在不同天氣,不同背景,不同角度,以及不同高度下拍攝的二維碼降落標(biāo)識的圖片。采集完數(shù)據(jù)集后,下一步就需要對數(shù)據(jù)集進行標(biāo)注,以便網(wǎng)絡(luò)學(xué)習(xí),利用Make Sense網(wǎng)頁對數(shù)據(jù)集進行在線標(biāo)注,標(biāo)注成YOLO 格式,共有一個標(biāo)記類別,是QRcode(降落標(biāo)識)。完成標(biāo)注后,每一張圖片都會生成一個txt文件,文件名與圖片名相同。txt文件中共有n行5列,每一行都代表一個檢測目標(biāo)的標(biāo)記框,其中第一列代表該框的類別,第二列代表框中心的橫坐標(biāo)與圖片寬度之比,第三列代表框中心的縱坐標(biāo)與圖片高度之比,第四列代表框的寬度與圖片的寬度之比,最后一列代表框的高度與圖片的高度之比。因為采集的降落標(biāo)識數(shù)據(jù)集有限,改進后的算法與原算法的map值相差不大,在驗證改進算法性能的優(yōu)越性時,使用自制數(shù)據(jù)集并不太合適,所以采用VOC2012數(shù)據(jù)集中的部分?jǐn)?shù)據(jù)作為數(shù)據(jù)集,將幾種算法同時用在此數(shù)據(jù)集上,從而對比不同算法之間的性能。
圖7 數(shù)據(jù)集中部分圖片
實驗環(huán)境如下:操作系統(tǒng)為Ubuntu18.04,使用Ge-Force GTX 1660顯卡進行運算,顯存大小為6GB,CPU 配置為Intel(R)Core(TM)i5-9400F@2.90GHz,CUDA的版本為11.1.0,Python的版本為3.8.12,Pytorch 的版本為1.8.0。本實驗的一些參數(shù)設(shè)置如下:總迭代次數(shù)設(shè)置為100次,迭代批量大小設(shè)置為16,優(yōu)化器使用的是SGD算法。
本文介紹3種常見的評估指標(biāo):平均精度AP(average precision)、平均精度均值mAP(mean AP)和每秒檢測圖片的幀數(shù)fps(frames per second)。其中,平均精度由精確率(precision)和查全率(recall)所決定。精確率是相對于預(yù)測結(jié)果而言的,它表示的是預(yù)測為正的樣本中有多少是預(yù)測對的,所以用預(yù)測對的正樣本數(shù)除以模型預(yù)測的正樣本總數(shù)。查全率是相對于樣本而言的,即樣本中有多少正樣本被預(yù)測正確,所以用預(yù)測對的正樣本數(shù)除以實際樣本總數(shù)。上述每種指標(biāo)的計算公式如下:
式中,AP是指精度-回歸曲線(Precision_Recall,P_R)的面積。mAP是通過對所有類別的AP進行平均得到的。N表示檢測到的類別總數(shù)。如果mAP值越大,那么算法的識別準(zhǔn)確率就越高,檢測效果就越好;TP表示預(yù)測正確的正樣本框的數(shù)量,F(xiàn)P表示預(yù)測錯誤的正樣本框的數(shù)量,F(xiàn)N表示遺漏的樣本框的數(shù)量。
在VOC2012數(shù)據(jù)集上,改進后模型的P-R 曲線如圖8所示。改進后的模型性能與改進前的模型以及YOLOv4算法的對比如表1所示,改進后算法對所有類別的檢測精準(zhǔn)率、查全率、FPS、mAP@0.5和mAP@[0.5:0.95]分別達到77.8%,128,71.9%和48.2%。
表1 不同算法性能對比結(jié)果
圖8 P-R曲線
圖8顯示了VOC 數(shù)據(jù)集中20個不同的類別以及所有類別的P-R曲線,圖中以“aeroplane 0.838”為例,“aeroplane”表示類別名,“0.838”表示將IoU 設(shè)為0.5時,該類別的AP值。由于P-R曲線只是宏觀上展示模型性能,不同模型之間的性能差異主要通過mAP 來衡量,且用VOC數(shù)據(jù)集僅是為了驗證改進算法在性能上的優(yōu)越性,并不用關(guān)注各個類別,只用關(guān)注所有類別的P-R曲線即可。
實驗結(jié)果證明,改進后的算法在VOC2012數(shù)據(jù)集上比原算法有更好的檢測效果,在精度與速度上的權(quán)衡是最好的,雖然FPS略有降低但精度卻得到了提升,在無人機自主降落時,F(xiàn)PS的略微降低的影響基本可以忽略不計,但精度每提升一點,無人機自主降落的安全性就會提升一點。由于YOLOv4的網(wǎng)絡(luò)參數(shù)要多于YOLOv5s,所以YOLOv4算法在精度上會有一定優(yōu)勢,但是FPS卻較低,即檢測速度比較慢,若將YOLOv4算法部署在無人機上的機載計算機系統(tǒng)中,系統(tǒng)會缺乏實時性,因此不適合應(yīng)用于無人機上進行自主降落任務(wù)。
為了驗證改進算法在無人機上的實際性能如何,將改進算法應(yīng)用到如圖9所示的無人機上。采用的無人機的軸距為410mm,使用碳纖維機身,同時兼顧了機身的重量與續(xù)航。它還包含有Pixhawk4基礎(chǔ)套件,用來完成PX4最基本的飛行功能;同時配備有單目視覺相機用于獲取視覺信息,作為改進算法的輸入;機載計算機采用NVIDIA TX2,它作為無人機自主降落任務(wù)的核心用來運行改進的目標(biāo)檢測算法來處理單目相機獲取到的原始數(shù)據(jù),并通過相關(guān)算法計算出無人機與降落標(biāo)識物之間的相對位姿關(guān)系,最后通過Mavros將此信息發(fā)送至飛控之中,從而引導(dǎo)無人機安全的自主降落到降落標(biāo)識物上。
圖9 實驗所用無人機
在無人機上的實際檢測效果如圖10所示。
圖10 降落標(biāo)識檢測效果圖
實驗結(jié)果證明,當(dāng)無人機的高度越來越高時,如果視野中同時存在一個大目標(biāo)和一個小目標(biāo),原YOLOv5s算法只能檢測到大目標(biāo)卻不能檢測到小目標(biāo),而改進后的算法能同時檢測到兩種大小的目標(biāo),證明了改進后的算法在二維碼數(shù)據(jù)集中對小目標(biāo)有更好的檢測效果。同時改進后的算法在TX2上的FPS約為32,也滿足嵌入式部署的實時性要求。
改進YOLOv5s算法首先通過增加小目標(biāo)檢測層來提升對小目標(biāo)特征的檢測能力;然后采用BiFPN 加權(quán)雙向特征金字塔網(wǎng)絡(luò)代替原先PANet結(jié)構(gòu),快速進行多尺度特征融合;最后損失函數(shù)使用EIoU Loss,使收斂更快。實驗表明,改進算法相較于原算法有更好的小目標(biāo)檢測能力,能夠獲得較好的檢測準(zhǔn)確度和比較快的檢測速度,可以滿足無人機自主降落的準(zhǔn)確性和實時性的需求。由于在實際應(yīng)用中場景是多種多樣的,本文選取的降落標(biāo)識可能在某些背景中不是特別明顯,后續(xù)工作可以選取不同的降落標(biāo)識物,并采集更多的數(shù)據(jù)集,通過實驗結(jié)果來選擇合適的降落標(biāo)識物,且可以在提升檢測的實時性上作進一步研究。