視頻目標跟蹤從0到1,概念與方法
點擊上方“小白學(xué)視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
從目標跟蹤的應(yīng)用場景,底層模型,組件,類型和具體算法幾個方面對目標跟蹤做了全方面的介紹,非常好的入門文章。

在今天的文章中,我們將深入研究視頻目標跟蹤。我們從基礎(chǔ)開始,了解目標跟蹤的需求,然后了解視覺目標跟蹤的挑戰(zhàn)和算法模型,最后,我們將介紹最流行的基于深度學(xué)習(xí)的目標跟蹤方法,包括MDNET, GOTURN, ROLO等。本文希望你了解目標檢測。
目標跟蹤是在視頻中隨著時間的推移定位移動目標的過程。我們可以簡單地問,為什么我們不能在整個視頻的每一幀中使用目標檢測,然后我們可以再去跟蹤目標。這會有一些問題。如果圖像有多個物體,那么我們就無法將當前幀中的物體鏈接到前一幀中。如果你跟蹤的物體有幾幀不在鏡頭里,然后重新又出現(xiàn),我們無法知道它是否是同一物體。本質(zhì)上,在檢測過程中,我們一次只處理一張圖像,我們不知道物體的運動和過去的運動,所以我們不能在視頻中唯一地跟蹤物體。
目標跟蹤在計算機視覺中有著廣泛的應(yīng)用,如監(jiān)視、人機交互、醫(yī)學(xué)成像、交通流監(jiān)測、人類活動識別等。比如FBI想用全市的監(jiān)控攝像頭追蹤一名駕車逃跑的罪犯?;蛘哂幸粋€需要分析足球比賽的體育分析軟件。或者你想在購物中心的入口處安裝一個攝像頭,然后計算每個小時有多少人進出,你不僅要對人進行跟蹤,還要為每個人創(chuàng)建路徑,如下所示。

當檢測失敗的時候,跟蹤可以接替工作
當視頻中有一個移動的物體時,在某些情況下,物體的視覺外觀并不清楚。在所有這些情況下,檢測都會失敗而跟蹤會成功,因為它也有物體的運動模型和歷史記錄。
下面是一些例子,其中有目標跟蹤在工作和目標檢測失敗的情況:
遮擋:所述目標被部分或完全遮擋,如下圖所示:

身份切換:兩個目標交叉后,你如何知道哪個是哪個。 運動模糊:物體由于物體或相機的運動而被模糊。因此,從視覺上看,物體看起來不再一樣了。 視點變化:一個物體的不同視點在視覺上可能看起來非常不同,如果沒有上下文,僅使用視覺檢測就很難識別該物體。 尺度變化:物體尺度變化過大可能導(dǎo)致檢測失敗。 背景雜亂:目標附近的背景與目標有相似的顏色或紋理。因此,從背景中分離物體會變得更加困難。 光照變化:目標物體附近的光照顯著改變。因此,從視覺上識別它可能會變得更加困難。 低分辨率:當ground truth包圍框內(nèi)的像素點非常少時,可能會在視覺上難以檢測到目標。
目標跟蹤是計算機視覺中一個古老而又困難的問題。有各種各樣的技術(shù)和算法試圖用各種不同的方式來解決這個問題。然而,大多數(shù)的技術(shù)依賴于兩個關(guān)鍵的東西:
1. 運動模型
一個好的跟蹤器的關(guān)鍵部件之一是理解和建模目標的運動的能力。因此,一個運動模型被開發(fā)來捕捉一個物體的動態(tài)行為。預(yù)測物體在未來幀中的潛在位置,從而減少搜索空間。然而,只有運動模型可能會失敗,因為物體可能會不在視頻中,或者方向和速度發(fā)生突變。早期的一些方法試圖了解物體的運動模式并預(yù)測它。然而,這些方法的問題是,他們不能預(yù)測突然的運動和方向變化。這些技術(shù)的例子有光流,卡爾曼濾波,kanad-lucas-tomashi (KLT)特征跟蹤,mean shift跟蹤。
2. 視覺外觀模型
大多數(shù)高度精確的跟蹤器需要了解他們正在跟蹤的目標的外觀。最重要的是,他們需要學(xué)會從背景中辨別物體。在單目標跟蹤器中,僅視覺外觀就足以跨幀跟蹤目標,而在多目標跟蹤器中,僅視覺外觀是不夠的。
?
一般來說,目標跟蹤過程由四個模塊組成:
1、目標初始化:在此階段,我們需要通過在目標周圍繪制一個邊框來定義目標的初始狀態(tài)。我們的想法是在視頻的初始幀中繪制目標的邊界框,跟蹤器需要估計目標在視頻剩余幀中的位置。
2、外觀建模:現(xiàn)在需要使用學(xué)習(xí)技術(shù)學(xué)習(xí)目標的視覺外觀。在這個階段,我們需要建模并了解物體在運動時的視覺特征、包括在各種視點、尺度、光照的情況下。
3、運動估計:運動估計的目的是學(xué)習(xí)預(yù)測后續(xù)幀中目標最有可能出現(xiàn)的區(qū)域。
4、目標定位:運動估計給出了目標可能出現(xiàn)的區(qū)域,我們使用視覺模型掃描該區(qū)域鎖定目標的確切位置。一般來說,跟蹤算法不會嘗試學(xué)習(xí)目標的所有變化。因此,大多數(shù)跟蹤算法都比目標檢測快得多。
?
1. 基于檢測與不需要檢測的跟蹤器
1.1 基于檢測的跟蹤:將連續(xù)的視頻幀給一個預(yù)先訓(xùn)練好的目標檢測器,該檢測器給出檢測假設(shè),然后用檢測假設(shè)形成跟蹤軌跡。它更受歡迎,因為可以檢測到新的目標,消失的目標會自動終止。在這些方法中,跟蹤器用于目標檢測失敗的時候。在另一種方法中,目標檢測器對每n幀運行,其余的預(yù)測使用跟蹤器完成。這是一種非常適合長時間跟蹤的方法。
1.2 不需要檢測的跟蹤:不需要檢測的跟蹤需要手動初始化第一幀中固定數(shù)量的目標。然后在后續(xù)的幀中定位這些目標。它不能處理新目標出現(xiàn)在中間幀中的情況。
2. 單目標和多目標跟蹤器
2.1 單目標跟蹤:即使環(huán)境中有多個目標,也只跟蹤一個目標。要跟蹤的目標由第一幀的初始化確定。
2.2 多目標跟蹤:對環(huán)境中存在的所有目標進行跟蹤。如果使用基于檢測的跟蹤器,它甚至可以跟蹤視頻中間出現(xiàn)的新目標。
3. 在線和離線跟蹤器
3.1 離線跟蹤器:當你需要跟蹤已記錄流中的物體時,使用離線跟蹤器。例如,如果你錄制了對手球隊的足球比賽視頻,需要進行戰(zhàn)略分析。在這種情況下,你不僅可以使用過去的幀,還可以使用未來的幀來進行更準確的跟蹤預(yù)測。
3.2 在線跟蹤器:在線跟蹤器用于即時預(yù)測,因此,他們不能使用未來幀來改善結(jié)果。
4. 基于學(xué)習(xí)和基于訓(xùn)練的策略
4.1 在線學(xué)習(xí)跟蹤器:這些跟蹤器通常使用初始化幀和少量后續(xù)幀來了解要跟蹤的目標。這些跟蹤器更通用因為你可以在任何目標周圍畫一個框并跟蹤它。例如,如果你想在機場跟蹤一個穿紅襯衫的人,你可以在一個或幾個幀內(nèi),在這個人周圍畫一個邊界框,跟蹤器通過這些框架了解目標物體,并繼續(xù)跟蹤那個人。

在線學(xué)習(xí)跟蹤器的核心思想是:中心的紅色方框由用戶指定,以它為正樣本,所有圍繞著目標的方框作為負樣本,訓(xùn)練一個分類器,學(xué)習(xí)如何將目標從背景中區(qū)分出來。
4.2 離線學(xué)習(xí)跟蹤器:這些跟蹤器的訓(xùn)練只在離線進行。與在線學(xué)習(xí)跟蹤器不同,這些跟蹤器在運行時不學(xué)習(xí)任何東西。這些跟蹤器在線下學(xué)習(xí)完整的概念,也就是說,我們可以訓(xùn)練跟蹤器來識別人。然后這些跟蹤器可以用來連續(xù)跟蹤視頻流中的所有人。
?
OpenCV的跟蹤API中集成了很多傳統(tǒng)的(非深度學(xué)習(xí)的)跟蹤算法。相對而言,大多數(shù)跟蹤器都不是很準確。但是,有時它們在資源有限的環(huán)境(如嵌入式系統(tǒng))中運行會很有用。如果你不得不使用一個,我建議使用核相關(guān)過濾器(KCF)跟蹤器。然而,在實踐中,基于深度學(xué)習(xí)的跟蹤器在準確性方面遠遠領(lǐng)先于傳統(tǒng)跟蹤器。因此,在這篇文章中,我將討論用于構(gòu)建基于AI的跟蹤器的三種關(guān)鍵方法。
1. 基于卷積神經(jīng)網(wǎng)絡(luò)的離線訓(xùn)練跟蹤器
這是早期的一系列跟蹤器之一,它將卷積神經(jīng)網(wǎng)絡(luò)的識別能力應(yīng)用于視覺目標跟蹤任務(wù)。GOTURN就是一種基于卷積神經(jīng)網(wǎng)絡(luò)的離線學(xué)習(xí)跟蹤器,它根本不用在線學(xué)習(xí)。首先,跟蹤器使用成千上萬的視頻訓(xùn)練一般目標的跟蹤?,F(xiàn)在,這個跟蹤器可以用來毫無問題地跟蹤大多數(shù)目標即使這些目標不屬于訓(xùn)練集。

GOTURN可以在GPU驅(qū)動的機器上運行非???,即100fps。GOTURN已經(jīng)集成到OpenCV跟蹤API(contrib部分)中。在下面的視頻鏈接中,原作者展示了GOTURN的能力。
視頻鏈接:https://youtu.be/kMhwXnLgT_I
2. 基于卷積神經(jīng)網(wǎng)絡(luò)的在線訓(xùn)練跟蹤器
這些是使用卷積神經(jīng)網(wǎng)絡(luò)的在線訓(xùn)練跟蹤器。其中一個例子就是多域網(wǎng)絡(luò)(MDNet),它是VOT2015挑戰(zhàn)賽的獲勝者。由于卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練在計算上非常昂貴,所以這些方法在部署期間必須使用較小的網(wǎng)絡(luò)以快速訓(xùn)練。然而,較小的網(wǎng)絡(luò)并沒有太多的區(qū)分能力。一種選擇是我們訓(xùn)練整個網(wǎng)絡(luò),但在推理過程中,我們使用前幾層作為特征提取器,也就是說,我們只改變在線訓(xùn)練的最后幾層的權(quán)值。因此,我們用CNN作為特征提取器,最后幾層可以快速在線訓(xùn)練。本質(zhì)上,我們的目標是訓(xùn)練一個能區(qū)分目標和背景的通用多域CNN。然而,這在訓(xùn)練中帶來了一個問題,一個視頻的目標可能是另一個視頻的背景,這只會讓我們的卷積神經(jīng)網(wǎng)絡(luò)混淆。因此,MDNet做了一些聰明的事情。它將網(wǎng)絡(luò)重新安排為兩部分:第一部分是共享部分,然后有一部分是獨立于每個域的。每個域意味著一個獨立的訓(xùn)練視頻。首先在k個域上迭代訓(xùn)練網(wǎng)絡(luò),每個域都在目標和背景之間進行分類。這有助于我們提取獨立于視頻的信息,以便更好地學(xué)習(xí)跟蹤器的通用表示。

經(jīng)過訓(xùn)練,去除領(lǐng)域特定的二分類層,我們得到了一個特征提取器(上文共享網(wǎng)絡(luò)),它可以以通用的方式區(qū)分任何目標和背景。在推理(生產(chǎn))過程中,最初的共享部分被用作特征提取器,刪除特定的領(lǐng)域?qū)樱⒃谔卣魈崛∑髦咸砑佣诸悓?。這個二分類層是在線訓(xùn)練的。在每一步中,通過隨機抽樣的方式搜索前一個目標狀態(tài)周圍的區(qū)域來尋找目標。MDNet是一種最精確的基于深度學(xué)習(xí)的在線訓(xùn)練,不需要檢測,單目標跟蹤。
3. 基于LSTM+ CNN的基于視頻的目標跟蹤器
另一類目標跟蹤器非常流行,因為它們使用長短期記憶(LSTM)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)來完成視覺目標跟蹤的任。循環(huán)YOLO (ROLO)就是這樣一種單目標、在線、基于檢測的跟蹤算法。該算法使用YOLO網(wǎng)絡(luò)進行目標檢測,使用LSTM網(wǎng)絡(luò)進行目標軌跡檢測。LSTM與CNN的結(jié)合是厲害的,原因有二。
a) LSTM網(wǎng)絡(luò)特別擅長歷史模式的學(xué)習(xí),特別適合于視覺目標跟蹤。
b) LSTM網(wǎng)絡(luò)的計算成本不是很高,因此可以構(gòu)建非??焖俚恼鎸嵤澜绺櫰?。

YOLO INPUT ? – 原始輸入幀
YOLO OUTPUT – 輸入幀中包圍框坐標的特征向量
LSTM INPUT ? – 拼接(圖像特征,包圍框坐標)
LSTM OUTPUT – ?被跟蹤目標的包圍框坐標
上面的圖我們這樣理解:
輸入幀通過YOLO網(wǎng)絡(luò)。 從YOLO網(wǎng)絡(luò)得到兩個不同的輸出(圖像特征和邊界框坐標) 這兩個輸出送到LSTM網(wǎng)絡(luò) LSTM輸出被跟蹤目標的軌跡,即包圍框
初步的位置推斷(來自YOLO)幫助LSTM注意某些視覺元素。ROLO探索了時空上的歷史,即除了地理位置的歷史,ROLO還探索了視覺特征的歷史。即使當YOLO的檢測是有缺陷的,比如運動模糊,ROLO也能保持穩(wěn)定跟蹤。此外,當目標物體被遮擋時,這樣的跟蹤器不太會失敗。
最近,有更多基于LSTM的目標跟蹤器,它們通過許多改進比ROLO好得多。但是,我們在這里選擇了ROLO,因為它簡單且容易理解。
希望這篇文章能讓你對視覺目標跟蹤有一個很好的理解,并對一些成功的關(guān)鍵目標跟蹤方法有一些見解。
下載1:OpenCV-Contrib擴展模塊中文版教程 在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。 下載2:Python視覺實戰(zhàn)項目52講 在「小白學(xué)視覺」公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。 下載3:OpenCV實戰(zhàn)項目20講 在「小白學(xué)視覺」公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。 交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

