Target Tracking-TLD分析

TLD簡介

對於視頻追蹤來說,常用的方法有兩種,一是使用追蹤器根據物體在上一幀的位置預測它在下一幀的位置,但這樣會積累誤差,而且一旦物體在圖像中消失,追蹤器就會永久失效,即使物體再出現也無法完成追蹤;另一種方法是使用檢測器,對每一幀單獨處理檢測物體的位置,但這又需要提前對檢測器離線訓練,只能用來追蹤事先已知的物體。

TLD是對視頻中未知物體的長時間跟蹤的算法。“未知物體”指的是任意的物體,在開始追蹤之前不知道哪個物體是目標。“長時間跟蹤”又意味着需要算法實時計算,在追蹤中途物體可能會消失再出現,而且隨着光照、背景的變化和由於偶爾的部分遮擋,物體在像素上體現出來的“外觀”可能會發生很大的變化。從這幾點要求看來,單獨使用追蹤器或檢測器都無法勝任這樣的工作。所以作者提出把追蹤器和檢測器結合使用,同時加入機器學習來提高結果的準確度。

 

TLD組成

正如TLD全稱Tracking-Learning-Detection,TLD就是由這三個模塊跟蹤模塊、學習模塊、檢測模塊組成。

 

三個模塊簡介

這裏先簡單地對TLD中這三個模塊做個介紹,更詳細的內容會在之後介紹

  • 跟蹤器Tracker

跟蹤器就是用來分析跟蹤的目標在視頻的幀與幀之間的運動趨勢,從而預測目標在下一幀中可能出現的位置。可以認爲本質和傳統的Tracker沒什麼兩樣,都是提前選定一個初始目標模型,作爲預測的位置出的圖像是否爲跟蹤目標的評判依據。

  • 檢測器Detector

將視頻中的每一幀視爲獨立的圖像,從而對圖像內的物體進行檢測,是否有要跟蹤的目標。可能在一幅圖像中檢測器會檢測出多個可能的結果

  • 學習模型Learning Model

用來評估檢測器的檢測結果,更新用於訓練檢測器的訓練樣本集,從而實現對檢測器的更新。

 

TLD跟蹤過程以及三個模塊在TLD中的相互關係

在一開始接觸TLD的時候,對“學習模型以Tracker的跟蹤結果作爲基準,來評估Detector”的這一過程感到不解:倘若如此,Detecor似乎完全對跟蹤過程沒有起到什麼實質性的作用。除了不停地在訓練Detector,但是這個Detecor又對跟蹤的過程沒有起到幫助。所以接下來要好好介紹一下用TLD來實現目標跟蹤的過程:

1.

Tracker和Detector在目標跟蹤的系統中是並行運行的,但是最終的跟蹤結果,是優先考慮Tracker的跟蹤結果,只有在Tracker的跟蹤結果不滿足某一條件(這一條件,可以是某一種衡量Tracker預測位置處的圖像和初始目標模型的相似度的參數與設定的閾值之間的關係,發生情景例如目標受到遮擋,跟丟...)時,並且Detecor的檢測結果(可能有多個可能結果,選擇其中表現最好的)滿足某一條件,可以作爲跟蹤的結果時,Detector檢測到的這一個區域則作爲最終的跟蹤結果。可以說,Detector是Tracker的備胎,Plan B。

在這裏可能會有疑問:如果Detecor能及時在Tracker跟蹤結果出來後得出檢測結果,即Detector速度足夠快,那爲什麼不直接使用Detecor的檢測結果作爲跟蹤結果,直接使用Detector通過detect來實現跟蹤,反而還要使用容易受到遮擋影響跟蹤效果的Tracker來跟蹤且以其跟蹤結果作爲優先選擇對象呢?其實之所以不直接使用Detector對圖像進行detect來進行跟蹤的原因並不是因爲Detect的時間長,而是要訓練一個足夠強大的Detector需要有足夠的訓練集以及有提前的一段時間來進行離線訓練,而這就難以滿足實時性跟蹤的需求了,畢竟你需要在跟蹤一個目標之前專門對這個視頻進行一個Detecor的訓練。這也就是TLD能在實時性目標跟蹤上應用的原因,同時也可以看到,TLD在能滿足實時性目標跟蹤的需求的同時,還引入了Detector,能夠提升跟蹤的魯棒性,解決遮擋等因素帶來的問題。所以個人認爲,TLD的優秀之處就在於,能在實時性跟蹤的要求下,引入傳統下無法實現實時跟蹤的、更具有魯棒性的Detector。

2.

在Tracker正常跟蹤時,Detector是受到監督的一方。此時學習模型起到作用,利用P-N約束條件(P-N Constraint),以Tracker的跟蹤結果作爲基準,來衡量Detector的檢測結果的好壞,並且更新這些訓練樣本的標籤(P-將檢測爲反例實爲正例的標籤更新爲正例的標籤,N-將檢測爲正例實爲反例的標籤更新爲反例的標籤),同時將Tracker跟蹤過程中(例如跟蹤軌跡上的、遠離跟蹤軌跡的)一些圖像塊(Patch)做上標記,作爲樣本加入訓練樣本集中提供給Detector的訓練,再通過對Detector的訓練使Detector得到更新。

也就是說,Tracker正常工作時,學習模型就從Tracker的工作過程對訓練Detector的訓練集進行更新,從而更新Detector,使其更爲強大。TLD的精彩之處就在這裏,並不像傳統的僅僅使用Detector的detect來實現跟蹤的算法,在Detector進行detect之前需要提供一段時間用於訓練,而是在這段時間內用傳統的Tracker先進行跟蹤,在Tracker跟蹤的過程中去訓練這個Detector,所以從某種角度來說,這個Tracker有一點給Detector訓練起到時間上的緩衝的作用。

3.

當Tracker預測到的區域不夠理想時,不滿足1.中描述的需要的條件時,需要去判斷Detector detect到的區域是否滿足要求,如果滿足,則選擇最優的那個區域作爲最終跟蹤的結果,同時,重新初始化Tracker。所謂對Tracker的初始化,就是重新設定Tracker的搜索窗,以及初始目標對象。將Tracker 的搜索窗和初始目標對象都設置爲當前幀中,Detector detect到的最優的區域以及區域所對應的圖像。在下一幀中,重新啓動Tracker,循環進行1. 2. 3.的過程。直到Tracker和Detector都沒能得到最終的目標區域,則表示跟蹤失敗,跟蹤結束。

以上就是TLD的跟蹤流程以及三個模塊在TLD中的相互關係。

 

 

TLD算法具體實現

  • Tracker:中值光流法。Zdenek Kalal給出了一種依據FB誤差繪製誤差圖(Error Map)篩選最佳追蹤點的方法,但並不適用於實時追蹤任務,就不詳細介紹了。這裏只介紹在TLD中確定追蹤點的方法。首先在上一幀t的物體包圍框裏均勻地產生一些點,然後用Lucas-Kanade追蹤器正向追蹤這些點到t+1幀,再反向追蹤到t幀,計算FB誤差,篩選出FB誤差最小的一半點作爲最佳追蹤點。最後根據這些點的座標變化和距離的變化計算t+1幀包圍框的位置和大小(平移的尺度取中值,縮放的尺度取中值。取中值的光流法,估計這也是名稱Median-Flow的由來吧)。
  • Detector:採用級聯分類器。三級分別是
  1. 圖像元方差分類器(Patch Variance Classifier)。計算圖像元像素灰度值的方差,把方差小於原始圖像元方差一半的樣本標記爲負。論文提到在這一步可以排除掉一半以上的樣本。
  2. 集成分類器(Ensemble Classifier)。實際上是一個隨機蕨分類器(Random Ferns Classifier),類似於隨機森林(Random Forest),區別在於隨機森林的樹中每層節點判斷準則不同,而隨機蕨的“蕨”中每層只有一種判斷準則。可以使用多個隨機蕨分類器,將它們集成,這樣能提高輸出結果的準確性。
  3. 最近鄰分類器(Nearest Neighbor Classifier)。計算新樣本的相對相似度,如大於0.6,則認爲是正樣本。
  • Learning Model:P-N約束條件(P-N Constraint)

 

參考博文

流程圖:https://www.cnblogs.com/universe42/p/4498061.html

TLD簡介以及TLD算法具體實現:http://johnhany.net/2014/05/tld-the-theory/

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章