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