嚴 飛,馬 可,劉 佳,劉銀萍,夏金鋒
1.南京信息工程大學 自動化學院,南京 210044 2.江蘇省大氣環(huán)境與裝備技術協同創(chuàng)新中心,南京 210044 3.南京信息工程大學 大氣物理學院,南京 210044
近年來,視覺目標跟蹤和物聯網技術在增強現實、智能視頻監(jiān)控、目標識別、醫(yī)學診斷、視覺導航和空間監(jiān)控等領域得到了廣泛應用[1]。在跟蹤目標性能評估中,跟蹤效果一般通過準確性和實時性進行評估[2]。視頻中的目標在運動過程中可能會受到光照、飛行姿態(tài)、背景等各種不可預知的復雜變化的影響[3]。因此,在實際環(huán)境中建立一種通用、準確、穩(wěn)定的魯棒視覺目標跟蹤算法仍然是一個巨大的挑戰(zhàn)[4]。在跟蹤無人機方面,一個好的跟蹤算法可以使無人機在背景復雜、光線改變、尺寸較小等場景表現更好的魯棒性[5]。
精確穩(wěn)定的魯棒視覺目標跟蹤算法能夠更好地適應各種情景。針對這一問題,許多學者也給出了自己的觀點和研究成果。Fukunaga等人[6]提出Mean-Shift(均值漂移)算法,該算法有較好的實時性和有效性,但是當目標的大小逐漸增大甚至超過核帶寬范圍時,固定邊界盒往往會導致跟蹤的丟失;文獻[7]提出了一種利用SIFT算法提取目標特征尺度、特征點主方向等參數,然后用均值漂移進行目標定位的方法,但該方法存在計算量大、實時性差等缺點;Wang等人[8]提出了一種精確、魯棒的增強跟蹤方法,該算法采用了一種靈活的三維物體外觀模型,結合了局部和全局視覺表示的優(yōu)點,克服了跟蹤失敗的缺點;在跟蹤方面也有一些經典算法,如卡爾曼濾波[9]、貝葉斯算法[10-12]等;Li等人[13]提出了改進的視覺目標跟蹤算法ENS-CSK,該算法能夠更好地匹配物聯網技術下的視覺目標跟蹤,但是當目標外觀發(fā)生顯著變化時,跟蹤失敗,難以恢復和重新啟動跟蹤;Somayyeh等人[14]提出了一種基于簡化粒子濾波遺傳算法(reduced particle filter based upon genetic algorithm,RPFGA)的圖像序列多目標并行跟蹤方法,利用狀態(tài)空間模型中的加速度和速度,可以實現對勻速和加速度目標的跟蹤,但是在標記方法中,由觀測器對跟蹤目標的一部分進行標記,如果觀測器沒有準確地標記目標,則會降低跟蹤功率;董蓉等人[15]提出一種基于局部不變特征點數據集的目標跟蹤算法,該算法能準確地定位目標,跟蹤其方向變化和目標大小,而且對遮擋下的目標狀態(tài)也可以正確估計,但是如果目標紋理非常稀少,會導致提取的局部不變特征也較少,目標狀態(tài)估計結果可能不穩(wěn)定。
在跟蹤目標過程中,為了解決跟蹤速度問題,呂清松等人[16]提出基于一種基于FPGA(field programmable gate array)的顏色特征的目標識別與追蹤系統,該系統有良好的實時性,可以實時跟蹤640×480@60 Hz的視頻流,但是該方法識別顏色單一,不能準確識別復雜背景下的目標。夏浩偉[17]針對目標與背景顏色相近的情況提出一種基于FPGA的彩色輪廓加強算法,結合均值漂移算法實現了目標跟蹤的魯棒性。彩色輪廓增強和均值漂移相結合的跟蹤算法比均值漂移跟蹤算法具有更好的魯棒性。而且能夠在1080P@60 Hz的情況下實現實時的目標跟蹤,雖然該算法實時性高,但如果目標移動過快,會出現跟丟的情況,因此不擅長跟蹤機動性較強的無人機。Henriques等人[18]提出核相關濾波算法(kernel correlation filter,KCF),該方法首先需要手動框選一個窗口作為跟蹤目標,并通過訓練樣本建立一個濾波器,然后通過相關性計算找到目標。該方法在跟蹤方面有較高的準確性,同時在實時性方面表現也十分理想,但是該方法對快速移動的物體,跟蹤性能比較差。李艷荻等人[19]提出了一種基于動態(tài)特征塊匹配的自適應背景更新算法。在采用幀與背景差融合算法檢測目標的基礎上,利用目標的時刻信息跟蹤目標,避免了全景視覺中缺少顏色和輪廓特征的缺點。該算法減少了更新單個像素點的冗余計算,充分利用了像素點的空間分布信息,滿足了運動目標檢測的準確性和完整性,但是該算法只能針對背景不變的情況下進行跟蹤,不適應跟蹤無人機背景實時變化的場景。針對幀差法容易受到圖像處理效果和外界干擾問題,伍濟鋼等人[20]提出了光流點匹配跟蹤方法,避免了逐幀進行特征分割、提取等復雜的圖像處理,同時在準確度和抗干擾方面有不錯的表現。唐瑞等人[21]提出了一種完整有效的建立數據模板庫的目標匹配識別算法,利用相似度匹配原理識別目標,獲取目標姿態(tài)信息。然而,在檢測過程中,目標檢測結果往往伴隨著較大的干擾陰影,這可能會造成運動目標本身的形狀變形以及鄰近目標的合并,從而導致誤檢測和漏檢。
針對跟蹤過程中出現的對背景復雜、光照變化、目標較小、移動速度快等情景的目標跟蹤準確度和實時性問題,本文提出一種基于FPGA的自適應跟蹤算法。將目標模板與搜索區(qū)域數據進行儲存,然后通過遍歷的方式在搜索區(qū)域找到相關度最高的區(qū)域,同時當背景發(fā)生變化時,會自適應更新模板數據,提高跟蹤準確度。本文算法可以在跟蹤準確度方面有理想的跟蹤效果,同時本文算法基于FPGA平臺設計,利用FPGA對數據并行處理,節(jié)省處理時間,滿足實時性的要求。
為了滿足追蹤過程中對于準確度與實時性的需求,本文提出一種基于FPGA平臺的無人機跟蹤系統。首先構建一個測試系統,該系統包括視頻的輸入和輸出設備,還有FPGA芯片和串口等。因此,該實驗系統主要分為硬件和算法設計兩部分,該系統的流程如圖1所示。
圖1 該系統的流程總體框圖Fig.1 Overall flow diagram of system
系統通過上位機采集視頻,上位機將已經拍攝好的視頻通過HDMI傳輸給解碼芯片ADV7611,解碼之后得到有效像素數據流和行場同步信號,然后將數據流發(fā)送給FPGA,方便FPGA對數據流進行后續(xù)處理。
圖像數據經過FPGA處理模塊處理之后,得到帶有目標框選的有效像素數據流和行場同步信號,然后將數據流輸出給編碼芯片ADV7513,最后編碼芯片將數字視頻信號轉換成模擬視頻信號,通過HDMI將模擬視頻信號傳輸給顯示屏進行顯示,方便通過顯示屏直接觀察跟蹤效果。
系統在上位機發(fā)送給FPGA視頻流之前,首先將視頻第一幀跟蹤目標左上角的坐標和無人機尺寸通過串口發(fā)送給FPGA,使FPGA在接收到視頻流后,根據接收到的目標坐標和尺寸確定第一幀的框選目標,并將目標區(qū)域數據進行保存和后續(xù)處理。
FPGA對每一幀進行跟蹤處理,跟蹤之后得到目標位置,通過串口實時將目標位置發(fā)送給上位機,然后上位機進行重疊率計算,可以直觀看到跟蹤的實時重疊率波形圖及平均重疊率數據。
為了更好地反映圖像的形態(tài)特征,同時為了降低數據處理量,選擇對接收到24位(RGB888)圖像數據進行灰度處理得到范圍為0~255的8位數據,就得到了灰度圖像數據。這樣在數據方面只需要對8位灰度數據進行處理,相比較原彩色圖像24位圖像數據,灰度圖像數據計算量降低,同時考慮顯示效果,在目標跟蹤模塊采用灰度數據進行計算,顯示屏選擇彩色圖像,其中灰度計算方法如式(1)所示。
式中,R、G、B分別表示RGB888的紅色、綠色、藍色通道數據,Y1表示得到的灰度數據。
實際上,由于FPGA不能對浮點型進行計算,需要先對式(1)進行放大256倍處理,如式(2)所示,得到Y2后再進行除以256處理得到灰度值。
根據FPGA并行運算特點,將R、G、B通道數據同時乘以對應的權值,并將得到的值相加,取高8位數據得到最后的灰度值,這樣完成灰度處理只需一步,即一個時鐘周期。該系統輸入時鐘為50 MHz,通過PLL產生200 MHz時鐘作為灰度處理的時鐘,則每一個時鐘周期即5 ns,每個像素點的灰度處理只需5 ns就可以完成。
首先選用一張數據格式為RGB888,圖像分辨率為320×240的圖像,采用FPGA對圖像提取其中的R、G、B數據,并將RGB數據帶入式(2)中,計算得到Y2。然后對Y2除以256,將計算得到的數據Y2分別賦值給R、G、B數據,使R、G、B數據相同,并將計算之后得到的RGB數據通過ADV7513編碼芯片進行編碼,通過HDMI傳輸給顯示屏進行顯示。灰度轉換前后圖片對比如圖2(a)所示,灰度轉換前后R、G、B數據的modelsim仿真圖如圖2(b)所示。
圖2 灰度轉換前后結果對比Fig.2 Comparison of results before and after gray scale conversion
1.4.1 目標模板的存儲
在無人機跟蹤過程中,需要將目標模板進行保存,用于后續(xù)跟蹤過程中的相關度計算等。首先上位機將第一幀無人機目標左上角坐標和尺寸通過串口發(fā)給FPGA,對一幀圖像灰度化之后的像素點個數進行計數,便于確定目標區(qū)域的像素點;進而FPGA根據得到的目標位置將灰度化之后的目標區(qū)域圖像數據進行保存,考慮后期需要將儲存之后的模板圖像數據反復調用,用于后期的相關度計算;最后選擇將灰度化之后的目標模板灰度數據保存至雙端口RAM中。
采用解碼芯片輸出的視頻時鐘作為RAM的輸入時鐘,將目標區(qū)域灰度8位數據存儲到RAM中,容量選用10 240×8 bit,采用PLL產生的200 MHz時鐘作為輸出時鐘,使后期數據計算時間更少。
1.4.2 搜索范圍的存儲
在無人機跟蹤過程中,需要在一幀圖像找到目標,考慮到一幀圖像數據過多,不易保存且算法運行時間較長,本文采取一種小范圍搜索方式,搜索范圍過大會使運算時間變長,不利于實時性跟蹤;搜索范圍過小,會導致當無人機飛行速度過快時,下一幀無人機不在搜索范圍內,容易丟失目標,因此采用以目標為中心,用無人機尺寸與搜索區(qū)域尺寸按照1∶1.5確定搜索區(qū)域尺寸。首先以上次目標坐標為中心,進而找到上次目標附近的范圍區(qū)域,最后將范圍內灰度化后的數據保存至另一個雙端口RAM中,方便后續(xù)相關度計算。
同樣,采用解碼芯片輸出的視頻時鐘作為RAM的輸入時鐘,將目標區(qū)域灰度8位數據存儲到RAM中,容量選用20 480×8 bit,采用PLL產生的200 MHz時鐘作為輸出時鐘,使后期數據計算時間更少。
搜索區(qū)域與目標模板區(qū)域對比圖如圖3所示。
圖3 搜索區(qū)域與目標模板對比圖Fig.3 Comparison of search area with target template
檢測跟蹤模塊是從每幀搜索區(qū)域內找到與目標模板相關度最高的區(qū)域。首先在搜索范圍內找尋與目標模板同樣大小的區(qū)域,進而與目標模板像素數據進行相關度計算,采用的方法是將模板中每個像素點的灰度值與同樣大小的搜索區(qū)域內對應點的像素灰度值差的絕對值進行求和;然后在搜索范圍進行遍歷,遍歷完成之后,找到差的絕對值和是最小的值,將最小值的搜索區(qū)域表示為目標,則判斷該區(qū)域為目標區(qū)域;最后返回目標坐標左上角坐標用作確定下一幀的搜索范圍。同時將目標左上角坐標通過串口發(fā)送給上位機進行準確度計算。假設模板和對應同樣大小搜索區(qū)域像素的灰度值分別記為I(P i)和I′(Pi),像素灰度差值表示為e i,則像素灰度差絕對值可表示為式(3)。
假設目標模板有n個像素點,通過計算得到對應n個像素灰度值差的絕對值之和記為e,計算方法如式(4)所示。
根據FPGA的并行運算特點,FPGA同時進行灰度處理,存儲目標模板數據及其搜索區(qū)域數據,也可以同時進行相關度計算,大大減少了數據處理的總時間,有較好的實時性。
本文采取的遍歷方式是從搜索區(qū)域左上角開始,從左向右、從上至下的遍歷方式。為了減少遍歷帶來的時間過長問題,遍歷方式從左向右,采用每次遍歷向右移動2個像素點,一行遍歷結束后,遍歷向下移動2個像素點,這樣在保證準確度的情況下,數據處理時間僅為之前的1/4,使目標像素點個數在10 000以內,在一幀圖像跟蹤處理時間保證在16 ms之內,在實時性方面有比較理想的跟蹤效果。
在無人機跟蹤過程中,考慮到其背景復雜干擾多,光線、姿態(tài)變化和背景也處于不斷變化之中,導致準確度降低的問題,本文采取一種自適應目標模板更新方式。
考慮到在各種復雜環(huán)境下導致的跟蹤準確度降低的問題,及時地更新目標模板中的數據可以使其在后續(xù)的跟蹤中更加準確。當遍歷之后得到的最小e值(差的絕對值之和)大于一定閾值時,即跟蹤得到的目標區(qū)域與模板數據相差較大,表明該模板可能不再適用,需要及時更新模板。
該系統將每一幀跟蹤得到的目標區(qū)域的左上角坐標進行保存,連續(xù)保存5幀目標坐標數據,當需要更新模板時,產生更新模板請求信號,即將保存的5次目標坐標進行加權處理得到一個目標坐標的值,即為最接近真實目標的坐標;然后在搜索區(qū)域內找到對應計算得到的目標區(qū)域,讀取該區(qū)域的像素灰度數據,并寫入目標區(qū)域的雙端口RAM中,實現自適應目標模板更新,模板數據的及時更新可以提高后面的跟蹤準確度。其中更新目標模板的坐標計算方法如式(5)所示。
式中,P1(x1,y1)、P2(x2,y2)、P3(x3,y3)、P4(x4,y4)、P5(x5,y5)分別表示過去第1~5幀的目標左上角坐標,P(x,y)表示通過計算得到目標左上角坐標。從式(5)可以看出,過去連續(xù)5幀的目標坐標乘對應的權值之后,將得到的值相加,再除以所有的權值之和得到的就是預測目標左上角坐標。其中越靠近第一幀的目標坐標乘的權值越大,反之,權值越小,這樣可以減少多幀前目標坐標帶來的影響,這樣計算得到的預測目標坐標也更加準確。通過ILA(在線邏輯儀)采集到跟蹤過程中自適應模板更新次數的波形圖如圖4所示。
圖4 自適應模板更新ILA波形圖Fig.4 ILA waveform diagram updated by adaptive template
為了驗證本文方法的準確性和有效性,本文采用Vivado 2019.1進行程序編寫,選擇中科芯杯FPGA跟蹤器測試軟件作為上位機,采用Xilinx Artix-7 XC7A35T作為控制器,測試儀器如圖5所示。用于測試的是4個不同場景的1 280×720@50 Hz視頻。
圖5 測試儀器Fig.5 Test instrument
選用跟蹤重疊率作為算法性能評估標準,跟蹤重疊率定義為實際目標區(qū)域與跟蹤結果區(qū)域的重疊區(qū)域與實際目標區(qū)域的比值乘以100%。
為了更好體現跟蹤算法的性能,選擇4個不同場景作為測試視頻,分別是視頻1無人機在飛行過程中發(fā)生姿態(tài)變化,視頻2無人機背景復雜多變,視頻3光線變化明顯且無人機移動較快,視頻4無人機距離較遠導致像素很少,跟蹤效果如圖6所示。跟蹤重疊率實時波形圖如圖7所示,可以看出視頻1、視頻2、視頻4沒有出現跟丟的情況,視頻3出現跟丟幾幀,但后來又重新捕捉目標,從4個測試視頻實時重疊率可以看出該算法跟蹤重疊率基本達到90%。表1所示是各測試視頻的平均重疊率及目標所占像素個數,可以看出該算法對視頻1跟蹤平均重疊率可以達到98.696%,說明該算法對姿態(tài)變化跟蹤效果較好;對視頻2跟蹤平均重疊率可以達到95.053%,在經過吊塔時,重疊率受到影響降到70%左右;視頻3跟蹤平均重疊率是97.049%;視頻4跟蹤平均重疊率是96.852%,滿足準確度要求。視頻1和視頻3目標像素較多,因此在跟蹤重疊率計算時,重疊率要高一點,而視頻2和視頻4目標像素較少,導致計算重疊率時分母較小,進而重疊率曲線波動較明顯。
圖6 不同視頻的跟蹤效果Fig.6 Tracking effects of different videos
表1 不同視頻的跟蹤重疊率Table 1 Tracking overlap rates of different videos
結合圖6和圖7對跟蹤效果進行分析如下。
(1)目標姿態(tài)變化:圖6(a)中第529幀無人機改變姿態(tài)飛行,自適用更新模板發(fā)送請求信號,使模板更新為姿態(tài)變化后的數據,在第631幀無人機以改變的姿態(tài)經過干擾背景,從圖7(a)可以看到,跟蹤重疊率曲線沒有出現大的波動,跟蹤效果很好。
(2)背景復雜多變:圖6(b)中在第172幀和251幀無人機經過較為復雜的塔吊,從圖7(b)重疊率波形圖可以看出,在172幀和251幀出現了波動,但重疊率一直在60%以上,沒有出現跟丟的情況,說明在復雜情況下,通過自適用更新模板方式使目標跟蹤效果較理想。
(3)光線變化明顯,無人機移動較快:圖6(c)中在第121幀無人機發(fā)生快速移動,在第121~122幀移動了32個像素點,從圖7(c)中可以看出跟蹤重疊率沒有出現較大改變,穩(wěn)定在95%以上,在第541幀從圖6(c)可以看到光線發(fā)生了明顯改變,但從圖7(c)中重疊率得到光線對重疊率會造成影響,但會快速重新捕捉目標,本文算法在跟蹤此類情況依然有較好效果。
(4)目標較遠:圖6(d)中無人機距拍攝距離較遠,導致無人機目標在視頻中的像素數很少,表1所示視頻4無人機在畫面尺寸是40×20像素點,圖7(d)中第275幀小目標經過背景復雜的場景時,圖7(d)顯示重疊率仍在90%以上,本文算法對此類情況的跟蹤效果很理想。
圖7 不同視頻的跟蹤重疊率波形圖Fig.7 Tracking overlap rate waveform of different videos
評判FPGA算法的好與壞,其中一個關鍵指標就是邏輯資源耗費情況,本系統選用Xilinx Artix-7 XC7A35T作為控制器,其主要資源使用情況如表2所示。將該計算方法代碼綜合成電路,該系統輸入時鐘為50 MHz,通過PLL產生200 MHz時鐘提供給圖像數據處理,目標模板分配10 240字節(jié)儲存模板數據到雙口RAM中,每個數據8 bit。搜索范圍分配20 480字節(jié)儲存到雙端口RAM中,每個數據寬度為8 bit。從表2中可以看出查找表(LUT)資源消耗率很少,消耗總資源的11.12%,而嵌入式塊(BRAM)消耗率在16%,該方法在雙端口RAM消耗方面也使用很少,總體來說,該方法占用FPGA內部資源較少。
表2 FPGA資源利用情況Table 2 FPGA resource utilization
各項場景測試中,本文算法跟蹤一幀耗時在20 ms以內,滿足跟蹤實時性要求,消耗FPGA內部資源較少,同時通過自適用目標更新方式在跟蹤飛行姿態(tài)變化、背景復雜、飛行速度快、目標小、光線明顯變化情況下,跟蹤平均重疊率均可達到95%以上,滿足絕大多數的跟蹤要求。
本文目標跟蹤算法基于FPGA平臺開發(fā),提出一種有效的目標跟蹤算法。本文首先將RGB數據流進行灰度轉換并保存搜索區(qū)域與模板數據,然后在搜索范圍進行遍歷,找尋與目標模型相似度最高的圖像,算法的計算量較小,加上FPGA的并行處理,使識別速度更快;提出一種自適應更新模板方法,在跟蹤背景復雜、光線變化等情況下,有較理想的跟蹤效果。算法分別在飛行姿態(tài)變化、背景復雜、飛行速度快、目標小、光線明顯變化情況下進行測試,測試結果顯示跟蹤速度均在50 frame/s以上,具有較好的實時性;在跟蹤重疊率上也都在95%以上,有較好的跟蹤準確度。但本文方法對有物體遮擋情況不能勝任,且跟蹤之前先要獲取第一幀的目標位置,才能將目標模板保存用于后續(xù)跟蹤。