尹莉莙,蔣 崢,劉 斌
(武漢科技大學冶金自動化與檢測技術教育部工程研究中心,湖北 武漢 430081)
視覺跟蹤是機器視覺領域中的一個重要課題,它的應用領域非常廣泛。給定視頻中目標的初始狀態,視覺跟蹤的目的是跟蹤目標在后續幀中的狀態。盡管視覺跟蹤研究已經取得了很大的進展[1],但仍然有很多問題得不到很好的解決。不同的光照、遮擋、姿態變化、變形、快速運動、旋轉、目標尺度發生變化等因素都會提升視覺跟蹤的難度。視覺跟蹤算法目前主要有生成型跟蹤算法和判別型跟蹤算法[2]。生成型跟蹤算法通過對目標區域進行建模,來找與模型區域最相似的區域作為預測位置,其中包括Meanshift跟蹤算法[3]、稀疏表示[4]、增量子空間學習[5],粒子濾波跟蹤算法[6]等。判別型方法建立了一個區分目標與背景的模型。判別型跟蹤算法包括在線增強[7]、多實例學習[8]、Struct算法[9]、壓縮跟蹤算法[10]等。
TLD是一個同時包括了跟蹤模塊,檢測模塊和學習模塊的長時間目標跟蹤算法。跟蹤模塊采用金字塔LK光流法,檢測模塊采用級聯分類器,學習模塊采用PN學習模塊。跟蹤模塊和檢測模塊相互獨立運行,學習模塊結合跟蹤模塊和檢測模塊的結果來預測檢測模塊的錯誤,并對訓練樣本進行校正。然而,該算法存在一些不足。金字塔LK光流法在物體發生光照變化,遮擋,旋轉時就會失效;檢測模塊在第一幀時就產生了所有可能的掃描窗口,這些掃描窗口中包含了大量的無效窗口;學習模塊每一次都是對第一幀產生的所有可能的掃描窗口進行處理,耗時巨大。為了減少初始化的時間,文獻[11]應用SIFT算法識別出最佳匹配區域作為 TLD的初始跟蹤區域。為了減少檢測模塊的耗時,文獻[12]將 Kalman濾波器應用于目標檢測中。在發生嚴重遮擋,運動模糊情況下,文獻[13]提出了用卷積神經網絡優化TLD算法。鑒于檢測模塊第一個階段方差分類器不能有效過濾背景區域,文獻[14]將前景檢測分類算法用于檢測模塊。
本文針對金字塔LK光流法跟蹤器在復雜背景下容易出現跟蹤漂移的現象,提出了用壓縮跟蹤器替換原有的金字塔LK光流法跟蹤器;針對檢測模塊每次檢測時都需要處理大量無效窗口,提出了一種檢測區域動態更新的方法;學習模塊也在該檢測區域動態更新的區域中來進行學習,可以減少學習模塊的耗時。
TLD算法[15]主要包括跟蹤器(tracker),檢測器(detector)和機器學習(learning)三個基本模塊。TLD算法的基本框架如下圖1所示。
TLD的跟蹤器采用金字塔LK光流法[16]。在每一幀跟蹤時,在目標模型區域選取一個10×10大小的網格,網格內均勻分布著像素點,這些像素點作為跟蹤的特征點。在t幀時,運用LK光流法跟蹤這些特征點到t+1幀。根據t+1幀特征點的位置,反向利用LK光流法得到這些特征點的后向跟蹤軌跡。這樣每個特征點都會有前向和后向兩個位置,這兩個位置的歐式距離作為每個特征點的前后向誤差值(FB error)。計算每個特征點在兩幀之間的歸一化互相關匹配值(NCC)。同時小于FB error和NCC中值的特征點作為跟蹤成功的點。
TLD的檢測器由方差分類器,集合分類器和最近鄰分類器構成。方差分類器去除掉所有灰度值方差小于被跟蹤圖相框灰度值方差50%的掃描窗口,剩下的掃描窗口進入集合分類器。集合分類器包括10個基本分類器。每一個基本分類器i對掃描窗口進行像素比較,得到一個包含一系列后驗概率Pi(y|x)的二值編碼x,其中y∈{0,1}。將上面得到的后驗概率取平均值,如果大于0.5,那么掃描窗口就通過集合分類器。經過集合分類器篩選的掃描窗口進入最近鄰分類器,將掃描窗口與樣本庫中的樣本用NCC計算相似度,相似度大于最近鄰分類器閾值的掃描窗口通過最近鄰分類器。
學習模塊采用PN學習[17]。學習模塊在第一幀初始化檢測器,并在后續的運行中對檢測器的錯誤進行校正。PN學習包括P專家和N專家。P專家用來發現錯誤的負樣本,把它標記為正樣本并添加到樣本集中。N專家用來發現錯誤的正樣本,把它標記為負樣本并添加到樣本集中。
金字塔LK光流法跟蹤目標模型區域內10×10大小的網格內的像素點,這些像素點是均勻分布的,作為跟蹤的特征點。在發生光照變化,尺度變化,姿態變化,旋轉,快速移動時,通過NCC和FB error可能濾除掉那些代表目標模型的有效特征點。剩下的特征點可能與背景中相似的點錯誤配對或者無法找到對應的配對點,出現跟蹤漂移現象。本文選用壓縮跟蹤器替代金字塔LK光流法跟蹤器。檢測模塊在每一次檢測時都要和第一幀產生的所有掃描窗口進行比較,這些掃描窗口中包含了大量的無效的掃描窗口。這里提出了一種檢測區域動態更新的方法。學習模塊也在檢測區域動態更新的區域中進行學習,有效減少了學習模塊的耗時。
壓縮跟蹤算法對比金字塔LK光流法有如下優勢:①它對姿態和光照變化具有健壯性,因為目標的外觀模型通過隨機投影矩陣來構造并且采用在線更新的分類器來區分目標和背景;②它能夠較好的處理遮擋,因為它的外觀模型是基于局部特征的;③它能夠較好的處理非剛性目標的姿態變化,因為它的外觀模型是從多尺度空間中隨機選取,這種特征對非剛性目標外形的變化是不敏感的;④它對平面旋轉有一定的抵抗性,在發生平面旋轉時,它在跟蹤過程中采用分類器和多尺度圖像特征來處理目標位置的模糊性。
壓縮跟蹤算法在t幀時從接近當前目標位置附近采集一些樣本,這些樣本經過多尺度變換,稀疏測量矩陣,將得到的壓縮特征送入貝葉斯分類器中,分類分數最大的圖片即認為是目標。在t+1幀時,在距離目標很近的位置產生正樣本,離目標很遠的位置產生負樣本,這些正負樣本經過多尺度變換,稀疏測量矩陣,將得到的壓縮特征用于更新貝葉斯分類器。壓縮跟蹤整體流程示意圖如圖2,圖3所示。

圖2 在第t幀更新分類器

圖3 在第t+1幀確定目標位置
壓縮跟蹤算法主要步驟如下:
1)多尺度變換
對于每一個樣本Z∈Rw×h(R表示實數集,w和h分別表示樣本圖像的寬度和高度)分別與一組多尺度矩形濾波器{h1,1,…,hw,h}進行卷積,獲得多尺度的樣本特征向量。每一種多尺度矩形濾波器的定義如下:
(1)
2)稀疏測量矩陣生成
壓縮感知理論指出通過滿足約束等距性(RIP)準則的稀疏測量矩陣[18],多尺度圖像特征可以投影到低維圖像空間。采用稀疏測量矩陣R=Rn×m,將數據從高維圖像空間x∈Rm投影到低維數據空間v∈Rn。
v=Rx
(2)
矩陣R中每個元素如下所示
(3)
3)樸素貝葉斯分類
提取的特征經過貝葉斯分類器分類,分類公式為:
(4)

(5)
式(5)中的標量參數通過下面的公式更新,如式(6)所示
(6)
這里增加了對壓縮跟蹤效果的評估,將壓縮跟蹤得到的跟蹤框與樣本庫中的樣本用NCC計算保守相似度,作為跟蹤器的保守相似度,用同樣的方法得到檢測器的保守相似度。在檢測器檢測到的掃描窗口中,尋找與跟蹤器跟蹤到的跟蹤框距離較遠的類,且它的保守相似度比跟蹤器的要大,如果滿足以上條件的掃描窗口只有一個,就用該掃描窗口重新初始化跟蹤器,否則尋找距離跟蹤器預測到的跟蹤框很近的掃描窗口,這些掃描窗口與跟蹤器本身預測到的跟蹤框進行坐標與大小的平均,作為最終的目標跟蹤框,其中跟蹤器的權值較大。
TLD檢測器通過掃描窗口對每個視頻進行處理,每次掃描一個圖像塊,給出其中是否有待檢測目標。這些掃描窗口在第一幀的時候就已經產生好了,檢測模塊在每次確定目標位置時都要和這約50000個掃描窗口進行比較,耗時巨大[19-20]。本文提出了一種動態更新檢測區域的方法。
1)確定運動目標的搜索半徑
在每一幀時,根據要跟蹤目標的速度,來確定搜索半價r。具體的步驟如下:在每一幀時把TLD算法跟蹤到的目標的位置存起來,在t幀的時候得到t-2幀到t-1幀的位移Δst-1。
前面5幀的平均速度作為t幀的速度

(7)
根據t幀的速度v來確定搜索半徑r
(8)
t是每一幀算法運行的時間,r的單位是像素,v的單位是像素/秒,t的單位是秒。r′和Δs1是根據選定的10個視頻設定的參數值。本文把每一幀的Δs1存入1.txt文檔中,根據1.txt中的數據選取Δs1為8.5,根據這10個視頻進行反復實驗,選取r′為10。本文的r′和Δs1為參數值,根據不同的測試視頻可以進行改變。
2)產生正樣本和負樣本
在t幀的時候,清理掉t-1幀產生的所有掃描窗口,以t-1幀跟蹤框為中心,根據歷史的速度來確定搜索半價r,根據搜索半徑r來產生新的掃描窗口。將所有產生的掃描窗口放入網格容器中,并求出這些掃描窗口與上一幀的跟蹤框的重疊度。根據重疊度對所有的掃描窗口進行分類,產生好的掃描窗口和壞的掃描窗口,重疊度最大的掃描窗口歸一化為15*15像素的大小,作為最好的掃描窗口。根據最好的掃描窗口的積分圖計算出最好的掃描窗口的方差,方差的一半作為檢測模塊第一階段方差分類器的閾值。清理掉t-1幀產生的所有正樣本和負樣本。從產生的好的掃描窗口中選出10個重疊度最大的掃描窗口,對每一個掃描窗口進行10次仿射性變換,產生了100個正樣本;根據最好的掃描窗口的方差對壞的掃描窗口進行篩選,產生負樣本。
3)級聯分類器進行分類。
將產生的負樣本歸一化為15*15像素的大小,作為標準的負樣本。將一半負樣本和100個正樣本用來訓練集合分類器。另外一半負樣本和一半標準的負樣本用來評價集合分類器和最近鄰分類器的閾值。所有的掃描窗口經過方差分類器(Cascsded classifier),集合分類器(Ensemble Classifier),最近鄰分類器(NN Classifier)來進行篩選。只有通過了3個分類器的掃描窗口才被認為是目標。
針對Basketball這個視頻,進行了原始TLD算法和改進后的TLD算法進入分類器的掃描窗口數量的比較。如圖4所示,橫坐標表示視頻幀數,縱坐標表示進入分類器的掃描窗口數量,縱坐標選用對數來表示。可以看出,原始TLD每幀進入分類器的掃描窗口數量為231526個,而改進TLD每幀進入分類器的掃描窗口數量大多小于1000個??梢钥闯鼋涍^改進后,進入分類器的掃描窗口數量減少了,檢測模塊耗時減少了,檢測模塊的實時性提高了。

圖4 進入分類器的掃描窗口數量
原本的學習模塊每一次都是對第一幀產生的所有可能的約5萬個掃描窗口進行處理,耗時巨大。本文采用在動態更新的檢測區域中來進行學習。在每一幀時,把經過跟蹤器和檢測器綜合得到的跟蹤框作為最終的目標跟蹤框,目標跟蹤框同檢測器每一幀產生的掃描窗口計算重疊度,將重疊度最大的掃描窗口作為最好的掃描窗口,將該最好的掃描窗口的大小歸一化為15*15像素的大小,作為最好的樣本。篩選出檢測器檢測得到的檢測目標同最終的目標跟蹤框重疊度小于0.2的檢測目標,同最好的樣本一起作為最近鄰NN分類器的訓練樣本。通過采用在動態更新的檢測區域內進行處理,減少了學習模塊的耗時。
改進TLD算法的實現過程如下所示。
步驟1:讀取視頻文件,視頻相關文件中給出初始跟蹤框的大小,位置。
步驟2:初始化CT跟蹤器,完成TLD的初始化。
步驟3:第一幀時CT跟蹤器進行跟蹤,檢測模塊在第一幀不進行檢測,第一幀時跟蹤器的結果作為最終結果。
步驟4:CT跟蹤器在每一幀進行跟蹤,并得到跟蹤器的保守相似度tconf,檢測模塊清理掉之前的掃描窗口,正樣本,負樣本。根據跟蹤目標的速度,來確定搜索半價r。根據半價r產生新的掃描窗口,以新的掃描窗口為基礎,生成新的正樣本和負樣本,訓練集合分類器,檢測器對新的掃描窗口進行檢測。
步驟5:根據跟蹤模塊的保守相似度tconf和檢測器的保守相似度dconf,綜合模塊得到目標在下一幀中的位置。
步驟6:將綜合模塊得到的跟蹤框的位置傳給CT跟蹤器,進行下一次的跟蹤。
步驟7:學習模塊根據綜合模塊傳進來的跟蹤框,從檢測器產生的新的掃描窗口中找出重疊度最大的掃描窗口,將重疊度最大的掃描窗口的大小歸一化為15*15的大小,作為最好的樣本。最好的樣本同與最終的目標跟蹤框重疊度小于0.2的檢測目標一起作為最近鄰NN分類器的訓練樣本。
步驟8:重復步驟4到7。
本文將改進后的 TLD 算法與原始 TLD 算法進行了比較。實驗中采用了10組視頻進行測試,分別是TLD原作者實驗中使用到的數據集jumping,panda,以及OTB100里面的數據集包括Bolt2,Basketball,ClifBar,FaceOcc2,Tiger1,Coupon,Twinnings,Walking共10個視頻。這些場景包含了光照變化,尺度變換,遮擋、形變,運動模糊,快速移動,低分辨率,目標的某些部分離開視圖,目標在圖像平面外旋轉,背景雜波,平面內旋轉,快速移動等情況,此外算法開發平臺為windows7,開發工具為 Visual Studio2010 和 OpenCV2.4.10,處理器為i5-7500,CPU為3.4GHz,內存為4G。
在這里本文選取了Panda,Basketball,Bolt2,FaceOcc2,Tiger1這些視頻進行定性分析。
1)Panda包含了目標姿態變化,外形變化。開始的幾十幀里原始TLD和改進TLD都可以跟蹤到。122幀時,目標姿態發生了變化,金字塔LK光流法出現了錯誤的運動矢量場,原始TLD算法跟蹤錯誤,改進TLD算法由于采用了對尺度和姿態變化具有一定健壯性的Haar-like特征,在姿態變化,外形變化下都可以跟蹤到。
2)Basketball包含相似目標。15幀時,相似目標出現,金字塔LK光流法跟蹤特征點錯誤配對導致跟蹤失敗,而改進后的TLD算法采用的壓縮跟蹤器的分類器是在線更新的,可以有效地區分目標和背景。
3)Bolt2包含了非剛性目標,快速移動。開始的時候,運動員的四肢和軀干時刻發生著復雜的運動,原始TLD算法跟蹤錯誤。后來運動員快速奔跑,原始TLD算法跟蹤錯誤,而改進TLD算法由于壓縮跟蹤算法的外觀模型是基于局部特征的,這種特征對非剛性目標不敏感,對快速移動的處理能力強。
4)FaceOcc2包含了遮擋情況。在出現遮擋的情況下,金字塔LK光流法容易形成錯誤的運動矢量場,出現跟蹤漂移現象,而改進的TLD算法采用了從多尺度空間隨機選擇的特征,這種特征對遮擋不太敏感。
5)Tiger1包含光照變化,旋轉。35幀時,目標發生了光照變化,金字塔LK光流法受到光照的干擾,原始TLD算法跟蹤丟失,此后目標出現了旋轉,圖像中的像素點難以形成運動矢量場,原始TLD算法跟蹤丟失。而改進TLD算法由于壓縮跟蹤采用分類器和區分特征來處理目標位置的模糊性,在光照和平面旋轉情況下都可以跟蹤到。
綜上所述,改進的TLD算法在目標姿態變化,外形變化,快速移動,有相識目標出現,非剛性目標,遮擋,光照變化,旋轉的情況下效果都很好。圖(a)(b)(c)(d)(e)為原始TLD算法與改進TLD算法跟蹤效果比較圖,其中紅色框是改進TLD效果圖,白色框是原始TLD效果圖。

圖5 原始TLD算法與改進TLD算法跟蹤效果比較圖
本文選用跟蹤成功率作為視頻目標跟蹤結果的評價標準,它是指成功跟蹤的幀數占總幀數的比例。原始TLD算法與改進后算法跟蹤成功率的比較見表2,可以看出較原始算法相比改進后算法跟蹤成功率得到了提高。原始TLD算法在選定的很多個測試視頻的后期檢測器沒有發揮作用,跟蹤失效。跟蹤速度代表的是整體的平均跟蹤速度,包含了跟蹤失效的幀數。選擇在跟蹤不失效的情況下比較算法的實時性。這里選取視頻每一幀的運行時間作為跟蹤實時性的評價標準。圖6顯示了對于Twinnings這個視頻原始TLD算法與改進TLD算法每一幀運行時間的比較??梢钥闯鲈糡LD算法每一幀的運行時間大都在100ms到1000ms之間,而改進TLD算法每一幀的運行時間在100ms以下。由于檢測模塊采用了動態更新的掃描區域,跟蹤實時性得到了提升。

表2 原算法與改進算法跟蹤成功率比較

圖6 每一幀運行時間比較
本文的主要改進如下:
1)對于原始的TLD中所采用的金字塔LK光流法做出改進,使用壓縮跟蹤器作為TLD的跟蹤器,有效解決了光流法無法有效跟蹤物體快速移動,遮擋,形態發生劇烈變化等問題,并且增加了對壓縮跟蹤器跟蹤效果的評估;
2)在每次檢測之前,根據目標的歷史速度,設定了一個動態更新的檢測區域,減少了檢測模塊的耗時;
3)學習模塊每次都在動態更新的檢測區域中來進行學習,加快了學習模塊的速度。