葛全益,鐘涵海,侯冰,張曉龍,盧曉龍
(東北林業(yè)大學(xué)機電工程學(xué)院,黑龍江哈爾濱,150040)
無人機自主飛行是近些年來比較熱門的應(yīng)用。目前,大多數(shù)無人機采用激光雷達、電場傳感器、光流等功能實現(xiàn)定位,但上述定位方式因易受到外界環(huán)境干擾而存在一定安全隱患。比如采用激光雷達的實時定位與地圖構(gòu)建(SLAM)[1]的無人機在周圍有人群或其他物體通過時激光雷達定位的位置信息會收到干擾,從而對定位造成影響。此外,傳感器檢測方式定位[2]與激光SLAM原理相似,若所在環(huán)境受到干擾,無人機的定位也會失效。
針對以上情形,本文提出一種基于SSD目標(biāo)檢測算法的無人機定位方式,可使無人機在不同環(huán)境下定位,具有魯棒性強、可靠性高的特點。
采集到的原始圖像在色度、色溫、對比度上較為單一,但實際環(huán)境中標(biāo)志物的圖像屬性較為復(fù)雜。為此,在進行模型訓(xùn)練之前,需先對圖像進行增強處理。

圖1 原圖像(800*600)

圖2 增強圖像(800*600)
數(shù)據(jù)集按照VOC2012格式進行標(biāo)注,并舍棄不完全顯示的圖像。由于無人機飛行時相對于地標(biāo)的水平面方向存在不確定性,故采用多角度旋轉(zhuǎn)方向的方式采集并進行標(biāo)注。
通過對樣本進行水平、垂直翻轉(zhuǎn),隨機角度旋轉(zhuǎn)進行樣本擴增,擴大數(shù)據(jù)集。

表1 數(shù)據(jù)集內(nèi)容
SSD是一種單階段檢測算法[3],其預(yù)測框的分類與定位均為回歸問題,采用不同尺度的特征圖,并預(yù)先生成不同比例的先驗框,可以檢測不同大小的物體。SSD采用VGG16作為基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu),在VGG16的基礎(chǔ)上增加了卷積層來獲取更多的圖像特征。其網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。

圖3 SSD網(wǎng)絡(luò)結(jié)構(gòu)
在訓(xùn)練過程中,首先需確定先驗框與ground_truth,即首先確定物體哪些先驗框來預(yù)測,然后使用非極大值抑制來產(chǎn)生結(jié)果。在先驗框與ground_truth匹配的過程中,先由具體某個先驗框?qū)γ總€ground_truth進行預(yù)測,若一個先驗框沒有與任何ground_truth匹配,則認(rèn)為其匹配背景,即負(fù)樣本。若剩余未匹配的先驗框大于某一閾值,則將該先驗框與這個ground_truth進行匹配。
若檢測物體總共有c個類別,SSD會預(yù)測出(c+1)個置信度,第一個置信度為背景置信度,這些置信度中最高置信度對應(yīng)的類別就是預(yù)測類別。位置預(yù)測即預(yù)測邊界框的(cx,cy,w,h),分別表示邊界框的中心坐標(biāo),寬度和高度。但在預(yù)測過程中實際預(yù)測的是邊界框相對于先驗框的偏移量。如果先驗框的位置為(dcx,dcy,dw,dh),對應(yīng)的邊界框為(bcx,bcy,bw,bh),那么預(yù)測值l是b相對于d的轉(zhuǎn)換值:
lcx=(bcx-dcx)/dw,lcy=(bcy-dcy)/dh,lw=log(bw/dw),lh=log(bh/dh),為了得到預(yù)測框的真實位置,需要將預(yù)測值準(zhǔn)化成真實坐標(biāo):


圖4 DW卷積與PW卷積
SSD的損失函數(shù)定義為置信度誤差與位置誤差的加權(quán)和,即

預(yù)測時先預(yù)測每個預(yù)測框的類別,隨后由先驗框得到其位置信息,最后通過非極大值抑制(NMS)得到真實輸出。
SSD原作者采用了VGG16作為基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu),但由于計算開銷較大不適合在嵌入式設(shè)備運行。Google團隊提出了MobileNet網(wǎng)絡(luò)結(jié)構(gòu)專門用來在移動端設(shè)備運行,將SSD中的VGG16替換為MobileNet結(jié)構(gòu)可極大地減少運算開銷,模型準(zhǔn)確率比VGG16下降了0.9%,參數(shù)量卻是VGG16的1/32[4]。
MobileNet使用了不同于傳統(tǒng)卷積的DW卷積,每個卷積核只與輸入圖像的一個通道進行卷積操作,并且每個卷積的通道數(shù)均為1,這樣使得輸入特征矩陣與輸出特特征矩陣通道數(shù)一樣。若想獲得特定的輸出通道數(shù),需要在DW卷積后面接上PW卷積,PW卷積為核大小為1的普通卷積。
設(shè)定輸入特征矩陣寬高相等且為WF,卷積核的寬高相等且為WK,輸入矩陣的channel數(shù)為I,輸出矩陣的channel數(shù)為O,卷積運算stride=1,則普通卷積運算的計算量可近似為

DW與PW卷積計算量的和為

MobileNet卷積核大小均為3*3,故理論上普通卷積計算量是DW+PW卷積運算量的8~9倍。
將SSD原骨干網(wǎng)絡(luò)VGG16更換為MobileNet即可得到新的目標(biāo)檢測算法MobileNet-SSD。
實驗的模型訓(xùn)練設(shè)備為Intel(R)Xeon(R)Gold 6148 CPU,GPU 為NVIDIA Tesla V100,操作系統(tǒng)為Ubuntu18.04,訓(xùn)練框架為PaddlePaddle 2.2.2。

圖5 MobileNet-SSD網(wǎng)絡(luò)圖
實驗采用非極大值抑制(NMS)方法,在生成的多個對象中,超過閾值的認(rèn)為是一個對象,score低的則被刪除,用式(7)計算兩個包圍框(A,B)的重合度。優(yōu)化器采用SGD, 初始學(xué)習(xí)率為0.01,訓(xùn)練的輪數(shù)為300輪。

改進的SSD算法更適合在嵌入式端運行,將訓(xùn)練的模型部署在NVIDIA Jetson Nano(4G)上,預(yù)測圖像大小為800*600,經(jīng)過測試幀率為58.8FPS,模型精度為73.8%,滿足無人機定位需求。
MobileNet-SSD方法預(yù)測精度比嵌入式設(shè)備常用算法精度對比如下:

表2 數(shù)據(jù)對比
(以上模型結(jié)果的得出均是在訓(xùn)練輪數(shù)500輪,初始學(xué)習(xí)率為0.01)
采用MobileNet-SSD算法可以較穩(wěn)定地檢測地標(biāo)從而實現(xiàn)飛機自身更穩(wěn)定的定位,當(dāng)水平方向位姿誤差滿足一定范圍時即認(rèn)為定位完畢,并將結(jié)果發(fā)送給飛行控制器。

圖6 控制流程圖
如圖7、圖8為MobileNet-SSD檢測結(jié)果,通過深度學(xué)習(xí)可以得出目標(biāo)矩形框在圖像坐標(biāo)系中的位置(x,y),以目標(biāo)中心為原點,過標(biāo)志平面水平方向為Xw軸,豎直方向為Yw軸,垂直標(biāo)志面過原點為Zw軸,建立世界坐標(biāo)系OXwYwZw,目標(biāo)外接矩形框大小為W*H,則目標(biāo)外接矩形框在世界坐標(biāo)系中的坐標(biāo)(由左上順時針)為(-w/2, h/2, 0), (w/2, h/2, 0), (w/2, -h/2,0), (-w/2, -h//2, 0),由兩兩對應(yīng)的四個點,以及相機的內(nèi)參矩陣camera_matrix,畸變參數(shù)distortion_coefficients,通過SolvePNP算法可以解算出目標(biāo)與飛機之間的相對位置關(guān)系T,姿態(tài)關(guān)系R,位姿關(guān)系可表述為RA+T,A為相機坐標(biāo)系。

圖7 檢測結(jié)果A

圖8 檢測結(jié)果B
將深度學(xué)習(xí)目標(biāo)檢測模型與無人機定位結(jié)合起來是本文主要內(nèi)容,它解決了傳統(tǒng)視覺易受光照等條件干擾的缺陷,又協(xié)調(diào)了激光傳感器等受三維立體變化的限制,具有較高的準(zhǔn)確性與實時性。同時,在定位地點設(shè)置不同的圖案可以讓無人機識別出其蘊含的不同語義,可以在無人機定位的同時將更多的信息傳遞給控制系統(tǒng),具有更大的可拓展性。