目標跟蹤經典演算法彙總(持續更新...)
如題,雖然這個問題是經典目標跟蹤演算法,但事實上,可能我們並不需要那些曾經輝煌但已被拍在沙灘上的tracker(目標跟蹤演算法),而是那些即將成為經典的,或者就目前來說最好用、速度和效能都看的過去tracker。我比較關注目標跟蹤中的相關濾波方向,接下來我介紹下我所認識的目標跟蹤,尤其是相關濾波類方法
背景介紹
作者:YaqiLYU
連結:https://www.zhihu.com/question/26493945/answer/156025576
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
經典判別類方法推薦Struck和TLD,都能實時效能還行,Struck是2012年之前最好的方法,TLD是經典long-term的代表,思想非常值得借鑑:
- Hare S, Golodetz S, Saffari A, et al. Struck: Structured output tracking with kernels [J]. IEEE TPAMI, 2016.
- Kalal Z, Mikolajczyk K, Matas J. Tracking-learning-detection [J]. IEEE TPAMI, 2012.
長江後浪推前浪,前面的已被排在沙灘上,這個後浪就是相關濾波和深度學習。相關濾波類方法correlation filter簡稱CF,也叫做discriminative correlation filter簡稱DCF,注意和後面的DCF演算法區別,包括前面提到的那幾個,也是後面要著重介紹的。深度學習
最後強力推薦兩個資源:
王強@Qiang Wang維護的benchmark_results foolwood/benchmark_results:大量頂級方法在OTB庫上的效能對比,各種論文程式碼應有盡有,大神自己C++實現並開源的CSK, KCF和DAT,還有他自己的DCFNet論文加原始碼,找不著路的同學請跟緊。
相關濾波
最經典的高速相關濾波類跟蹤演算法CSK, KCF/DCF, CN
Benchmark Results
The trackers are ordered by the average overlap scores.
AUC
andPrecision
are the standard metrics.Deep Learning
: deep learning features, deep learning method and RL.RealTime
: Speeds from the original paper, not test on the same platform. (just focus magnitude)
Tracker | AUC-CVPR2013 | Precision-CVPR2013 | AUC-OTB100 | Precision-OTB100 | AUC-OTB50 | Precision-OTB50 | Deep Learning | RealTime |
---|---|---|---|---|---|---|---|---|
ECO | 0.709 | 0.93 | 0.694 | 0.910 | 0.643 | 0.874 | Y | N(6) |
MDNet | 0.708 | 0.948 | 0.678 | 0.909 | 0.645 | 0.890 | Y | N(1) |
SANet | 0.686 | 0.95 | 0.692 | 0.928 | - | - | Y | N(1) |
BranchOut | 0.678 | 0.917 | Y | N(1) | ||||
TCNN | 0.682 | 0.937 | 0.654 | 0.884 | - | - | Y | N(1) |
TSN | 0.644 | 0.868 | 0.58 | 0.809 | Y | N(1) | ||
CRT | - | - | 0.642 | 0.875 | 0.594 | 0.835 | Y | N(1.3) |
BACF | 0.678 | 0.63 | N | Y(35) | ||||
MCPF | 0.677 | 0.916 | 0.628 | 0.873 | Y | N(0.5) | ||
CREST | 0.673 | 0.908 | 0.623 | 0.837 | - | - | Y | N(1) |
C-COT | 0.672 | 0.899 | 0.682 | - | - | - | Y | N(0.3) |
DNT | 0.664 | 0.907 | 0.627 | 0.851 | - | - | Y | N(5) |
PTAV | 0.663 | 0.894 | 0.635 | 0.849 | Y | Y(25) | ||
ADNet | 0.659 | 0.903 | 0.646 | 0.88 | Y | N(3) | ||
DSiamM | 0.656 | 0.891 | Y | Y(25) | ||||
SINT+ | 0.655 | 0.882 | - | - | - | - | Y | N(4) |
DRT | 0.655 | 0.892 | - | - | - | - | Y | N(0.8) |
RDT | 0.654 | - | 0.603 | - | - | - | Y | Y(43) |
SRDCFdecon | 0.653 | 0.87 | 0.627 | 0.825 | 0.56 | 0.764 | N | N(1) |
DeepLMCF | 0.643 | 0.892 | Y | N(8) | ||||
MUSTer | 0.641 | 0.865 | 0.575 | 0.774 | - | - | N | N(4) |
DeepSRDCF | 0.641 | 0.849 | 0.635 | 0.851 | 0.56 | 0.772 | Y | N(<1) |
EAST | 0.638 | Y | Y(23/159) | |||||
SINT | 0.635 | 0.851 | - | - | - | - | Y | N(4) |
LCT | 0.628 | 0.848 | 0.562 | 0.762 | 0.492 | 0.691 | N | Y(27) |
SRDCF | 0.626 | 0.838 | 0.598 | 0.789 | 0.539 | 0.732 | N | N(5) |
LMCF | 0.624 | 0.839 | 0.568 | N | Y(85) | |||
SCF | 0.623 | 0.874 | - | - | - | - | N | Y(35) |
Staple_CA | 0.621 | 0.833 | 0.598 | 0.81 | N | Y(35) | ||
RaF | 0.615 | 0.919 | Y | N(2) | ||||
SiamFC | 0.612 | 0.815 | - | - | - | - | Y | Y(58) |
RFL | 0.581 | Y | Y(15) | |||||
CFNet_conv2 | 0.611 | 0.807 | 0.568 | 0.748 | 0.53 | 0.702 | Y | Y(75) |
SiamFC_{3s} | 0.608 | 0.809 | - | - | - | - | Y | Y(86) |
ACFN | 0.607 | 0.86 | 0.575 | 0.802 | Y | Y(15) | ||
CF2 | 0.605 | 0.891 | 0.562 | 0.837 | 0.513 | 0.803 | Y | N(11) |
HDT | 0.603 | 0.889 | 0.654 | 0.848 | 0.515 | 0.804 | Y | N(10) |
Staple | 0.6 | 0.793 | 0.578 | 0.784 | - | - | N | Y(80) |
CSR-DCF | 0.599 | 0.8 | 0.598 | 0.733 | N | Y(13) | ||
FCNT | 0.599 | 0.856 | - | - | - | - | Y | N(1) |
CNN-SVM | 0.597 | 0.852 | 0.554 | 0.814 | 0.512 | 0.769 | Y | N |
SCT | 0.595 | 0.845 | - | - | - | - | Y | Y(40) |
SO-DLT | 0.595 | 0.81 | - | - | - | - | Y | N |
BIT | 0.593 | 0.817 | - | - | - | - | N | Y(45) |
DLSSVM | 0.589 | 0.829 | 0.541 | 0.767 | - | - | Y | N(10) |
SAMF | 0.579 | 0.785 | 0.535 | 0.743 | - | - | N | N(7) |
RPT | 0.577 | 0.805 | - | - | - | - | N | N(4) |
MEEM | 0.566 | 0.83 | 0.53 | 0.781 | 0.473 | 0.712 | N | N(10) |
DSST | 0.554 | 0.737 | 0.52 | 0.693 | 0.463 | 0.625 | N | Y(24) |
CNT | 0.545 | 0.723 | - | - | - | - | Y | N(1.5) |
TGPR | 0.529 | 0.766 | 0.458 | 0.643 | - | - | N | N(1) |
KCF | 0.514 | 0.74 | 0.477 | 0.693 | 0.403 | 0.611 | N | Y(172) |
GOTURN | 0.444 | 0.62 | 0.427 | 0.572 | - | - | Y | Y(16 |
視覺目標跟蹤是計算機視覺中的一個重要研究方向,有著廣泛的應用,如:視訊監控,人機互動, 無人駕駛等。過去二三十年視覺目標跟蹤技術取得了長足的進步,特別是最近兩年利用深度學習的目標跟蹤方法取得了令人滿意的效果,使目標跟蹤技術獲得了突破性的進展。本文旨在簡要介紹:目標跟蹤的基本流程與框架,目標跟蹤存在的挑戰,目標跟蹤相關方法,以及目標跟蹤最新的進展等,希望通過這篇文章能讓讀者對視覺目標跟蹤領域有一個較為全面的認識。
1.視覺目標跟蹤基本流程與框架
視覺目標(單目標)跟蹤任務就是在給定某視訊序列初始幀的目標大小與位置的情況下,預測後續幀中該目標的大小與位置。這一基本任務流程可以按如下的框架劃分:
輸入初始化目標框,在下一幀中產生眾多候選框(Motion Model),提取這些候選框的特徵(Feature Extractor),然後對這些候選框評分(Observation Model),最後在這些評分中找一個得分最高的候選框作為預測的目標(Prediction A),或者對多個預測值進行融合(Ensemble)得到更優的預測目標。
根據如上的框架,我們可以把目標跟蹤劃分為5項主要的研究內容. (1)運動模型:如何產生眾多的候選樣本。(2)特徵提取:利用何種特徵表示目標。(3)觀測模型:如何為眾多候選樣本進行評分。(4)模型更新:如何更新觀測模型使其適應目標的變化。(5)整合方法:如何融合多個決策獲得一個更優的決策結果。下面分別簡要介紹這5項研究內容。
運動模型(Motion Model):生成候選樣本的速度與質量直接決定了跟蹤系統表現的優劣。常用的有兩種方法:粒子濾波(Particle Filter)和滑動視窗(Sliding Window)。粒子濾波是一種序貫貝葉斯推斷方法,通過遞迴的方式推斷目標的隱含狀態。而滑動視窗是一種窮舉搜尋方法,它列出目標附近的所有可能的樣本作為候選樣本。
特徵提取(Feature Extractor): 鑑別性的特徵表示是目標跟蹤的關鍵之一。常用的特徵被分為兩種型別:手工設計的特徵(Hand-crafted feature)和深度特徵(Deep feature)。常用的手工設計的特徵有灰度特徵(Gray),方向梯度直方圖(HOG),哈爾特徵(Haar-like),尺度不變特徵(SIFT)等。與人為設計的特徵不同,深度特徵是通過大量的訓練樣本學習出來的特徵,它比手工設計的特徵更具有鑑別性。因此,利用深度特徵的跟蹤方法通常很輕鬆就能獲得一個不錯的效果。
觀測模型(Observation Model):大多數的跟蹤方法主要集中在這一塊的設計上。根據不同的思路,觀測模型可分為兩類:生成式模型(Generative Model)和判別式模型(Discriminative Model). 生成式模型通常尋找與目標模板最相似的候選作為跟蹤結果,這一過程可以視為模板匹配。常用的理論方法包括:子空間,稀疏表示,字典學習等。而判別式模型通過訓練一個分類器去區分目標與背景,選擇置信度最高的候選樣本作為預測結果。判別式方法已經成為目標跟蹤中的主流方法,因為有大量的機器學習方法可以利用。常用的理論方法包括:邏輯迴歸,嶺迴歸,支援向量機,多示例學習,相關濾波等。
模型更新(Model Update): 模型更新主要是更新觀測模型,以適應目標表觀的變化,防止跟蹤過程發生漂移。模型更新沒有一個統一的標準,通常認為目標的表觀連續變化,所以常常會每一幀都更新一次模型。但也有人認為目標過去的表觀對跟蹤很重要,連續更新可能會丟失過去的表觀資訊,引入過多的噪音,因此利用長短期更新相結合的方式來解決這一問題。
整合方法(Ensemble Method): 整合方法有利於提高模型的預測精度,也常常被視為一種提高跟蹤準確率的有效手段。可以把整合方法籠統的劃分為兩類:在多個預測結果中選一個最好的,或是利用所有的預測加權平均。
2.視覺目標跟蹤面臨的挑戰
視覺運動目標跟蹤是一個極具挑戰性的任務,因為對於運動目標而言,其運動的場景非常複雜並且經常發生變化,或是目標本身也會不斷變化。那麼如何在複雜場景中識別並跟蹤不斷變化的目標就成為一個挑戰性的任務。如下圖我們列出了目標跟蹤中幾個主要的挑戰因素:
其中遮擋(Occlusion)是目標跟蹤中最常見的挑戰因素之一,遮擋又分為部分遮擋(Partial Occlusion)和完全遮擋(Full Occlusion)。解決部分遮擋通常有兩種思路:(1)利用檢測機制判斷目標是否被遮擋,從而決定是否更新模板,保證模板對遮擋的魯棒性。(2)把目標分成多個塊,利用沒有被遮擋的塊進行有效的跟蹤。對於目標被完全遮擋的情況,當前也並沒有有效的方法能夠完全解決。
形變(Deformation)也是目標跟蹤中的一大難題,目標表觀的不斷變化,通常導致跟蹤發生漂移(Drift)。解決漂移問題常用的方法是更新目標的表觀模型,使其適應表觀的變化,那麼模型更新方法則成為了關鍵。什麼時候更新,更新的頻率多大是模型更新需要關注的問題。
背景雜斑(Background Clutter)指得是要跟蹤的目標周圍有非常相似的目標對跟蹤造成了干擾。解決這類問題常用的手段是利用目標的運動資訊,預測運動的大致軌跡,防止跟蹤器跟蹤到相似的其他目標上,或是利用目標周圍的大量樣本框對分類器進行更新訓練,提高分類器對背景與目標的辨別能力。
尺度變換(Scale Variation)是目標在運動過程中的由遠及近或由近及遠而產生的尺度大小變化的現象。預測目標框的大小也是目標跟蹤中的一項挑戰,如何又快又準確的預測出目標的尺度變化係數直接影響了跟蹤的準確率。通常的做法有:在運動模型產生候選樣本的時候,生成大量尺度大小不一的候選框,或是在多個不同尺度目標上進行目標跟蹤,產生多個預測結果,選擇其中最優的作為最後的預測目標。
當然,除了上述幾個常見的挑戰外,還有一些其他的挑戰性因素:光照(illumination),低解析度(Low Resolution),運動模糊(Motion Blur),快速運動(Fast Motion),超出視野(Out of View),旋轉(Rotation)等。所有的這些挑戰因數共同決定了目標跟蹤是一項極為複雜的任務。更多資訊請參考http://cvlab.hanyang.ac.kr/tracker_benchmark/datasets.html。
3.視覺目標跟蹤方法
視覺目標跟蹤方法根據觀測模型是生成式模型或判別式模型可以被分為生成式方法(Generative Method)和判別式方法(Discriminative Method)。前幾年最火的生成式跟蹤方法大概是稀疏編碼(Sparse Coding)了, 而近來判別式跟蹤方法逐漸佔據了主流地位,以相關濾波(Correlation Filter)和深度學習(Deep Learning)為代表的判別式方法也取得了令人滿意的效果。下面我們分別簡要概括這幾種方法的大體思想和其中的一些具體的跟蹤方法。
稀疏表示(Sparse Representation):給定一組過完備字典,將輸入訊號用這組過完備字典線性表示,對線性表示的係數做一個稀疏性的約束(即使得係數向量的分量儘可能多的為0),那麼這一過程就稱為稀疏表示。基於稀疏表示的目標跟蹤方法則將跟蹤問題轉化為稀疏逼近問題來求解。如稀疏跟蹤的開山之作L1Tracker, 認為候選樣本可以被稀疏的表示通過目標模板和瑣碎模板,而一個好的候選樣本應該擁有更稀疏的係數向量。稀疏性可通過解決一個L1正則化的最小二乘優化問題獲得,最後將與目標模板擁有最小重構誤差的候選樣本作為跟蹤結果。L1Tracker中利用瑣碎模板處理遮擋,利用對稀疏係數的非負約束解決背景雜斑問題。隨後在L1Tracker基礎上的改進則有很多,比較有代表性的有ALSA,L1APG等。
相關濾波(Correlation Filter):相關濾波源於訊號處理領域,相關性用於表示兩個訊號之間的相似程度,通常用卷積表示相關操作。那麼基於相關濾波的跟蹤方法的基本思想就是,尋找一個濾波模板,讓下一幀的影象與我們的濾波模板做卷積操作,響應最大的區域則是預測的目標。根據這一思想先後提出了大量的基於相關濾波的方法,如最早的平方誤差最小輸出和(MOSSE)利用的就是最樸素的相關濾波思想的跟蹤方法。隨後基於MOSSE有了很多相關的改進,如引入核方法(Kernel Method)的CSK,KCF等都取得了很好的效果,特別是利用迴圈矩陣計算的KCF,跟蹤速度驚人。在KCF的基礎上又發展了一系列的方法用於處理各種挑戰。如:DSST可以處理尺度變化,基於分塊的(Reliable Patches)相關濾波方法可處理遮擋等。但是所有上述的基於相關濾波的方法都受到邊界效應(Boundary Effect)的影響。為了克服這個問題SRDCF應運而生,SRDCF利用空間正則化懲罰了相關濾波係數獲得了可與深度學習跟蹤方法相比的結果。
深度學習(CNN-Based):因為深度特徵對目標擁有強大的表示能力,深度學習在計算機視覺的其他領域,如:檢測,人臉識別中已經展現出巨大的潛力。但早前兩年,深度學習在目標跟蹤領域的應用並不順利,因為目標跟蹤任務的特殊性,只有初始幀的圖片資料可以利用,因此缺乏大量的資料供神經網路學習。只到研究人員把在分類影象資料集上訓練的卷積神經網路遷移到目標跟蹤中來,基於深度學習的目標跟蹤方法才得到充分的發展。如:CNN-SVM利用在ImageNet分類資料集上訓練的卷積神經網路提取目標的特徵,再利用傳統的SVM方法做跟蹤。與CNN-SVM提取最後一層的深度特徵不同的是,FCN利用了目標的兩個卷積層的特徵構造了可以選擇特徵圖的網路,這種方法比只利用最後的全連線層的CNN-SVM效果有些許的提升。隨後HCF, HDT等方法則更加充分的利用了卷積神經網路各層的卷積特徵,這些方法在相關濾波的基礎上結合多層次卷積特徵進一步的提升了跟蹤效果。然而,跟蹤任務與分類任務始終是不同的,分類任務關心的是區分類間差異,忽視類內的區別。目標跟蹤任務關心的則是區分特定目標與背景,抑制同類目標。兩個任務有著本質的區別,因此在分類資料集上預訓練的網路可能並不完全適用於目標跟蹤任務。於是,Nam設計了一個專門在跟蹤視訊序列上訓練的多域(Multi-Domain)卷積神經網路(MDNet),結果取得了VOT2015比賽的第一名。但是MDNet在標準集上進行訓練多少有一點過擬合的嫌疑,於是VOT2016比賽中禁止在標準跟蹤資料集上進行訓練。2016年SRDCF的作者繼續發力,也利用了卷積神經網路提取目標特徵然後結合相關濾波提出了C-COT的跟蹤方法取得了VOT2016的冠軍。
4.視覺目標跟蹤最新進展
目標跟蹤最近幾年發展迅速,以基於相關濾波(Correlation Filter)和卷積神經網路(CNN)的跟蹤方法已經佔據了目標跟蹤的大半江山。如下圖給出的2014-2017年以來表現排名靠前的一些跟蹤方法。
可以看到前三名的方法不是基於相關濾波的方法就是基於卷積神經網路的方法,或是兩者結合的方法。比如ECCV2016的C-COT就是在相關濾波的基礎上結合卷積神經網路的傑作。下圖給出這些方法在標準跟蹤資料集OTB2013上的跟蹤結果:
可以看到基於卷積神經網路的方法取得了驚人的突破。預計未來兩年相關濾波和卷積神經網路將仍然會是目標跟蹤領域的主角。