鄧俊文
(中國電子科技集團(tuán)公司第三研究所,北京 100015)
現(xiàn)代戰(zhàn)爭中,無人機(jī)的廣泛運(yùn)用極大地改變了戰(zhàn)爭形態(tài)。在戰(zhàn)場環(huán)境下,有效防御無人機(jī),成為越來越緊迫的需求。雷達(dá)作為無人機(jī)探測的主要手段,具有探測距離遠(yuǎn)、定位精度高、可對多個無人機(jī)目標(biāo)持續(xù)跟蹤的優(yōu)點。然而,低空慢速飛行的無人機(jī)雷達(dá)反射面積小,并且往往處于雷達(dá)探測盲區(qū),對雷達(dá)有效探測形成極大挑戰(zhàn)。針對這個問題,研究一種基于計算機(jī)視覺的實時多無人機(jī)檢測與跟蹤算法,形成對雷達(dá)探測的有效補(bǔ)充,具有重大意義。
利用計算機(jī)視覺技術(shù)檢測并跟蹤低空環(huán)境下慢速飛行的多個小型無人機(jī)目標(biāo),是一項極具挑戰(zhàn)性的任務(wù)。其技術(shù)難點主要有:一是無人機(jī)型號種類多樣,外觀差異較大,特征描述困難;二是目標(biāo)距離不同,相機(jī)焦距變化導(dǎo)致無人機(jī)的成像尺度差異大,多尺度目標(biāo)檢測是目標(biāo)檢測領(lǐng)域的難題;三是低空飛行的無人機(jī)背景復(fù)雜,比如天空、山坡、樹林、水面、農(nóng)田、建筑以及庭院等,對目標(biāo)檢測造成干擾;四是無人機(jī)靈活機(jī)動,難以對其飛行軌跡建模,對其進(jìn)行穩(wěn)定跟蹤比較困難。針對這些技術(shù)難點,本文結(jié)合YOLOv8 目標(biāo)檢測算法和SORT[1]多目標(biāo)跟蹤算法,能對低空環(huán)境下慢速飛行的多個小型無人機(jī)進(jìn)行快速檢測和穩(wěn)定跟蹤,對于及時發(fā)現(xiàn)并定位威脅目標(biāo)、保障低空安全具有重要意義。
多無人機(jī)檢測的主要任務(wù)是確定單個或者多個無人機(jī)在圖像中的位置和長寬,屬于計算機(jī)視覺領(lǐng)域多目標(biāo)檢測任務(wù)的一個應(yīng)用實例。本文采用YOLOv8 目標(biāo)檢測算法實現(xiàn)多無人機(jī)檢測。YOLOv8 算法是卷積神經(jīng)網(wǎng)絡(luò)領(lǐng)域目前最先進(jìn)算法之一,具有準(zhǔn)確率高、檢測速度快的優(yōu)點。只要提供充足的不同場景下不同型號、不同成像尺寸無人機(jī)的訓(xùn)練樣本,YOLOv8 算法就能克服因無人機(jī)種類多樣、外觀差異大、背景復(fù)雜導(dǎo)致檢測困難的問題。此外,YOLOv8 是多尺度目標(biāo)檢測算法,對尺度變化的無人機(jī)具有較高的檢測性能,對目標(biāo)遠(yuǎn)近不同、相機(jī)焦距變化的場景具有較強(qiáng)的適應(yīng)性。值得一提的是,YOLOv8 算法運(yùn)行速度快、檢測性能高,對靈活機(jī)動目標(biāo)建模和生成穩(wěn)定航跡具有積極作用。利用YOLOv8 算法實現(xiàn)多無人機(jī)檢測,主要包括數(shù)據(jù)準(zhǔn)備、網(wǎng)絡(luò)訓(xùn)練和網(wǎng)絡(luò)推理三個階段。
基于深度學(xué)習(xí)的目標(biāo)檢測算法對訓(xùn)練數(shù)據(jù)要求較高,訓(xùn)練數(shù)據(jù)的質(zhì)量極大地決定算法的檢測效果。本文收集了各種場景、各種型號、各種成像尺寸的無人機(jī)圖片三萬多張[2]。無人機(jī)的成像背景包括天空、山坡、樹林、水面、農(nóng)田、建筑以及庭院等場景。無人機(jī)的型號涵蓋國內(nèi)大疆公司精靈、御、曉系列旋翼無人機(jī)和國外Parrot 公司的Disco 固定翼無人機(jī)。各場景下不同型號的無人機(jī)如圖1 所示。
圖1 各種場景下不同型號的無人機(jī)圖像
收集到的圖像并不能直接用于YOLOv8 神經(jīng)網(wǎng)絡(luò)訓(xùn)練,還需對圖像中的無人機(jī)目標(biāo)進(jìn)行標(biāo)注。數(shù)據(jù)標(biāo)注是將無人機(jī)在圖片中所處位置和長寬用特定數(shù)據(jù)格式記錄下來,并保存到與圖片同名的文本文件中。這些標(biāo)注的數(shù)據(jù)也叫標(biāo)簽,隨后被用于神經(jīng)網(wǎng)絡(luò)訓(xùn)練。本文采用機(jī)器自動標(biāo)注與人工校驗相結(jié)合的方式完成全體圖片數(shù)據(jù)的標(biāo)注。對機(jī)器標(biāo)注不準(zhǔn)確的圖片,由人工對其重新標(biāo)注。所有標(biāo)注的圖像和對應(yīng)標(biāo)簽構(gòu)成一個數(shù)據(jù)集。在訓(xùn)練神經(jīng)網(wǎng)絡(luò)之前還需要對數(shù)據(jù)集進(jìn)行劃分。本文按照8 ∶1 ∶1的比例將無人機(jī)數(shù)據(jù)集劃分成訓(xùn)練集、校驗集和測試集。訓(xùn)練集用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)參數(shù),校驗集主要用于網(wǎng)絡(luò)超參數(shù)調(diào)整和訓(xùn)練過擬合判別,測試集用于評估神經(jīng)網(wǎng)絡(luò)的檢測能力。
網(wǎng)絡(luò)訓(xùn)練是用訓(xùn)練數(shù)據(jù)計算網(wǎng)絡(luò)框架中各卷積核參數(shù)的過程。本文采用YOLOv8 算法訓(xùn)練無人機(jī)數(shù)據(jù),網(wǎng)絡(luò)主體框架如圖2 所示。具體訓(xùn)練過程如下。
圖2 YOLOv8 網(wǎng)絡(luò)架構(gòu)圖
(1)首先用PyTorch 機(jī)器學(xué)習(xí)庫構(gòu)建網(wǎng)絡(luò)框架,然后用YOLOv8 在COCO 數(shù)據(jù)集上的預(yù)訓(xùn)練權(quán)重文件,初始化網(wǎng)絡(luò)參數(shù)。
(2)將訓(xùn)練集中的所有圖像按原長寬比填充縮放到640×640 大小后輸入神經(jīng)網(wǎng)絡(luò)運(yùn)算。經(jīng)過P1 至P5 模塊的卷積計算后,在P3,P4,P5 處分別輸出80×80,40×40 和20×20 三個尺度的特征圖。P5 和P4 尺度下的特征圖經(jīng)過上采樣后分別與P4 和P3 尺度下的特征圖拼接,P3 和P4 尺度下的特征圖再分別與P4 和P5 尺度下的特征圖拼接。這便是特征金字塔網(wǎng)絡(luò)(Feature Pyramid Network,F(xiàn)PN)[3]和路徑聚合網(wǎng)絡(luò)(Path Aggregation Network,PAN)[4]神經(jīng)網(wǎng)絡(luò)的設(shè)計思想,其好處是在細(xì)粒度檢測模塊中融入更多的全局輪廓特征,在粗粒度檢測模塊中融合更多的局部細(xì)節(jié)特征,用以提升檢測性能。神經(jīng)網(wǎng)絡(luò)輸出三個尺度的檢測結(jié)果,分別對應(yīng)圖像中的大、中、小三種目標(biāo)。
(3)構(gòu)造損失函數(shù)并利用檢測結(jié)果與訓(xùn)練集標(biāo)注的差異計算損失。根據(jù)損失,使用SGD[5]梯度下降算法調(diào)整網(wǎng)絡(luò)參數(shù)。
(4)反復(fù)重復(fù)過程(2)、過程(3),直到損失低于某個閾值并且保持平穩(wěn)即停止訓(xùn)練。保存訓(xùn)練過程中最優(yōu)的一組網(wǎng)絡(luò)參數(shù),寫入權(quán)重文件。
網(wǎng)絡(luò)推理是在特定計算平臺上構(gòu)建神經(jīng)網(wǎng)絡(luò)并用訓(xùn)練好的權(quán)重文件初始化網(wǎng)絡(luò)參數(shù),執(zhí)行前向推理獲取檢測結(jié)果的過程。其主要步驟如下。
(1)在NVIDIA Jetson Orin 硬件平臺上,利用NVIDIA JetPack SDK 構(gòu)建軟件開發(fā)環(huán)境。
(2)構(gòu)建并初始化YOLOv8 神經(jīng)網(wǎng)絡(luò)。
(3)對待檢測圖像進(jìn)行預(yù)處理,保持長寬比,縮放至640×640 大小,輸入神經(jīng)網(wǎng)絡(luò)計算,得到檢測結(jié)果。對檢測結(jié)果進(jìn)行后處理,將目標(biāo)位置和長寬轉(zhuǎn)換到縮放前的圖片中去。
(4)使用非極大值抑制算法消除檢測結(jié)果中的冗余,得到最終檢測結(jié)果。
多無人機(jī)跟蹤的主要目的是關(guān)聯(lián)前后幀圖像中同一無人機(jī)目標(biāo),并為其分配航跡號。SORT 算法是當(dāng)前多目標(biāo)跟蹤領(lǐng)域最高效的算法之一,處理能力高達(dá)每秒260 幀。SORT 是一種檢測后跟蹤算法,其跟蹤性能極大依賴檢測質(zhì)量,檢測結(jié)果的好壞對多目標(biāo)跟蹤效果有著決定性的影響。本文利用YOLOv8 算法檢測每幀圖像中的無人機(jī)目標(biāo),SORT 算法利用檢測到的目標(biāo)進(jìn)行目標(biāo)關(guān)聯(lián)和航跡生成,可以實時、穩(wěn)定跟蹤多個無人機(jī)目標(biāo)。只要檢測和跟蹤的時間間隔足夠短,目標(biāo)在前后幀之間的運(yùn)動可以近似為線性勻速運(yùn)動,這極大地簡化了靈活機(jī)動目標(biāo)的運(yùn)動建模。SORT 多目標(biāo)跟蹤算法包含航跡創(chuàng)建、航跡匹配以及航跡刪除三個核心步驟。
航跡創(chuàng)建是用檢測結(jié)果新建航跡并分配航跡號的過程,主要步驟如下。
(1)對第一幀圖像進(jìn)行目標(biāo)檢測,得到檢測結(jié)果。利用卡爾曼濾波對檢測結(jié)果進(jìn)行預(yù)測,得到預(yù)測結(jié)果。
(2)獲取到第二張圖像的檢測結(jié)果后,將檢測結(jié)果逐一與前一幀圖像中的預(yù)測結(jié)果匹配。如果匹配上,則生成預(yù)備航跡,更新卡爾曼濾波器參數(shù),利用卡爾曼濾波對預(yù)備航跡進(jìn)行預(yù)測,得到預(yù)測航跡;如果匹配不上,該檢測結(jié)果被剩下。
(3)獲取到第三幀圖像的檢測結(jié)果后,將檢測結(jié)果逐一與前一幀的預(yù)備航跡匹配。如果匹配上,生成正式航跡,為其分配航跡號,更新卡爾曼濾波器參數(shù);如果匹配不上,再與前一幀剩下的檢測結(jié)果匹配,如果匹配上,生成預(yù)備航跡,更新卡爾曼濾波器參數(shù),反之,該檢測結(jié)果被剩下。如此反復(fù)。
航跡匹配是當(dāng)前幀目標(biāo)檢測結(jié)果與上一幀預(yù)測結(jié)果配對的過程。本文用檢測結(jié)果與預(yù)測結(jié)果邊框的交并比來衡量目標(biāo)的相似度,用當(dāng)前幀的所有檢測結(jié)果與上一幀所有預(yù)測結(jié)果計算目標(biāo)邊框交并比,得到代價矩陣,用匈牙利算法從該代價矩陣中選擇出全局最優(yōu)的匹配組合。將匹配組合中目標(biāo)邊框交并比低于閾值的配對從組合中剔除,剩余的匹配就被認(rèn)為是正確的匹配。
為了保證算法的正確、高效和低開銷,必須建立準(zhǔn)則,及時刪除病態(tài)航跡。航跡刪除準(zhǔn)則如下:
(1)正式航跡建立后,如果隨后連續(xù)三幀關(guān)聯(lián)不上目標(biāo),認(rèn)為該航跡失效,從航跡列表中刪除;
(2)對于預(yù)備航跡,如果在下一幀關(guān)聯(lián)不上目標(biāo),認(rèn)為該航跡是錯誤關(guān)聯(lián),立即從預(yù)備航跡列表中刪除;
(3)對于上一幀剩下的檢測點,如果在當(dāng)前幀未能配對,在下一幀不參與計算。
本文將YOLOv8 目標(biāo)檢測算法和SORT 多目標(biāo)跟蹤算法移植到NVIDIA Jetson Orin 硬件平臺上。實驗利用兩段視頻對算法性能進(jìn)行測試,視頻1 包含一個無人機(jī),視頻2 包含兩個無人機(jī)。圖3 是對單個無人機(jī)檢測與跟蹤的結(jié)果,圖4 是對兩個無人機(jī)同時檢測與跟蹤的結(jié)果。由圖可見,無論是單目標(biāo)場景還是多目標(biāo)場景,本文算法均能檢出、跟蹤場景中的無人機(jī)并穩(wěn)定生成航跡。本文算法在NVIDIA Jetson Orin 硬件平臺上的處理能力在每秒30 幀以上,完全能滿足實時檢測與穩(wěn)定跟蹤的需求。
圖3 單目標(biāo)跟蹤結(jié)果
圖4 多目標(biāo)跟蹤結(jié)果
本文針對低空環(huán)境下慢速飛行小型無人機(jī)檢測與跟蹤困難的問題,采用計算機(jī)視覺的技術(shù)路線,結(jié)合YOLOv8 目標(biāo)檢測算法和SORT 多目標(biāo)跟蹤算法,在NVIDIA Jetson Orin 硬件平臺上實現(xiàn)了對單個或者多個無人機(jī)的檢測與跟蹤。實驗表明,本文所提算法實時性好,跟蹤穩(wěn)定,可以直接用于工程實踐。