【目標跟蹤Opencv與fDsst總結(C++程序)】

雖然現有好多跟蹤算法,在OTB和VOT跟蹤算法評價數據集上通過種種諸如交併比,中心位置偏移率等評價其好壞,但是對於一個工程實踐人員來說,我只關心算法實際效果和速度如何。因此我就把自己用到的opencv裏面跟蹤算法API和fDsst跟蹤算法進行了一個實踐。跟蹤目標很簡單,就是1920X1080的無人機單個目標,看一下哪個實際效果速度更快。並繪製其軌跡形狀。

繪製軌跡的思路很簡單,就是使用一個數組存儲軌跡跟蹤點中心座標,然後當跟蹤點數目大於2後可採用opencv中的line繪製線函數,或者直接用circle函數繪製中心點座標即可,然後再將其顯示。

由於代碼太多,所以全部代碼(修改輸入視頻路徑即可使用)

github傳送門:https://github.com/TakumiWzy/trackingTarget

效果如下:

本文對Opencv中的opencv_contrib模塊tracking.hpp中的幾種跟蹤算法API進行使用,並對比了fDsst跟蹤算法的效果。

環境配置:Opencv3.4+opencv_contrib3.4模塊。(3.X時代以後,opencv把一些不太完善、性能不穩定的模塊,如DNN模塊,xfeatures2d包含sift和surf,tracking等模塊。放在裏面,用戶可以自行選擇使用cmake編譯,詳情見github介紹opencv_contrib

平臺:Vs2017+Win10

1.用到的對比跟蹤算法:

  1. fDsst:(C++代碼)
  2. MIL:(Visual Tracking with Online Multiple Instance Learning (MIL))
  3. TLD:(Tracking-Learning-Detection)
  4. MedianFlow: (中值流跟蹤算法,是屬於TLD跟蹤算法中的Tracking部分。)
  5. KCF: (High-speed tracking with kernelized correlation filters聽到最多就是這個了好多相關濾波都是根據這個改進的。)
  6. Boosting: (基於Haar cascades(AdaBoost)背後所用的機器學習算法相同)
  7. CSRT: 比KCF稍精確,但速度不如KCF。
  8. GOTURN: Generic Object Tracking Using Regression Networks(這是OpenCV中唯一深度學習爲基礎的目標檢測器。使用caffe模型進行跟蹤。 Caffe模型和原始文本文件必須存在於代碼所在的目錄中。 這些文件也可以從opencv_extra存儲庫下載)使用方法:https://www.learnopencv.com/goturn-deep-learning-based-object-tracking/

2.相關濾波算法簡介。

因爲opencv裏面的跟蹤算法都是比較老的了,fdsst算是一個比較新的而且速度效果都還不錯的算法。其是基於dsst跟蹤算法的一個改進版本。作者都是林雪平大學的Martin Danelljan。縱觀其發表的論文,可以發現CN(color name或稱顏色空間)也是其發表的。而CN又是根據CSK改進的。而CSK->KCF/DCF/CN,又是另外一個作者João F. Henriques。而CSK又是根據MOSSE改進的。而MOSSE又是David S. Bolme J.終於到發源地了,沒錯就是這篇2010年的CVPR《isual object tracking using adaptive correlation filters》將相關濾波引入目標跟蹤算法領域後開始被後面廣泛應用。這裏就簡單做個總結。相關濾波跟蹤算法基本上就是在解決從目標框改進優化訓練一個比較好的相關濾波器。

3.fDsst簡介。

DSST(Discriminative Scale Space Tracker)(2014年),加入尺度信息的相關濾波器跟蹤算法。跟蹤主要分爲兩塊,即兩個獨立濾波器的訓練和測試和更新。一個位置濾波器(加入了約束項來提高魯棒性能,計算方法和更新方法類似),一個尺度濾波器(採用的是一種快速的尺度空間跟蹤方式,即在定位位置中心開始向內向外採集樣本,大小是一種非線性的指數縮放關係,基於離原始大小越近越精細,越遠越粗略的想法,code中用的底是1.02,採集33個。)。

fDsst(Accurate Scale Estimation for Robust Visual Tracking)(2017年)是前者一個優化版本。fDSST是對DSST的加速優化,fDSST採用了兩個技巧對算法進行了大幅加速,加速後的優勢就是搜索框可以更大了,所以精度上也有提升。兩個技巧是:特徵降維和插值。對於位置濾波器,PCA特徵降維,paper用線性核。(具體細節還得需理解代碼之後)

4.代碼效果:

由於網上fdsst代碼好多是Matlab的,或者是C++的但是都是在OTB數據集上跑的,我找了找C++代碼後改了一些輸入格式,然後可以直接運行,需要把頭文件加到項目文件下,修改一下自己的視頻或者圖片集的輸入路徑即可。

main函數代碼:(其餘代碼見github

1920x1080視頻無人機目標跟蹤FPS:

目標跟蹤算法 實際FPS效果
fDsst 45.4545
MIL 1.65489
TLD 0.592768
MedianFlow 3.93391
KCF 58.3386
Boosting 0.02333
CSRT 4.43131
GOTURN

5.46648

最後一個算法需要下載:goturn.caffemodel.zip.00X四個模型文件,然後使用7zip合併四個壓縮文件,再將goturn.prototxt和goturn.caffemodel兩個文件到工程目錄下。

(PS:不知道是不是視頻太大原因,有些算法速度好慢。。。)

 

參考資料:

https://zhuanlan.zhihu.com/p/27865265

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