尹莉莙,蔣 崢,劉 斌
(武漢科技大學(xué)冶金自動化與檢測技術(shù)教育部工程研究中心,湖北 武漢 430081)
視覺跟蹤是機器視覺領(lǐng)域中的一個重要課題,它的應(yīng)用領(lǐng)域非常廣泛。給定視頻中目標(biāo)的初始狀態(tài),視覺跟蹤的目的是跟蹤目標(biāo)在后續(xù)幀中的狀態(tài)。盡管視覺跟蹤研究已經(jīng)取得了很大的進(jìn)展[1],但仍然有很多問題得不到很好的解決。不同的光照、遮擋、姿態(tài)變化、變形、快速運動、旋轉(zhuǎn)、目標(biāo)尺度發(fā)生變化等因素都會提升視覺跟蹤的難度。視覺跟蹤算法目前主要有生成型跟蹤算法和判別型跟蹤算法[2]。生成型跟蹤算法通過對目標(biāo)區(qū)域進(jìn)行建模,來找與模型區(qū)域最相似的區(qū)域作為預(yù)測位置,其中包括Meanshift跟蹤算法[3]、稀疏表示[4]、增量子空間學(xué)習(xí)[5],粒子濾波跟蹤算法[6]等。判別型方法建立了一個區(qū)分目標(biāo)與背景的模型。判別型跟蹤算法包括在線增強[7]、多實例學(xué)習(xí)[8]、Struct算法[9]、壓縮跟蹤算法[10]等。
TLD是一個同時包括了跟蹤模塊,檢測模塊和學(xué)習(xí)模塊的長時間目標(biāo)跟蹤算法。跟蹤模塊采用金字塔LK光流法,檢測模塊采用級聯(lián)分類器,學(xué)習(xí)模塊采用PN學(xué)習(xí)模塊。跟蹤模塊和檢測模塊相互獨立運行,學(xué)習(xí)模塊結(jié)合跟蹤模塊和檢測模塊的結(jié)果來預(yù)測檢測模塊的錯誤,并對訓(xùn)練樣本進(jìn)行校正。然而,該算法存在一些不足。金字塔LK光流法在物體發(fā)生光照變化,遮擋,旋轉(zhuǎn)時就會失效;檢測模塊在第一幀時就產(chǎn)生了所有可能的掃描窗口,這些掃描窗口中包含了大量的無效窗口;學(xué)習(xí)模塊每一次都是對第一幀產(chǎn)生的所有可能的掃描窗口進(jìn)行處理,耗時巨大。為了減少初始化的時間,文獻(xiàn)[11]應(yīng)用SIFT算法識別出最佳匹配區(qū)域作為 TLD的初始跟蹤區(qū)域。為了減少檢測模塊的耗時,文獻(xiàn)[12]將 Kalman濾波器應(yīng)用于目標(biāo)檢測中。在發(fā)生嚴(yán)重遮擋,運動模糊情況下,文獻(xiàn)[13]提出了用卷積神經(jīng)網(wǎng)絡(luò)優(yōu)化TLD算法。鑒于檢測模塊第一個階段方差分類器不能有效過濾背景區(qū)域,文獻(xiàn)[14]將前景檢測分類算法用于檢測模塊。
本文針對金字塔LK光流法跟蹤器在復(fù)雜背景下容易出現(xiàn)跟蹤漂移的現(xiàn)象,提出了用壓縮跟蹤器替換原有的金字塔LK光流法跟蹤器;針對檢測模塊每次檢測時都需要處理大量無效窗口,提出了一種檢測區(qū)域動態(tài)更新的方法;學(xué)習(xí)模塊也在該檢測區(qū)域動態(tài)更新的區(qū)域中來進(jìn)行學(xué)習(xí),可以減少學(xué)習(xí)模塊的耗時。
TLD算法[15]主要包括跟蹤器(tracker),檢測器(detector)和機器學(xué)習(xí)(learning)三個基本模塊。TLD算法的基本框架如下圖1所示。
TLD的跟蹤器采用金字塔LK光流法[16]。在每一幀跟蹤時,在目標(biāo)模型區(qū)域選取一個10×10大小的網(wǎng)格,網(wǎng)格內(nèi)均勻分布著像素點,這些像素點作為跟蹤的特征點。在t幀時,運用LK光流法跟蹤這些特征點到t+1幀。根據(jù)t+1幀特征點的位置,反向利用LK光流法得到這些特征點的后向跟蹤軌跡。這樣每個特征點都會有前向和后向兩個位置,這兩個位置的歐式距離作為每個特征點的前后向誤差值(FB error)。計算每個特征點在兩幀之間的歸一化互相關(guān)匹配值(NCC)。同時小于FB error和NCC中值的特征點作為跟蹤成功的點。
TLD的檢測器由方差分類器,集合分類器和最近鄰分類器構(gòu)成。方差分類器去除掉所有灰度值方差小于被跟蹤圖相框灰度值方差50%的掃描窗口,剩下的掃描窗口進(jìn)入集合分類器。集合分類器包括10個基本分類器。每一個基本分類器i對掃描窗口進(jìn)行像素比較,得到一個包含一系列后驗概率Pi(y|x)的二值編碼x,其中y∈{0,1}。將上面得到的后驗概率取平均值,如果大于0.5,那么掃描窗口就通過集合分類器。經(jīng)過集合分類器篩選的掃描窗口進(jìn)入最近鄰分類器,將掃描窗口與樣本庫中的樣本用NCC計算相似度,相似度大于最近鄰分類器閾值的掃描窗口通過最近鄰分類器。
學(xué)習(xí)模塊采用PN學(xué)習(xí)[17]。學(xué)習(xí)模塊在第一幀初始化檢測器,并在后續(xù)的運行中對檢測器的錯誤進(jìn)行校正。PN學(xué)習(xí)包括P專家和N專家。P專家用來發(fā)現(xiàn)錯誤的負(fù)樣本,把它標(biāo)記為正樣本并添加到樣本集中。N專家用來發(fā)現(xiàn)錯誤的正樣本,把它標(biāo)記為負(fù)樣本并添加到樣本集中。
金字塔LK光流法跟蹤目標(biāo)模型區(qū)域內(nèi)10×10大小的網(wǎng)格內(nèi)的像素點,這些像素點是均勻分布的,作為跟蹤的特征點。在發(fā)生光照變化,尺度變化,姿態(tài)變化,旋轉(zhuǎn),快速移動時,通過NCC和FB error可能濾除掉那些代表目標(biāo)模型的有效特征點。剩下的特征點可能與背景中相似的點錯誤配對或者無法找到對應(yīng)的配對點,出現(xiàn)跟蹤漂移現(xiàn)象。本文選用壓縮跟蹤器替代金字塔LK光流法跟蹤器。檢測模塊在每一次檢測時都要和第一幀產(chǎn)生的所有掃描窗口進(jìn)行比較,這些掃描窗口中包含了大量的無效的掃描窗口。這里提出了一種檢測區(qū)域動態(tài)更新的方法。學(xué)習(xí)模塊也在檢測區(qū)域動態(tài)更新的區(qū)域中進(jìn)行學(xué)習(xí),有效減少了學(xué)習(xí)模塊的耗時。
壓縮跟蹤算法對比金字塔LK光流法有如下優(yōu)勢:①它對姿態(tài)和光照變化具有健壯性,因為目標(biāo)的外觀模型通過隨機投影矩陣來構(gòu)造并且采用在線更新的分類器來區(qū)分目標(biāo)和背景;②它能夠較好的處理遮擋,因為它的外觀模型是基于局部特征的;③它能夠較好的處理非剛性目標(biāo)的姿態(tài)變化,因為它的外觀模型是從多尺度空間中隨機選取,這種特征對非剛性目標(biāo)外形的變化是不敏感的;④它對平面旋轉(zhuǎn)有一定的抵抗性,在發(fā)生平面旋轉(zhuǎn)時,它在跟蹤過程中采用分類器和多尺度圖像特征來處理目標(biāo)位置的模糊性。
壓縮跟蹤算法在t幀時從接近當(dāng)前目標(biāo)位置附近采集一些樣本,這些樣本經(jīng)過多尺度變換,稀疏測量矩陣,將得到的壓縮特征送入貝葉斯分類器中,分類分?jǐn)?shù)最大的圖片即認(rèn)為是目標(biāo)。在t+1幀時,在距離目標(biāo)很近的位置產(chǎn)生正樣本,離目標(biāo)很遠(yuǎn)的位置產(chǎn)生負(fù)樣本,這些正負(fù)樣本經(jīng)過多尺度變換,稀疏測量矩陣,將得到的壓縮特征用于更新貝葉斯分類器。壓縮跟蹤整體流程示意圖如圖2,圖3所示。
圖2 在第t幀更新分類器
圖3 在第t+1幀確定目標(biāo)位置
壓縮跟蹤算法主要步驟如下:
1)多尺度變換
對于每一個樣本Z∈Rw×h(R表示實數(shù)集,w和h分別表示樣本圖像的寬度和高度)分別與一組多尺度矩形濾波器{h1,1,…,hw,h}進(jìn)行卷積,獲得多尺度的樣本特征向量。每一種多尺度矩形濾波器的定義如下:
(1)
2)稀疏測量矩陣生成
壓縮感知理論指出通過滿足約束等距性(RIP)準(zhǔn)則的稀疏測量矩陣[18],多尺度圖像特征可以投影到低維圖像空間。采用稀疏測量矩陣R=Rn×m,將數(shù)據(jù)從高維圖像空間x∈Rm投影到低維數(shù)據(jù)空間v∈Rn。
v=Rx
(2)
矩陣R中每個元素如下所示
(3)
3)樸素貝葉斯分類
提取的特征經(jīng)過貝葉斯分類器分類,分類公式為:
(4)
(5)
式(5)中的標(biāo)量參數(shù)通過下面的公式更新,如式(6)所示
(6)
這里增加了對壓縮跟蹤效果的評估,將壓縮跟蹤得到的跟蹤框與樣本庫中的樣本用NCC計算保守相似度,作為跟蹤器的保守相似度,用同樣的方法得到檢測器的保守相似度。在檢測器檢測到的掃描窗口中,尋找與跟蹤器跟蹤到的跟蹤框距離較遠(yuǎn)的類,且它的保守相似度比跟蹤器的要大,如果滿足以上條件的掃描窗口只有一個,就用該掃描窗口重新初始化跟蹤器,否則尋找距離跟蹤器預(yù)測到的跟蹤框很近的掃描窗口,這些掃描窗口與跟蹤器本身預(yù)測到的跟蹤框進(jìn)行坐標(biāo)與大小的平均,作為最終的目標(biāo)跟蹤框,其中跟蹤器的權(quán)值較大。
TLD檢測器通過掃描窗口對每個視頻進(jìn)行處理,每次掃描一個圖像塊,給出其中是否有待檢測目標(biāo)。這些掃描窗口在第一幀的時候就已經(jīng)產(chǎn)生好了,檢測模塊在每次確定目標(biāo)位置時都要和這約50000個掃描窗口進(jìn)行比較,耗時巨大[19-20]。本文提出了一種動態(tài)更新檢測區(qū)域的方法。
1)確定運動目標(biāo)的搜索半徑
在每一幀時,根據(jù)要跟蹤目標(biāo)的速度,來確定搜索半價r。具體的步驟如下:在每一幀時把TLD算法跟蹤到的目標(biāo)的位置存起來,在t幀的時候得到t-2幀到t-1幀的位移Δst-1。
前面5幀的平均速度作為t幀的速度
(7)
根據(jù)t幀的速度v來確定搜索半徑r
(8)
t是每一幀算法運行的時間,r的單位是像素,v的單位是像素/秒,t的單位是秒。r′和Δs1是根據(jù)選定的10個視頻設(shè)定的參數(shù)值。本文把每一幀的Δs1存入1.txt文檔中,根據(jù)1.txt中的數(shù)據(jù)選取Δs1為8.5,根據(jù)這10個視頻進(jìn)行反復(fù)實驗,選取r′為10。本文的r′和Δs1為參數(shù)值,根據(jù)不同的測試視頻可以進(jìn)行改變。
2)產(chǎn)生正樣本和負(fù)樣本
在t幀的時候,清理掉t-1幀產(chǎn)生的所有掃描窗口,以t-1幀跟蹤框為中心,根據(jù)歷史的速度來確定搜索半價r,根據(jù)搜索半徑r來產(chǎn)生新的掃描窗口。將所有產(chǎn)生的掃描窗口放入網(wǎng)格容器中,并求出這些掃描窗口與上一幀的跟蹤框的重疊度。根據(jù)重疊度對所有的掃描窗口進(jìn)行分類,產(chǎn)生好的掃描窗口和壞的掃描窗口,重疊度最大的掃描窗口歸一化為15*15像素的大小,作為最好的掃描窗口。根據(jù)最好的掃描窗口的積分圖計算出最好的掃描窗口的方差,方差的一半作為檢測模塊第一階段方差分類器的閾值。清理掉t-1幀產(chǎn)生的所有正樣本和負(fù)樣本。從產(chǎn)生的好的掃描窗口中選出10個重疊度最大的掃描窗口,對每一個掃描窗口進(jìn)行10次仿射性變換,產(chǎn)生了100個正樣本;根據(jù)最好的掃描窗口的方差對壞的掃描窗口進(jìn)行篩選,產(chǎn)生負(fù)樣本。
3)級聯(lián)分類器進(jìn)行分類。
將產(chǎn)生的負(fù)樣本歸一化為15*15像素的大小,作為標(biāo)準(zhǔn)的負(fù)樣本。將一半負(fù)樣本和100個正樣本用來訓(xùn)練集合分類器。另外一半負(fù)樣本和一半標(biāo)準(zhǔn)的負(fù)樣本用來評價集合分類器和最近鄰分類器的閾值。所有的掃描窗口經(jīng)過方差分類器(Cascsded classifier),集合分類器(Ensemble Classifier),最近鄰分類器(NN Classifier)來進(jìn)行篩選。只有通過了3個分類器的掃描窗口才被認(rèn)為是目標(biāo)。
針對Basketball這個視頻,進(jìn)行了原始TLD算法和改進(jìn)后的TLD算法進(jìn)入分類器的掃描窗口數(shù)量的比較。如圖4所示,橫坐標(biāo)表示視頻幀數(shù),縱坐標(biāo)表示進(jìn)入分類器的掃描窗口數(shù)量,縱坐標(biāo)選用對數(shù)來表示。可以看出,原始TLD每幀進(jìn)入分類器的掃描窗口數(shù)量為231526個,而改進(jìn)TLD每幀進(jìn)入分類器的掃描窗口數(shù)量大多小于1000個??梢钥闯鼋?jīng)過改進(jìn)后,進(jìn)入分類器的掃描窗口數(shù)量減少了,檢測模塊耗時減少了,檢測模塊的實時性提高了。
圖4 進(jìn)入分類器的掃描窗口數(shù)量
原本的學(xué)習(xí)模塊每一次都是對第一幀產(chǎn)生的所有可能的約5萬個掃描窗口進(jìn)行處理,耗時巨大。本文采用在動態(tài)更新的檢測區(qū)域中來進(jìn)行學(xué)習(xí)。在每一幀時,把經(jīng)過跟蹤器和檢測器綜合得到的跟蹤框作為最終的目標(biāo)跟蹤框,目標(biāo)跟蹤框同檢測器每一幀產(chǎn)生的掃描窗口計算重疊度,將重疊度最大的掃描窗口作為最好的掃描窗口,將該最好的掃描窗口的大小歸一化為15*15像素的大小,作為最好的樣本。篩選出檢測器檢測得到的檢測目標(biāo)同最終的目標(biāo)跟蹤框重疊度小于0.2的檢測目標(biāo),同最好的樣本一起作為最近鄰NN分類器的訓(xùn)練樣本。通過采用在動態(tài)更新的檢測區(qū)域內(nèi)進(jìn)行處理,減少了學(xué)習(xí)模塊的耗時。
改進(jìn)TLD算法的實現(xiàn)過程如下所示。
步驟1:讀取視頻文件,視頻相關(guān)文件中給出初始跟蹤框的大小,位置。
步驟2:初始化CT跟蹤器,完成TLD的初始化。
步驟3:第一幀時CT跟蹤器進(jìn)行跟蹤,檢測模塊在第一幀不進(jìn)行檢測,第一幀時跟蹤器的結(jié)果作為最終結(jié)果。
步驟4:CT跟蹤器在每一幀進(jìn)行跟蹤,并得到跟蹤器的保守相似度tconf,檢測模塊清理掉之前的掃描窗口,正樣本,負(fù)樣本。根據(jù)跟蹤目標(biāo)的速度,來確定搜索半價r。根據(jù)半價r產(chǎn)生新的掃描窗口,以新的掃描窗口為基礎(chǔ),生成新的正樣本和負(fù)樣本,訓(xùn)練集合分類器,檢測器對新的掃描窗口進(jìn)行檢測。
步驟5:根據(jù)跟蹤模塊的保守相似度tconf和檢測器的保守相似度dconf,綜合模塊得到目標(biāo)在下一幀中的位置。
步驟6:將綜合模塊得到的跟蹤框的位置傳給CT跟蹤器,進(jìn)行下一次的跟蹤。
步驟7:學(xué)習(xí)模塊根據(jù)綜合模塊傳進(jìn)來的跟蹤框,從檢測器產(chǎn)生的新的掃描窗口中找出重疊度最大的掃描窗口,將重疊度最大的掃描窗口的大小歸一化為15*15的大小,作為最好的樣本。最好的樣本同與最終的目標(biāo)跟蹤框重疊度小于0.2的檢測目標(biāo)一起作為最近鄰NN分類器的訓(xùn)練樣本。
步驟8:重復(fù)步驟4到7。
本文將改進(jìn)后的 TLD 算法與原始 TLD 算法進(jìn)行了比較。實驗中采用了10組視頻進(jìn)行測試,分別是TLD原作者實驗中使用到的數(shù)據(jù)集jumping,panda,以及OTB100里面的數(shù)據(jù)集包括Bolt2,Basketball,ClifBar,F(xiàn)aceOcc2,Tiger1,Coupon,Twinnings,Walking共10個視頻。這些場景包含了光照變化,尺度變換,遮擋、形變,運動模糊,快速移動,低分辨率,目標(biāo)的某些部分離開視圖,目標(biāo)在圖像平面外旋轉(zhuǎn),背景雜波,平面內(nèi)旋轉(zhuǎn),快速移動等情況,此外算法開發(fā)平臺為windows7,開發(fā)工具為 Visual Studio2010 和 OpenCV2.4.10,處理器為i5-7500,CPU為3.4GHz,內(nèi)存為4G。
在這里本文選取了Panda,Basketball,Bolt2,F(xiàn)aceOcc2,Tiger1這些視頻進(jìn)行定性分析。
1)Panda包含了目標(biāo)姿態(tài)變化,外形變化。開始的幾十幀里原始TLD和改進(jìn)TLD都可以跟蹤到。122幀時,目標(biāo)姿態(tài)發(fā)生了變化,金字塔LK光流法出現(xiàn)了錯誤的運動矢量場,原始TLD算法跟蹤錯誤,改進(jìn)TLD算法由于采用了對尺度和姿態(tài)變化具有一定健壯性的Haar-like特征,在姿態(tài)變化,外形變化下都可以跟蹤到。
2)Basketball包含相似目標(biāo)。15幀時,相似目標(biāo)出現(xiàn),金字塔LK光流法跟蹤特征點錯誤配對導(dǎo)致跟蹤失敗,而改進(jìn)后的TLD算法采用的壓縮跟蹤器的分類器是在線更新的,可以有效地區(qū)分目標(biāo)和背景。
3)Bolt2包含了非剛性目標(biāo),快速移動。開始的時候,運動員的四肢和軀干時刻發(fā)生著復(fù)雜的運動,原始TLD算法跟蹤錯誤。后來運動員快速奔跑,原始TLD算法跟蹤錯誤,而改進(jìn)TLD算法由于壓縮跟蹤算法的外觀模型是基于局部特征的,這種特征對非剛性目標(biāo)不敏感,對快速移動的處理能力強。
4)FaceOcc2包含了遮擋情況。在出現(xiàn)遮擋的情況下,金字塔LK光流法容易形成錯誤的運動矢量場,出現(xiàn)跟蹤漂移現(xiàn)象,而改進(jìn)的TLD算法采用了從多尺度空間隨機選擇的特征,這種特征對遮擋不太敏感。
5)Tiger1包含光照變化,旋轉(zhuǎn)。35幀時,目標(biāo)發(fā)生了光照變化,金字塔LK光流法受到光照的干擾,原始TLD算法跟蹤丟失,此后目標(biāo)出現(xiàn)了旋轉(zhuǎn),圖像中的像素點難以形成運動矢量場,原始TLD算法跟蹤丟失。而改進(jìn)TLD算法由于壓縮跟蹤采用分類器和區(qū)分特征來處理目標(biāo)位置的模糊性,在光照和平面旋轉(zhuǎn)情況下都可以跟蹤到。
綜上所述,改進(jìn)的TLD算法在目標(biāo)姿態(tài)變化,外形變化,快速移動,有相識目標(biāo)出現(xiàn),非剛性目標(biāo),遮擋,光照變化,旋轉(zhuǎn)的情況下效果都很好。圖(a)(b)(c)(d)(e)為原始TLD算法與改進(jìn)TLD算法跟蹤效果比較圖,其中紅色框是改進(jìn)TLD效果圖,白色框是原始TLD效果圖。
圖5 原始TLD算法與改進(jìn)TLD算法跟蹤效果比較圖
本文選用跟蹤成功率作為視頻目標(biāo)跟蹤結(jié)果的評價標(biāo)準(zhǔn),它是指成功跟蹤的幀數(shù)占總幀數(shù)的比例。原始TLD算法與改進(jìn)后算法跟蹤成功率的比較見表2,可以看出較原始算法相比改進(jìn)后算法跟蹤成功率得到了提高。原始TLD算法在選定的很多個測試視頻的后期檢測器沒有發(fā)揮作用,跟蹤失效。跟蹤速度代表的是整體的平均跟蹤速度,包含了跟蹤失效的幀數(shù)。選擇在跟蹤不失效的情況下比較算法的實時性。這里選取視頻每一幀的運行時間作為跟蹤實時性的評價標(biāo)準(zhǔn)。圖6顯示了對于Twinnings這個視頻原始TLD算法與改進(jìn)TLD算法每一幀運行時間的比較??梢钥闯鲈糡LD算法每一幀的運行時間大都在100ms到1000ms之間,而改進(jìn)TLD算法每一幀的運行時間在100ms以下。由于檢測模塊采用了動態(tài)更新的掃描區(qū)域,跟蹤實時性得到了提升。
表2 原算法與改進(jìn)算法跟蹤成功率比較
圖6 每一幀運行時間比較
本文的主要改進(jìn)如下:
1)對于原始的TLD中所采用的金字塔LK光流法做出改進(jìn),使用壓縮跟蹤器作為TLD的跟蹤器,有效解決了光流法無法有效跟蹤物體快速移動,遮擋,形態(tài)發(fā)生劇烈變化等問題,并且增加了對壓縮跟蹤器跟蹤效果的評估;
2)在每次檢測之前,根據(jù)目標(biāo)的歷史速度,設(shè)定了一個動態(tài)更新的檢測區(qū)域,減少了檢測模塊的耗時;
3)學(xué)習(xí)模塊每次都在動態(tài)更新的檢測區(qū)域中來進(jìn)行學(xué)習(xí),加快了學(xué)習(xí)模塊的速度。