程子一,劉志林
哈爾濱工程大學(xué) 自動化學(xué)院,黑龍江 哈爾濱 150001
目標(biāo)跟蹤一直是計算機視覺中的經(jīng)典問題,它廣泛應(yīng)用于自動駕駛、人機交互和交通監(jiān)控等領(lǐng)域[1-3]。目標(biāo)跟蹤[4]要求對輸入的圖像序列準(zhǔn)確地標(biāo)識出目標(biāo)位置和大小等信息。Bolme等[5]首次將相關(guān)濾波思想引入到目標(biāo)跟蹤,提出了基于誤差最小二乘[6]的MOSSE濾波器跟蹤。Zhang等[7]提出了時空上下文跟蹤(spatio-temporal context,STC)算法,利用深度時空上下文信息,把背景融入到卷積濾波器去訓(xùn)練,具有一定的抗遮擋性。Danelljan等[8]提出了自適應(yīng)的顏色屬性(color name,CN),他將顏色的屬性集成到(circulant structure of tracking-by-detection with kernels,CSK)跟蹤器上,對形變有較好的自適應(yīng)性。Henriques等[9]改進CSK算法,提出KCF算法[10-13],采用梯度直方圖(histogram of oriented gradient,HOG)[14]特征,相比于灰度特征具有更好的跟蹤性能。
本文在KCF算法的基礎(chǔ)上,加入尺度框與目標(biāo)跟蹤質(zhì)量檢測,并應(yīng)用到自航模的動態(tài)目標(biāo)跟蹤上。在實驗中將改進的KCF算法與原始KCF算法進行對比,驗證了改進算法的優(yōu)缺點。
1)構(gòu)造樣本
設(shè)x=[x1,x2,…,xn]為基礎(chǔ)樣本,通過循環(huán)采樣得到樣本矩陣:
由文獻[6]可知循環(huán)矩陣可以由離散傅里葉變換進行對角化:
(1)
式中:^為離散傅里葉變換,F(xiàn)為離散傅里葉矩陣。
2)訓(xùn)練樣本
KCF算法引入核函數(shù)來解決線性不可分的問題,提高了目標(biāo)識別度,并用嶺回歸訓(xùn)練分類器:
(2)
式中:f(xi)為樣本xi的分類值,αi為待定的分類系數(shù),φ(x)為核函數(shù)對應(yīng)的映射函數(shù),λ為正則化系數(shù),y為樣本的標(biāo)簽矩陣,式(2)為嶺回歸目標(biāo)函數(shù)。解得
α=(K+λI)-1y
其中K=C(kxx),同式(1)的性質(zhì)可對α進行快速地計算:
3)檢測目標(biāo)
當(dāng)下一幀圖像到來時,以目標(biāo)框位置的圖像作循環(huán)采樣,獲得檢測樣本集z,則目標(biāo)的位置響應(yīng)公式如式(3)。
(3)
式中k(z,xi)為核函數(shù)。設(shè)Kz為檢測樣本和訓(xùn)練樣本的核矩陣,由文獻[11]可知Kz為循環(huán)矩陣,令KZ=C(kxz),根據(jù)循環(huán)矩陣性質(zhì)并對其傅里葉對角化得
式中Θ表示元素相乘。通過計算
maxf(z)=f(zt)
則樣本zt(zt∈z)的移位坐標(biāo)為目標(biāo)框的移動坐標(biāo),即目標(biāo)新位置。
4)更新分類器
αn=(1-β)αn-1+βnewαn
式中:β為更新系數(shù),αn和αn-1表示當(dāng)前幀與上一幀的分類系數(shù),xn和xn-1表示當(dāng)前幀與上一幀獲得的x。
當(dāng)攝像頭與目標(biāo)距離的改變時,目標(biāo)在圖像中呈現(xiàn)的大小也將改變,為了使目標(biāo)跟蹤具有尺度變換穩(wěn)定性,我們在檢測到目標(biāo)的新位置后,會更換不同尺度的2個目標(biāo)框去重新檢測目標(biāo)位置,比較3次檢測的目標(biāo)響應(yīng)最大值f(zt),取最大的一個作為目標(biāo)新的位置和目標(biāo)框大小。
具體目標(biāo)框的變換大小比例為原始框的1.1倍和0.9倍,其效果如圖1~3所示。
圖1 目標(biāo)在遠(yuǎn)距離
圖2 目標(biāo)在初始距離
圖3 目標(biāo)在近距離
由1.1節(jié)可知,KCF算法是在檢測樣本中選取f(z)最大的點作為目標(biāo)新的坐標(biāo),那么在運動目標(biāo)不是特別快的時候,通過實驗發(fā)現(xiàn),在目標(biāo)被遮擋的過程中,f(zt)出現(xiàn)了如下變化:
首先,截取此過程視頻部分圖片,如圖4~6。
圖4 目標(biāo)遮擋24幀畫面
圖5 目標(biāo)遮擋40幀畫面
圖6 目標(biāo)遮擋64幀畫面
從40幀開始目標(biāo)被水桶遮住,在這之前,KCF算法還是能夠準(zhǔn)確地找到目標(biāo)的位置。然而,目標(biāo)的f(zt)卻差別很大。圖4~6對應(yīng)的f(zt)=0.84、0.24和0.66。通過記錄此過程的f(zt),繪制出了如圖7所示曲線。
圖7 遮擋過程的響應(yīng)曲線
從圖7可以發(fā)現(xiàn),在目標(biāo)沒有被遮擋、也沒有干擾的時候,目標(biāo)的跟蹤狀態(tài)較好,f(zt)始終在0.7以上;在目標(biāo)被遮擋的第40幀的時候,目標(biāo)的f(zt)出現(xiàn)了大幅下降,通過不斷更新的模板和參數(shù),它開始學(xué)習(xí)了錯誤的目標(biāo),如圖3第110幀畫面,f(zt)又回到了0.65以上,對遮擋物進行跟蹤,從而丟失原先目標(biāo)。因此,在f(zt)出現(xiàn)急劇下降時,可以認(rèn)為目標(biāo)被障礙物遮擋或者目標(biāo)離開視野,此時應(yīng)該中斷目標(biāo)的繼續(xù)跟蹤,保護之前的參數(shù)不再繼續(xù)修改。
本設(shè)計采用的目標(biāo)遮擋的判定準(zhǔn)則為:
(4)
式中:u為丟失目標(biāo)以前n幀畫面的最大響應(yīng)值f(zt)平均值;σ表示標(biāo)準(zhǔn)差;本設(shè)計的n為30時效果良好;Vp表示當(dāng)前幀的響應(yīng)值,當(dāng)它比平均值還小λσ時,則認(rèn)為目標(biāo)丟失。
通過式(4)可知,如果λ設(shè)置得過大,那么對于目標(biāo)丟失的檢測則更加苛刻,在部分遮擋的情況下可能發(fā)生漏檢;同理,如果設(shè)置得過小,容易造成誤測,在船舶抖動或者目標(biāo)形變的情況下,很有可能發(fā)生誤檢。
為了進一步地確定λ的值,進行了如下試驗:對不同值的λ,去檢驗?zāi)繕?biāo)遮擋檢測效果,在滿足式(4)時停止跟蹤,也不再畫框,并在水池對目標(biāo)船進行了試驗,圖8為框取目標(biāo)圖,圖9為目標(biāo)框消失圖。
圖8 框取目標(biāo)
圖9 目標(biāo)框消失
首先,如圖8所示,先在水面上框取了目標(biāo)船(此時λ=2),然后讓目標(biāo)航行到障礙物后。目標(biāo)船被遮擋時,目標(biāo)框消失,λ=2可以檢測到目標(biāo)的被遮擋,此過程的f(zt)曲線如圖10所示。
圖10 目標(biāo)被遮擋實驗響應(yīng)曲線
然而,當(dāng)目標(biāo)船轉(zhuǎn)向發(fā)生形變時,程序也判定為目標(biāo)丟失,目標(biāo)框消失,即發(fā)生了誤檢。其f(zt)曲線如圖11所示。
圖11 目標(biāo)船轉(zhuǎn)向?qū)嶒烅憫?yīng)曲線
從圖11可以看出,曲線雖然發(fā)生了下降,但是沒有在目標(biāo)遮擋情況下降的幅度大,所以無法滿足式(4),λ=2顯然過小,無法滿足設(shè)計要求。
取λ=5,再次進行上述試驗,具體如圖12所示。
圖12 目標(biāo)被遮擋實驗
在目標(biāo)船被遮擋的時候,目標(biāo)框沒有消失,此時為漏檢,它將會錯誤學(xué)習(xí)到障礙物信息。繪制f(zt)
曲線如圖13所示。
圖13 圖(12)對應(yīng)響應(yīng)曲線(λ=5)
從圖13就可以發(fā)現(xiàn),目標(biāo)船被遮擋時,f(zt)發(fā)生了明顯的下降,由于λ=5條件過于苛刻,算法無法判定為遮擋,所以無法滿足設(shè)計要求。
通過多次試驗,并選取了巖石、木樁、灌木叢、塑料瓶等20個障礙物對不同λ值進行試驗。繪制檢測率與誤檢率曲線,如圖14所示。
圖14 檢測率與誤檢率曲線
圖14中實線曲線表示誤檢率,即沒有發(fā)生遮擋而被判定為遮擋;虛線曲線表示檢測率,即發(fā)生了遮擋而被成功檢測到了。顯然,對于目標(biāo)跟蹤,誤檢與檢測失敗兩者的代價是不同的:誤檢時,參數(shù)不再更新,仍然可以利用此參數(shù)檢測出目標(biāo);而檢測失敗時,參數(shù)依照遮擋物更新,則不會再檢測出目標(biāo)。
所以,本設(shè)計必須保證檢測率100%,由圖14可知,在λ=2.4時檢測率仍然是100%,但是為了保留一定余量,本設(shè)計取λ=2.2。
在檢測到目標(biāo)遮擋后,停止更新分類器參數(shù),然后根據(jù)上一幀目標(biāo)框的高度,在圖中構(gòu)建一個掃描通道,如圖15。在這個通道中,以原目標(biāo)框尺寸,利用滑窗法,滑動步長為目標(biāo)框整數(shù)倍寬度像素,如式(3)繼續(xù)計算目標(biāo)框中的響應(yīng)值f(z),當(dāng)不滿足式(4)時即認(rèn)為找回目標(biāo),并繼續(xù)進行跟蹤。
圖15 目標(biāo)掃描通道
綜上所述,改進后算法流程如圖16~17所示。
圖16 KCF算法流程
圖17 改進KCF算法流程
本設(shè)計假定為恒速運動,所以只要進行舵角的控制即可達到航向的控制。在航速一定條件下,舵角δ與航向變化速度和航向變化加速度的關(guān)系為
(5)
式中r為航向角速度。對式(5)進行簡化,得出一階KT方程[15],即
針對本設(shè)計的自航模,通過船舶回轉(zhuǎn)試驗和“Z”型試驗,計算出了自航模的KT參數(shù)分別為:K=0.584 6,T=0.134 8,航速u=0.25 m/s。自航模的控制模型傳遞函數(shù)為
設(shè)計PID航向控制器Kp=10.35,Ki=0.89,Kd=0.25對自航模進行航向控制。攝像頭傳回的圖像為寬度W=640 pix的畫面。那么
式中:p為在圖像上目標(biāo)中心位置像素橫坐標(biāo),k=9.143為比例系數(shù),a為航向偏差角,當(dāng)a為正時表示目標(biāo)在目標(biāo)在自航模的右前方。
當(dāng)滿足式(4)目標(biāo)丟失時:
1)若目標(biāo)丟失位置在圖像邊緣,則為目標(biāo)脫離視野,自航模保持轉(zhuǎn)向舵角,直至找回目標(biāo);
2)若目標(biāo)丟失位置不在圖像邊緣,則認(rèn)為目標(biāo)被遮擋,此時保持航向不變,直至找回目標(biāo)。
為驗證本文改進算法的穩(wěn)定性,本文選取了VIVID Tracking Evaluation Web Site上的目標(biāo)跟蹤圖片序列作為驗證,λ=2.2,n=30,與本設(shè)計保持一致,結(jié)果如表1。
表1 改進算法對一般視頻實驗
目標(biāo)遮擋檢測率為88.8%,目標(biāo)遮擋后找回率為44.4%;對于目標(biāo)的遮擋,KCF算法全部跟蹤失敗。
由于場地等條件限制,本實驗在一個4 m×4 m的水池進行,自航模初始為靜止?fàn)顟B(tài),位于水池的一角,以另一艘自航模為目標(biāo),開始跟蹤時立即加速到最大速度(u=0.25 m/s)并勻速航行。通過在水池正上方安裝的攝像頭,觀察自航模跟蹤目標(biāo)情況,并繪制了如下的航跡。試驗開始時,先使目標(biāo)船處于自航模視野邊緣,手動操作目標(biāo)船向另一個方向航行。
實驗一目標(biāo)移動且脫離視野范圍,無障礙物進行跟蹤,比較KCF算法與本文算法,如圖18、19所示。
圖18 目標(biāo)脫離視野實驗(KCF)
圖19 目標(biāo)脫離視野實驗(改進KCF)
在目標(biāo)移動自航模開始前進并向目標(biāo)方向轉(zhuǎn)舵,目標(biāo)過快脫離視野后,KCF算法的自航模以背景為目標(biāo)跟蹤,幾乎不再進行轉(zhuǎn)向,如圖18;本文算法的自航模則向目標(biāo)船消失方向最大限度轉(zhuǎn)舵,在目標(biāo)重新出現(xiàn)在視野時,搜索到了目標(biāo)并重新跟蹤,如圖19。
實驗二目標(biāo)移動,有障礙物遮擋進行跟蹤,比較KCF算法與本文算法,如圖20、21所示。
圖20 目標(biāo)經(jīng)過障礙物實驗(KCF)
圖21 目標(biāo)經(jīng)過障礙物實驗(改進KCF)
開始時自航模朝目標(biāo)前進,目標(biāo)經(jīng)過障礙物時,KCF算法自航模則以障礙物為新目標(biāo)進行跟蹤,如圖20;本文算法自航模則識別出目標(biāo)丟失,繼續(xù)轉(zhuǎn)向,并重新找回目標(biāo)繼續(xù)跟蹤,如圖21。
1)本文改進的算法,在一般視頻的目標(biāo)遮擋檢測效果良好,但是為了節(jié)約計算資源,目標(biāo)找回只是在水平方向上進行搜尋,所以無法在一般視頻中的目標(biāo)找回取得較好結(jié)果。讀者可根據(jù)實際情況增加全圖的目標(biāo)搜索;也可根據(jù)實際跟蹤目標(biāo)與機器計算速度,調(diào)整式(4)的參數(shù)。
2)本設(shè)計在KCF算法上進行改進,針對目標(biāo)跟蹤效果不佳時進行及時停止跟蹤,實驗表明:在目標(biāo)被遮擋或者脫離視野后,仍然能找回目標(biāo)繼續(xù)跟蹤。而原始KCF算法由于學(xué)習(xí)了錯誤背景,無法繼續(xù)跟蹤。
3)讀者可根據(jù)實際情況增加全圖掃描窗口進行目標(biāo)搜索;也可根據(jù)實際跟蹤目標(biāo)與機器計算速度,調(diào)整式(4)的參數(shù),以取得更好的跟蹤效果與穩(wěn)定性。