張繼
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065)
隨著技術(shù)的發(fā)展,無(wú)人機(jī)在軍民兩大領(lǐng)域逐漸得到廣泛運(yùn)用。近幾年的閱兵式上,軍用無(wú)人機(jī)愈發(fā)嶄露頭角,翼龍、暗劍、彩虹等無(wú)人機(jī)在情報(bào)偵察、軍事打擊、信息對(duì)抗、通信中繼和后勤保障等領(lǐng)域發(fā)揮了重大作用;民用無(wú)人機(jī)最具代表性的當(dāng)屬大疆出品的系列無(wú)人機(jī),其在農(nóng)業(yè)、基建、電力巡檢、攝影和公共安全等領(lǐng)域發(fā)揮了重大作用[1]。
在城市中低空飛行的無(wú)人機(jī),常常面臨著與起降的民航飛機(jī)、行人、汽車(chē)、交通燈、飛鳥(niǎo)等發(fā)生相互碰撞的嚴(yán)峻挑戰(zhàn),這不僅會(huì)對(duì)無(wú)人機(jī)自身造成損傷,更有可能影響造成危機(jī)飛行安全、傷及重要建筑設(shè)施、碰撞車(chē)輛、傷害行人等嚴(yán)重事故。所以,無(wú)人機(jī)對(duì)低空飛行障礙物的實(shí)時(shí)檢測(cè)跟蹤就顯得十分緊要和迫切。目前,無(wú)人機(jī)飛行障礙常用的檢測(cè)手段有超聲波回聲定位(Ultrasonic Echo Location)、激光掃描定位(Laser Scan Location)、雷達(dá)搜索定位(Radar Search Location)和視覺(jué)圖像檢測(cè)(Visual Image Detection)[2-3],但是障礙物的多樣性、復(fù)雜性決定了它們中的任何一種方法都各有利弊,難以單獨(dú)完成障礙物檢測(cè)跟蹤的任務(wù),只有針對(duì)具體實(shí)用場(chǎng)景進(jìn)行有機(jī)組合,才能達(dá)到較好的應(yīng)用效果。為了更好地適應(yīng)低空飛行無(wú)人機(jī)所處的復(fù)雜應(yīng)用場(chǎng)景,本文擬從視覺(jué)圖像檢測(cè)(Visual Image Detection)的角度,將高準(zhǔn)確率的YOLO目標(biāo)檢測(cè)與高運(yùn)行效率的KCF目標(biāo)跟蹤相結(jié)合,對(duì)無(wú)人機(jī)飛行障礙的精準(zhǔn)識(shí)別與實(shí)時(shí)跟蹤(Precise Recognition and Real-time Tracking)進(jìn)行深入研究。
目標(biāo)檢測(cè)的任務(wù)是找出視頻圖像中所有關(guān)注的目標(biāo)障礙(物體),確定它們的位置和大小,這是現(xiàn)代機(jī)器視覺(jué)領(lǐng)域的核心問(wèn)題之一。由于各類(lèi)物體有不同的外觀、形狀、姿態(tài),加上成像時(shí)光照、遮擋等因素的干擾,目標(biāo)檢測(cè)一直是機(jī)器視覺(jué)領(lǐng)域最具有挑戰(zhàn)性的問(wèn)題。隨著計(jì)算機(jī)視覺(jué)技術(shù)的發(fā)展與進(jìn)步,利用無(wú)人機(jī)搭載視頻傳感器進(jìn)行目標(biāo)檢測(cè)和跟蹤已廣泛應(yīng)用在地形勘測(cè)、交通監(jiān)控、抗災(zāi)救援以及軍事偵查等領(lǐng)域。因而,對(duì)無(wú)人機(jī)所獲取的視頻目標(biāo)進(jìn)行障礙精準(zhǔn)識(shí)別與實(shí)時(shí)跟蹤是其中重要環(huán)節(jié)。
目標(biāo)檢測(cè)算法主要有兩大類(lèi):one-stage目標(biāo)檢測(cè)和two-stage目標(biāo)檢測(cè)。one-stage目標(biāo)檢測(cè)以SSD和YOLO為代表,它們使用一個(gè)卷積神經(jīng)網(wǎng)絡(luò)直接預(yù)測(cè)出目標(biāo)的類(lèi)別與位置;two-stage目標(biāo)檢測(cè)以R-CNN為代表,分為兩步:首先產(chǎn)生大量的Proposal Bounding Boxes;然后通過(guò)卷積神經(jīng)網(wǎng)絡(luò)篩選出包含目標(biāo)概率最高的Bounding Box,并判斷出目標(biāo)類(lèi)別。
YOLO(You Only Look Once)代表了一系列優(yōu)秀的目標(biāo)檢測(cè)模型,從YOLOv1[4]、YOLOv2[5]、YOLOv3[6],如今進(jìn)化到Y(jié)OLOv4[7]、YOLOv5,它們都是基于深度神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)模型:以整張圖像作為輸入,通過(guò)卷積神經(jīng)網(wǎng)絡(luò)的非線性處理,最終輸出圖像中目標(biāo)的類(lèi)別和其在圖像中的位置(矩形包圍框Bounding Box)。YOLOv4在檢測(cè)精度、運(yùn)行效率、訓(xùn)練難易程度等方面均有較優(yōu)秀的表現(xiàn)。相比YOLOv3,YOLOv4在檢測(cè)精度和運(yùn)行效率上分別提升了10%和12%,并且與YOLOv5性能相當(dāng)。YOLOv4支持單GPU訓(xùn)練,這讓我們能夠比較容易的添加自己的訓(xùn)練數(shù)據(jù),從而擴(kuò)展YOLOv4的檢測(cè)能力。YOLOv4的模型結(jié)構(gòu)(如圖1)由以下幾部分構(gòu)成:CSPDarknet53作為backbone骨干網(wǎng)絡(luò)、SPP作為Neck的附加模塊、PANet作為Neck頸部網(wǎng)絡(luò)的特征融合模塊,以及使用YOLOv3作為head頭部網(wǎng)絡(luò)。
圖1 YOLOv4網(wǎng)絡(luò)結(jié)構(gòu)
常用的YOLOv4模型如表1所示,它們有著不同的準(zhǔn)確度MAP(Mean Average Precision)和檢測(cè)速度FPS(Frames Per Second)。大體而言,準(zhǔn)確度越高,則檢測(cè)速度相對(duì)越慢。綜合考慮準(zhǔn)確度和檢測(cè)速度的影響,我們選擇YOLOv4-416作為本文的目標(biāo)檢測(cè)模型,它使用COCO(Common Objects in Context)[8]作為訓(xùn)練數(shù)據(jù)集,具備飛機(jī)、行人、汽車(chē)、交通燈、鳥(niǎo)類(lèi)等80個(gè)類(lèi)別障礙物的檢測(cè)識(shí)別能力(如圖2)。
圖2 YOLOv4飛行障礙檢測(cè)效果
表1 常用YOLOv4模型
目標(biāo)跟蹤的任務(wù)是找出被關(guān)注目標(biāo)在每幀視頻圖像中的位置。它與目標(biāo)檢測(cè)有著相似的功能:尋找目標(biāo)位置,但“跟蹤”二字對(duì)它的運(yùn)行速度提出了較高的要求。與目標(biāo)檢測(cè)相比,目標(biāo)跟蹤運(yùn)行速度大大加快、目標(biāo)位置定位精度存在一定偏差,可以理解為犧牲少量定位精度以換取成倍的運(yùn)行速度。
目標(biāo)跟蹤算法主要分為判別式(discriminative model)和生成式(generative model)。生成式方法采用特征模型描述目標(biāo)的外觀特征,再最小化跟蹤目標(biāo)與候選目標(biāo)之間的誤差來(lái)確認(rèn)目標(biāo),例如LK光流法;判別式方法將目標(biāo)跟蹤視為二元分類(lèi)問(wèn)題,通過(guò)訓(xùn)練關(guān)于跟蹤目標(biāo)的分類(lèi)器來(lái)從候選目標(biāo)中找出正確的目標(biāo),例如CSK、KCF算法。此外,根據(jù)跟蹤目標(biāo)的數(shù)量還可以將目標(biāo)跟蹤算法分為單目標(biāo)跟蹤與多目標(biāo)跟蹤。相比單目標(biāo)跟蹤而言,多目標(biāo)跟蹤問(wèn)題更加復(fù)雜和困難。多目標(biāo)跟蹤需要考慮視頻圖像幀中多個(gè)獨(dú)立目標(biāo)的不同類(lèi)別、位置、大小、外觀、運(yùn)動(dòng)方向、動(dòng)態(tài)光照、相互遮擋等因素,這些因素是目標(biāo)跟蹤領(lǐng)域研究的難點(diǎn)。
KCF[9]即Kernel Correlation Filter(核相關(guān)濾波),它是一種判別式(discriminative model)的目標(biāo)跟蹤方法。通過(guò)物體在當(dāng)前幀的位置,迅速地預(yù)測(cè)物體在下一幀的位置,其運(yùn)行速度可達(dá)到150fps。KCF的運(yùn)行速度得益于循環(huán)矩陣和相關(guān)濾波這兩個(gè)特點(diǎn)。
進(jìn)行平移,以產(chǎn)生更多的樣本用于訓(xùn)練[10]。同時(shí)這種平移可以通過(guò)循環(huán)矩陣來(lái)表示,循環(huán)矩陣可以對(duì)角化,計(jì)算時(shí)僅需關(guān)注對(duì)角線上的非零元素,因此能夠大幅加快矩陣與矩陣的計(jì)算速度。
相關(guān)是衡量?jī)蓚€(gè)信號(hào)相似值的度量,相關(guān)值越高,表示這兩個(gè)信號(hào)越相似[11]。KCF的輸入往往是通過(guò)其他檢測(cè)手段得到的物體在某一幀圖像上的準(zhǔn)確位置(例如YOLOv4檢測(cè)得到的bbox),該準(zhǔn)確位置記為patch_0。在后續(xù)的圖像幀上,有patch_1~patch_n共計(jì)n個(gè)patch,那么KCF預(yù)測(cè)的位置即為與patch_0相關(guān)值最高的patch。
在計(jì)算patch_0與patch_k(1≤k≤n)的相關(guān)值時(shí),轉(zhuǎn)換到了傅里葉域進(jìn)行。因?yàn)閮蓚€(gè)patch的相關(guān)卷積相當(dāng)于傅里葉域中的元素乘積(時(shí)域卷積=頻域點(diǎn)積),而乘積計(jì)算大大快于卷積運(yùn)算。
大疆無(wú)人機(jī)(御Mavic Air等型號(hào))具有智能跟隨功能,支持對(duì)行進(jìn)車(chē)輛的識(shí)別跟隨能力,無(wú)人機(jī)可以在頂部俯拍、車(chē)尾/側(cè)面跟拍行進(jìn)中的車(chē)輛。在頂部俯拍時(shí),無(wú)人機(jī)的飛行高度保證了不會(huì)與被跟隨車(chē)輛相撞。在車(chē)尾/側(cè)面跟拍時(shí),由于速度不同步,很有可能出現(xiàn)無(wú)人機(jī)加速接近汽車(chē)的情況。這種情況下,被跟隨車(chē)輛就屬于無(wú)人機(jī)飛行路線中有碰撞風(fēng)險(xiǎn)的障礙物,無(wú)人機(jī)需要識(shí)別、跟蹤并規(guī)避車(chē)輛。本文以大疆無(wú)人機(jī)使用智能隨車(chē)拍功能時(shí),追隨汽車(chē)錄制的一段視頻作為數(shù)據(jù)研究對(duì)象。該視頻時(shí)長(zhǎng)54s,1080p(1920×1080),幀率30fps,共計(jì)54×30=1620幀。
KCF算法將圖像沿著上下、左右(如圖3)的方向
圖3 左右平移
我們以YOLOv4目標(biāo)檢測(cè)的矩形包圍框bbox(Bounding Box)作為KCF跟蹤算法的初始輸入,并在隨后所有視頻幀使用KCF目標(biāo)跟蹤來(lái)找出物體在每幀圖像中的位置。初始輸入時(shí)無(wú)人機(jī)在汽車(chē)的正后方,YOLOv4準(zhǔn)確地找到了汽車(chē)的位置(如圖4,紅色矩形框完整包圍了汽車(chē))。隨著時(shí)間的推移,無(wú)人機(jī)飛到了汽車(chē)的右側(cè)面,視角相對(duì)初始位置發(fā)生較大變化,我們發(fā)現(xiàn)KCF逐漸無(wú)法跟蹤到正確的目標(biāo)(如圖5,紅色矩形框僅能包圍汽車(chē)的小部分車(chē)尾)。
圖4 準(zhǔn)確檢測(cè)
圖5 跟蹤丟失
跟蹤丟失的原因在于視角相對(duì)初始位置發(fā)生較大變化,KCF算法“記憶中的車(chē)尾”在側(cè)飛時(shí)并未出現(xiàn)在圖像中。為了矯正這種跟蹤錯(cuò)誤,每隔一定的幀數(shù),使用YOLOv4目標(biāo)檢測(cè)模型重新獲得準(zhǔn)確的車(chē)輛位置bbox,并更新KCF跟蹤算法的輸入,使KCF算法“記憶猶新”。
YOLOv4目標(biāo)檢測(cè)有更高的準(zhǔn)確率,但是檢測(cè)耗時(shí)較長(zhǎng);KCF目標(biāo)跟蹤有更快的運(yùn)行速度,但是容易出現(xiàn)跟蹤目標(biāo)丟失的情況。因此,考慮將YOLOv4目標(biāo)檢測(cè)與KCF目標(biāo)跟蹤結(jié)合使用,從而兼顧檢測(cè)準(zhǔn)確率與實(shí)時(shí)性。
本節(jié)以YOLOv4檢測(cè)間隔為0(所有圖像幀均使用YOLOv4目標(biāo)檢測(cè))時(shí)得到的目標(biāo)位置bbox(Bounding Box)和運(yùn)行時(shí)間(Elapse Time)作為基線,將YOLOv4檢測(cè)間隔為1~100(中間圖像幀使用KCF目標(biāo)跟蹤)作為優(yōu)化對(duì)照,研究不同YOLOv4檢測(cè)間隔時(shí)的準(zhǔn)確率和運(yùn)行效率情況?;鶞?zhǔn)與優(yōu)化的檢測(cè)間隔如圖6所示。
圖6 基準(zhǔn)與優(yōu)化
所有1620幀圖像均使用YOLOv4目標(biāo)檢測(cè),然后輸出bbox,并輸出該段視頻總共的檢測(cè)時(shí)間,作為優(yōu)化對(duì)照的基準(zhǔn)。部分結(jié)果如表2所示。
表2 基線檢測(cè)結(jié)果
其中,(x1_b,y1_b)表示benchmark bbox的左上角點(diǎn),width_b和height_b分別表示benchmark bbox的寬和高。elapseTime_b為采用基準(zhǔn)方法對(duì)整段視頻進(jìn)行跟蹤檢測(cè)的總耗時(shí),76.831s,可計(jì)算得到基準(zhǔn)方法的幀率為1620/76.831=21.08fps。
由于實(shí)驗(yàn)條件限制,使用了臺(tái)式機(jī)對(duì)無(wú)人機(jī)拍攝的視頻進(jìn)行處理,測(cè)試機(jī)配置如表3所示。
表3 測(cè)試機(jī)配置
對(duì)汽車(chē)視頻每間隔interval幀抽取一幀進(jìn)行YOLOv4目標(biāo)檢測(cè),其余幀使用KCF輸出bbox位置坐標(biāo)和運(yùn)行時(shí)間。interval為1時(shí)的檢測(cè)跟蹤結(jié)果如表4所示。
表4 interval為1時(shí)的檢測(cè)跟蹤結(jié)果
其中,(x1_r,y1_r)表示real bbox的左上角點(diǎn),width_r和height_r分別表示real bbox的寬和高。elapseTime_r為采用間隔為1的優(yōu)化方法對(duì)整段視頻進(jìn)行跟蹤檢測(cè)的總耗時(shí),46.145s,可計(jì)算得到檢測(cè)間隔為1時(shí)的幀率為1620/46.145=35.10fps。間隔為1時(shí)相對(duì)基準(zhǔn)方法速度提升speed_x=76.831/46.145=1.66倍。
(1)位置偏差
位置偏差采用交并比IOU(Intersection Over Union)進(jìn)行評(píng)價(jià),顧名思義,IOU為兩個(gè)集合的交集與并集之比(如圖7),即:
圖7 單幀圖像的IOU計(jì)算
IOU=(A∩B)(A∪B)
IOU在相同圖像幀之間進(jìn)行計(jì)算,使用基準(zhǔn)方法得到benchmark bbox,使用優(yōu)化方法得到real bbox,則該幀圖像的IOU為:
計(jì)算所有1620幀圖像的IOU,最后得到該段視頻的平均IOU。
(2)速度提升
對(duì)不同的檢測(cè)間隔,統(tǒng)計(jì)該視頻所有1620幀圖像的總共檢測(cè)跟蹤用時(shí)elapseTime_r。然后速度提升倍數(shù)為基準(zhǔn)總用時(shí)與優(yōu)化方法總用時(shí)之比,即:
在實(shí)驗(yàn)中,我們將interval值依次設(shè)置為1~100,并統(tǒng)計(jì)不同檢測(cè)間隔的位置偏差和速度提升效果,數(shù)據(jù)整理后使用MATLAB繪制如圖8所示。
圖8 不同Interval的位置偏差和速度提升
可以看到,檢測(cè)間隔越大,IOU越?。ňG色曲線),表明位置偏差越大;速度提升效果(紅色曲線)在檢測(cè)間隔小于30時(shí)非常明顯,隨后逐漸趨于平緩。綜合考慮檢測(cè)位置準(zhǔn)確性和運(yùn)行效率,選擇20作為最優(yōu)檢測(cè)間隔,該間隔下的平均IOU、速度提升效果、總用時(shí)、幀率如表5所示。
表5 最優(yōu)檢測(cè)間隔的各項(xiàng)參數(shù)
觀察檢測(cè)跟蹤結(jié)果,跟蹤丟失的情況得到了很好的矯正。無(wú)人機(jī)飛行姿態(tài)任意變化,YOLOv4與KCF均能夠準(zhǔn)確地找到汽車(chē)的位置(如圖10,紅色矩形框完整包圍了汽車(chē))。
圖9 跟蹤丟失
圖10 跟蹤矯正
本文使用原生YOLOv4進(jìn)行飛行障礙檢測(cè),原生YOLOv4模型基于COCO數(shù)據(jù)集訓(xùn)練得到,擁有飛機(jī)、行人、汽車(chē)、交通燈、鳥(niǎo)類(lèi)等80個(gè)類(lèi)別障礙物的檢測(cè)識(shí)別能力。YOLOv4模型支持單GPU訓(xùn)練,使用單張1080 Ti或2080 Ti GPU即可訓(xùn)練得到檢測(cè)準(zhǔn)確率高、實(shí)時(shí)性好的目標(biāo)檢測(cè)模型。這讓我們能夠比較容易地添加自己的訓(xùn)練數(shù)據(jù),從而針對(duì)專(zhuān)用場(chǎng)景擴(kuò)展YOLOv4的檢測(cè)能力。在驅(qū)鳥(niǎo)無(wú)人機(jī)上,將機(jī)場(chǎng)附近經(jīng)常出沒(méi)的鳥(niǎo)類(lèi)圖片加入YOLOv4模型訓(xùn)練集,使其獲得/提升特定鳥(niǎo)類(lèi)的檢測(cè)能力;在農(nóng)業(yè)植保無(wú)人機(jī)上,將高大樹(shù)木的圖片加入YOLOv4模型訓(xùn)練集,使其獲得識(shí)別樹(shù)木并避開(kāi)的能力[12-13];在航拍無(wú)人機(jī)上,將高樓大廈頂部的圖片加入YOLOv4模型訓(xùn)練集,使其能夠檢測(cè)出屋頂并避免碰撞。
綜上所述,我們以無(wú)人機(jī)低空作業(yè)場(chǎng)景中常見(jiàn)的典型障礙物作為研究對(duì)象,使用YOLOv4目標(biāo)檢測(cè)(Object Detection)模型進(jìn)行飛行障礙的精準(zhǔn)識(shí)別(Precise Recognition),并結(jié)合KCF目標(biāo)跟蹤(Object Tracking)算法提升實(shí)時(shí)性,同時(shí)達(dá)到精準(zhǔn)識(shí)別與實(shí)時(shí)跟蹤(Precise Recognition and Real-time Tracking)兼顧的雙重目的。我們測(cè)試了不同檢測(cè)間隔(interval)對(duì)準(zhǔn)確率與運(yùn)行速率的影響,找出了精準(zhǔn)檢測(cè)與快速跟蹤之間的最優(yōu)平衡點(diǎn)。
本文的研究成果主要體現(xiàn)在:
(1)采用YOLO家族新銳的YOLOv4目標(biāo)檢測(cè)模型進(jìn)行飛行障礙物的精準(zhǔn)識(shí)別(Precise Recognition),保證了障礙物檢測(cè)的準(zhǔn)確性;
(2)使用KCF目標(biāo)跟蹤算法提升運(yùn)行實(shí)時(shí)性,并分析出KCF目標(biāo)跟蹤丟失的原因及解決方案;
(3)我們找出了最佳檢測(cè)間隔:在1080p(1920×1080)視頻中,每隔20幀使用一次YOLOv4目標(biāo)檢測(cè),其余幀使用KCF目標(biāo)跟蹤。能夠在保證85%準(zhǔn)確率的同時(shí),提升4.2倍的運(yùn)行速度,使運(yùn)行幀率達(dá)到88.68fps;
(4)檢測(cè)能力擴(kuò)展研究結(jié)果:將自定義類(lèi)別數(shù)據(jù)(如房屋、樹(shù)木)加入YOLOv4訓(xùn)練數(shù)據(jù)集,使用單張GPU(1080 Ti或2080 Ti)即可重新訓(xùn)練YOLOv4目標(biāo)檢測(cè)模型,可使無(wú)人機(jī)獲得其他類(lèi)別障礙物的檢測(cè)避讓能力。
本文采用當(dāng)前目標(biāo)檢測(cè)領(lǐng)域中準(zhǔn)確度和實(shí)時(shí)性均有較好表現(xiàn)的YOLOv4模型,搭配高效的KCF目標(biāo)跟蹤算法,探索了無(wú)人機(jī)飛行障礙的精準(zhǔn)識(shí)別與實(shí)時(shí)跟蹤。我們發(fā)現(xiàn),隨著時(shí)間推移、障礙物的移動(dòng)、無(wú)人機(jī)飛行姿態(tài)發(fā)生變化等,KCF目標(biāo)跟蹤算法得到的矩形包圍框會(huì)逐漸偏離原有障礙物,導(dǎo)致障礙物跟蹤丟失。為此,我們采用YOLOv4模型重新檢測(cè)飛行障礙物的具體位置,并更新KCF算法的輸入,能夠幫助KCF繼續(xù)準(zhǔn)確地跟蹤上目標(biāo)障礙物。我們將YOLOv4檢測(cè)間隔為0(所有1620幀圖像均使用YOLOv4目標(biāo)檢測(cè))作為基線,將YOLOv4檢測(cè)間隔為1~100(中間圖像幀使用KCF目標(biāo)跟蹤)作為優(yōu)化對(duì)照,以找出飛行障礙物檢測(cè)跟蹤準(zhǔn)確率與運(yùn)行效率的最佳平衡點(diǎn)。經(jīng)過(guò)實(shí)驗(yàn)對(duì)比發(fā)現(xiàn),檢測(cè)間隔interval為20時(shí),相對(duì)于基線擁有85.73%的檢測(cè)準(zhǔn)確率,運(yùn)行效率提升4.20577倍,檢測(cè)幀率達(dá)到88.68fps。這表明,基于YOLOv4與KCF的無(wú)人機(jī)飛行障礙物精準(zhǔn)識(shí)別與實(shí)時(shí)跟蹤研究具有較強(qiáng)的理論探索意義和工程應(yīng)用價(jià)值。