目標跟蹤環境配置(四):OTB配置安裝 (從下載到繪圖)

目標跟蹤基礎與智能前沿

點擊上方鏈接,微信關注回覆下方安裝包對應的關鍵詞,獲得對應的百度雲下載鏈接

論文原文

1) Online Object Tracking: A Benchmark

1、下載OTB數據集

1)官網下載地址(國內網速原因很慢):
2)百度雲下載地址: 自動回覆關鍵詞“OTB”

2、預先安裝好matlab : matlab安裝

3、下載OTB測試工具

1)下載地址:Visual Tracker Benchmark

tracker_benchmark_v1.0.zip (229MB).

4、安裝OTB,下載上述安裝包之後解壓縮

5、使用OTB

1) 各個文件的功能

(1) main_running.m 是用來在測試集上跑跟蹤代碼的,跑出的結果存在results文件夾中;

(2) perfPlot.m 用來把測試結果畫出圖來,就是benchmark網上的圖的效果。

如果你第一次下載tracker_benchmark_v1.0的測試代碼,可以先運行perfPlot.m就可以直接畫出漂亮的圖。只不過這些圖是已有的跟蹤算法和測試結果,作者都保存在results文件夾裏面了;

(3) drawResultBB.m 用於畫每個幀上不同跟蹤器的邊界框的主函數

(4) anno 註釋文件(邊界框和屬性)的目錄;

(5) initOmit 包含由於遮擋或目標超出視野而被省略的用於跟蹤初始化的幀的註釋 的目錄;

(6) rstEval 包含了很多用於計算跟蹤性能或者畫出結果的腳本的目錄;

(7) trackers 包含了很多跟蹤器代碼的目錄,裏面有20多個跟蹤代碼,有matlab版,也有c++版;

(8) tmp 用來存放臨時結果或者日誌文件的目錄;

(9) results包含了所有已有跟蹤算法測試結果;

(10) util 包含主函數裏用到的腳本的目錄***(主要就是這個文件夾裏的文件需要改***)。

————————————————

2) 首次安裝,測試 perfPlot.m

(1)打開matlab

cd /usr/local/MATLAB/R2017b/bin
matlab

(2) 在matlab 裏打開 上述解壓後的文件夾 :tracker_benchmark_v1.0

(3) 找到perfPlot.m ,運行會報錯 , 試試修改代碼

3)更改測試代碼

在這裏插入圖片描述
(1)util/configTrcakers.m文件,打開,這裏面是所有跟蹤算法名字的數組,會在main_running.m和perfPlot.m中被調用到。因爲results文件夾中已經包含已有跟蹤算法的測試結果,所以其實沒必要再重新跑一遍所有算法,時間太長。故而直接將configTrackers.m文件中的所有註釋掉,改成如下三行代碼即可:(就是說讓這個文件夾裏只有你自己寫的跟蹤算法,這樣一會執行main_running.m的時候,就不用在測試集上挨個跑已有跟蹤算法了)
修改前:

function trackers=configTrackers

trackersVIVID={struct('name','VR','namePaper','VR-V'),...%gray-25%
    struct('name','TM','namePaper','TM-V'),...%dark red
    struct('name','RS','namePaper','RS-V'),...%orange
    struct('name','PD','namePaper','PD-V'),...%Turquoise
    struct('name','MS','namePaper','MS-V')%purple
};

trackers1={   struct('name','CT','namePaper','CT'),...
    struct('name','TLD','namePaper','TLD'),...    
    struct('name','IVT','namePaper','IVT'),...
    struct('name','DFT','namePaper','DFT'),...%yellow
    struct('name','ASLA','namePaper','ASLA'),...
    struct('name','L1APG','namePaper','L1APG'),...    
    struct('name','ORIA','namePaper','ORIA'),...
    struct('name','MTT','namePaper','MTT'),...
    struct('name','CSK','namePaper','CSK'),...
    struct('name','SCM','namePaper','SCM'),...
    struct('name','LOT','namePaper','LOT')};

trackersEXE={ struct('name','CPF','namePaper','CPF'),...
    struct('name','Struck','namePaper','Struck'),...
    struct('name','MIL','namePaper','MIL'),...
    struct('name','OAB','namePaper','OAB'),...
    struct('name','SBT','namePaper','SemiT'),...
    struct('name','BSBT','namePaper','BSBT'),...
    struct('name','Frag','namePaper','Frag'),...
    struct('name','KMS','namePaper','KMS'),...
    struct('name','SMS','namePaper','SMS'),...
    struct('name','LSK','namePaper','LSK'),...
    struct('name','VTS','namePaper','VTS'),...
    struct('name','VTD','namePaper','VTD'),...
    struct('name','CXT','namePaper','CXT')};

trackers = [trackersVIVID,trackers1,trackersEXE];

修改後: 這樣一會執行main_running.m的時候,就不用在測試集上挨個跑已有跟蹤算法了)

function trackers=configTrackers
trackersNEW={struct('name','LCSVM','namePaper','LCSVM')};
trackers=trackersNEW;

? 自己的方法模型放在哪裏?或者想要對比的模型代碼放在哪裏?

(2)util/configSeqs.m文件,打開,這裏面是所有測試集的路徑及其屬性。需要把裏面所有測試序列的路徑改成你main_runing.m函數能夠讀到的路徑,建議用絕對路徑,類似於(這是測試集的路徑):
'/media/yuuzh/dataDisk2T/Dataset/OTB/OTB100/Soccer/img

??原來的路徑類似於\\ soccer
在這裏插入圖片描述

? [seqIVT,seqVTD,seqOther], 這幾個序列的差別是?

上述修改後運行時出現問題,path之後的字段直接應該是路徑+ img後加 / ,讀取到的圖像會繼續讀入 ,需要重新修改後路徑如下:
在這裏插入圖片描述

(3)trackers/文件,打開,新建文件夾,命名LCSVM(你自己的方法)。打開LCSVM,將自己跟蹤算法的可執行文件LCSVM.exe保存進來,然後再新建一個run_LCSVM.m文件,用來配置算法的接口。可以直接從其他trackers文件裏面,把run_xx.m文件拷過來,因爲大同小異。拷過來之後稍作修改,我把我的run_LCSVM.m展出來,讀者可以觀察和其他run_xx.m的區別,很好理解。
————————————————
下面是tracker 下的各個跟蹤器。
Tracker 文件夾

? 自己的算法如何生成可執行文件exe

其實就是通過dos命令將測試序列的名稱、路徑、起始幀等餵給你的跟蹤算法,當然前提是你的跟蹤算法裏面一定要預留這些接口。跟蹤算法裏面還要將每一幀的跟蹤結果輸出到LCSVM_ST.txt的文件夾裏面,這樣才能被上面的matlab代碼讀到來生成最終結果。

run_stuck.m

function results=run_Struck(seq, res_path, bSaveImage)% 

close all;

x=seq.init_rect(1)-1;%matlab to c
y=seq.init_rect(2)-1;
w=seq.init_rect(3);
h=seq.init_rect(4);

%featureName kernelName param svmC svmBudgetSize searchRadius seed
%featureName: raw haar histogram
%kernelName: linear gaussian intersection chi2
%seed: default - 0
tic
command = ['struck.exe haar gaussian 0.2 100 100 30 10 ' num2str(bSaveImage) ' ' num2str(bSaveImage) ' ' seq.name ' ' seq.path ' ' num2str(seq.startFrame) ' ' num2str(seq.endFrame) ' '  num2str(seq.nz) ' ' seq.ext ' ' num2str(x) ' ' num2str(y) ' ' num2str(w) ' ' num2str(h)];
dos(command);
duration=toc;

results.res = dlmread([seq.name '_ST.txt']);
results.res(:,1:2) =results.res(:,1:2) + 1;%c to matlab

results.type='rect';
results.fps=seq.len/duration;

results.fps = dlmread([seq.name '_ST_FPS.txt']);

(4)這些都做好了,就可以進入main_runing.m文件,執行這段代碼。執行過程中可能會有問題,比如這段代碼要註釋掉(這是vlfeat工具集的路徑,是OTB作者用來測試那些已有算法用的,我們這裏只測試自己的跟蹤算法):

在這裏插入圖片描述

· vlfeat 的安裝

另外我把這個修改成了OPE,因爲我只進行OPE的測試,認爲足以。當然讀者可以測試TRE和SRE。(這兩個是用來測試時空魯棒性的)

在這裏插入圖片描述
然後就應該不用改了,就可以執行main_running.m啦!!!就可以看到你的算法在所有測試集上面運行的效果啦!!!到這一步還是令人激動的。
————————————————

如果出現 某目錄不存在的情況,請檢查目錄是否少了/, 和自己的文件夾目錄覈查一下
在這裏插入圖片描述
修改爲OPE ,發現出現的錯誤:

目錄配置正確之後運行結果:
在這裏插入圖片描述
當出現以下錯誤 : 未找到命令, 應該是各個跟蹤器對應的.exe 沒有載入
在這裏插入圖片描述

這裏我們先忽略,不運行這些跟蹤器(沒有exe ,或許是文件位置的原因,但不影響其他跟蹤器的運行。

4) 畫出結果對比已有算法

main_running.m跑出的結果,會在results裏面有體現:

由於我跑的是OPE,所以我的算法跑出的結果在results_OPE_CVPR13文件夾中,我把裏面的結果全部複製,粘貼到results_SRE_CVPR13和results_TRE_CVPR13文件中(因爲在perfPlot.m文件中畫圖的時候用到了這兩個文件)。這個時候就可以直接運行perfPlot.m啦,出來的圖應該是隻有你自己的算法的運行結果,也就是隻有一條曲線。原因是:需要返回身來,把configTrackers.m文件修改一下,要把所有的跟蹤算法重新包含進來,當然還要加入自己的跟蹤算法。
————————————————
在這裏插入圖片描述
運行時報錯:
在這裏插入圖片描述
這是因爲, 文件名後綴是 小寫, matlab裏面讀取使用的都是大寫。

統一修改文件名的後綴爲大寫就好

bsbt ivt ,替換成 大寫的就好了

rename -v 's/_bsbt/_BSBT/' *.mat
rename -v 's/_ivt/_IVT/' *.mat

在這裏插入圖片描述

所有的該修改的修改之後,總結以下運行的順序

1、util/configTrcakers.m 註釋掉已經跑出結果的跟蹤器,保留自己需要測試的跟蹤器

在這裏插入圖片描述

2、util/configSeqs.m 修改測試集在本機上的目錄

注意path中文件的大小寫和目錄下的大小寫匹配,img後面 有‘/’

3、 trackers 目錄下,模仿其他跟蹤器,放入自己的跟蹤器模型和可執行文件

4、 startup.m 啓動 vl_feat庫

初始啓動vl_feat庫, 因爲main_runing.m中用到了

5、main_runing.m, 修改輸出的結果類型

該文件用到了多處路徑,注意源代碼中的轉移字符 \ 應該修改成路徑字符/ ,運行跟蹤器調用測試集,輸出results

6、檢查result文件夾,運行perfPlot.m, (對比configTrackers.m 加入所有跟蹤器,最後的圖曲線才全)

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