天天看點

tracker_benchmark_v1.0配置過程中出現的問題及解決方案

畢業設計是CV方向的,一直在調試tracker_benchmark_v1.0的代碼,遇到了很多的問題,本篇部落格記錄我遇到的問題和解決的辦法,也許還有錯誤的地方,歡迎大家一起讨論研究~

一、介紹和注意事項

我用的環境是MATLAB2019b

首先是到Visual Tracker Benchmark官網下載下傳壓縮包

解壓得到檔案後會有十五個項目,這裡我對幾個重要的項目進行介紹

項目名稱 存儲的内容或功能
figs overall檔案夾下存儲perfPlot.m運作得到的圖像,每次運作結果會得到24張圖檔,其中12張準确率圖12張成功率圖,12張圖檔中1張是全局對比圖11張是11種挑戰屬性下對比圖
perfMat overall檔案夾下存儲perfPlot.m運作得到的圖像對應的.mat檔案,一般有兩個
results 存儲的是main_running.m運作生成的.mat檔案
tmp imgs檔案夾下存儲的是drawResultBB.m運作得到的實時跟蹤圖
trackers 一共23個項目,其中VIVID_Tracker中包含5種跟蹤算法
util 存儲的是一些重要的.m檔案
drawResultBB.m 用于繪制實時跟蹤圖
main_running.m 用于生成.mat檔案
perfPlot.m 用于繪制準确率和成功率對比曲線

注意

1.11種挑戰屬性

挑戰屬性縮寫 挑戰屬性含義
IV 光照變化
SV 尺度變化
OCC 遮擋
DEF 形變
MB 運動模糊
FM 快速運動
IPR 平面内旋轉
OPR 平面外旋轉
OV 離開視野
BC 相似背景
LR 低分辨率

2.我有一個習慣就是每次運作不同跟蹤算法的perfPlot.m之前,我都會删除figs\overall和perfMat\overall下的所有檔案

3.我們需要手動在results檔案夾下建立一個results_OPE_CVPR13檔案,存放OPE标準下生成的.mat檔案

4.我們需要手動在tmp檔案夾下建立OPE.txt和SRE.txt,用于存儲OPE标準下或SRE标準下運作程式生成的日志

5.util檔案夾下我們主要修改configSeqs.m和congfiTrackers.m

運作的流程主要是main_running.m生成.mat檔案,drawResultBB.m生成實時跟蹤圖,perfPlot.m生成對比曲線圖。

二、configSeqs.m配置

1.到Visual Tracker Benchmark官網下載下傳OTB資料集所有視訊序列,包括OTB50和OTB100(依次點選每個圖檔)

如果你覺得費勁

OTB50網盤連結,提取碼:2gvh

OTB100網盤連結,提取碼:cqiw

2.修改configSeqs.m視訊路徑

按照下述方法修改,主要就是把視訊路徑更改一下然後在後面加上\img

如果你覺得費勁

修改好的configSeqs.m網盤連結,提取碼:59jv

(視訊是在OTB50還是OTB100我已經對應好了,你隻需要修改前面的路徑,也就是C:\Users\86139\Desktop\這塊内容)

seqVTD={struct('name','singer1','path','C:\Users\86139\Desktop\otb100\Singer1\img\','startFrame',1,'endFrame',351,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','soccer','path','C:\Users\86139\Desktop\otb50\Soccer\img\','startFrame',1,'endFrame',392,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','matrix','path','C:\Users\86139\Desktop\otb50\Matrix\img\','startFrame',1,'endFrame',100,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','ironman','path','C:\Users\86139\Desktop\otb50\Ironman\img\','startFrame',1,'endFrame',166,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','deer','path','C:\Users\86139\Desktop\otb50\Deer\img\','startFrame',1,'endFrame',71,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','skating1','path','C:\Users\86139\Desktop\otb50\Skating1\img\','startFrame',1,'endFrame',400,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','shaking','path','C:\Users\86139\Desktop\otb50\Shaking\img\','startFrame',1,'endFrame',365,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','singer2','path','C:\Users\86139\Desktop\otb50\Singer2\img\','startFrame',1,'endFrame',366,'nz',4,'ext','jpg','init_rect', [0,0,0,0])};

           

三、configTrackers.m配置

1.其中包含三個部分trackersVIVID、trackers1、trackersEXE,我是注釋了三個部分(ctrl+r),然後自己寫了一個子產品trackersTEST,測試CXT和CSK跟蹤算法(你有什麼需求可以更改對應的代碼),對應的代碼如下

function trackers=configTrackers

trackersTEST={struct('name','CSK','namePaper','CSK'),...
    struct('name','CXT','namePaper','CXT')};

trackers = [trackersTEST];
           

2.至于trackerVIVID中包含的MS、PD、RS、TM、VR5種跟蹤算法,我一直沒有調試出來,調試運作到每個run_XXX.m檔案中報錯

函數或變量tkMeanShift_Init未定義
函數或變量tkMeanShift_Next未定義
函數或變量tkPeakDifference_Init未定義
函數或變量tkPeakDifference_Next未定義
函數或變量tkRatioShift_Init未定義
函數或變量tkRatioShift_Next未定義
函數或變量tkTemplateMatch_Init未定義
函數或變量tkTemplateMatch_Next未定義
函數或變量tkVarianceRatio_Init未定義
函數或變量tkVarianceRatio_Next未定義
           

其中每個函數都有對應的dll檔案,我一開始懷疑自己的MATLAB版本過高,無法解析動态dll庫,以緻函數無法識别,但是我嘗試了很多版本的MATLAB以後發現還是不行,如果有解決這個問題的同學,歡迎一起交流讨論(最後我是放棄了這五個跟蹤算法,還有很多跟蹤算法在調試的過程中出現問題,我也是直接選擇了放棄,我主要利用這個資料集進行自己算法和KCF等一些算法的比較,是以這些算法沒有調試出來也沒有太大的影響)

注意

1.像視訊序列Jogging裡面有兩個groundtruth_rect.txt,對于這種視訊序列,我們把其一分為二,分成Jogging-1和Jogging-2兩個視訊序列(其中的img檔案夾是一樣的,這種情況是因為視訊序列中由兩個跟蹤目标,每一個.txt檔案對應其中一個目标的pos和target_sz)

四、main_running.m配置

1.我建議把MATLAB的目前檔案夾改成tracker_benchmark_v1.0,這樣所有的addPath都不會報錯,否則需要更改為絕對路徑

tracker_benchmark_v1.0配置過程中出現的問題及解決方案

2.下載下傳vlfeat工具,修改代碼第八行(對應好自己的路徑和vlfeat的版本)

3.把代碼第20行更改為OPE,資料集一共有三種評價标準OPE、SRE、TRE,其中OPE需要運作1次,SRE需要運作12次,TRE需要運作20次(其中TRE第1次結果為OPE)。我建議選擇OPE評價标準,因為隻需要運作一次,而且能滿足你的絕大部分需求。此外,有的跟蹤算法光是OPE一個視訊就要跑很久,如果是SRE或者TRE的話,沒幾天下不來。

運作之後的結果圖

tracker_benchmark_v1.0配置過程中出現的問題及解決方案
tracker_benchmark_v1.0配置過程中出現的問題及解決方案

一共是102個項目,一個跟蹤算法有51個項目

tracker_benchmark_v1.0配置過程中出現的問題及解決方案

注意

1.如果需要調試代碼的話,建議在第136和第144行設定兩個斷點,如果調試到第140行的時候直接跳轉到end,說明目前檔案不在tracker_benchmark_v1.0目錄下,極大可能是進入到了trackers下的某個算法檔案夾中,需要手動傳回上一級目錄;第136行運作結束後進入到相應算法的run_XXX.m,我一般習慣再在run_XXX.m中設定斷點進行調試,最好在run_XXX.m最後一部分顯示fps(一般在計算fps的下一行添加,如果原檔案有顯示的話就不必了,如果能顯示出fps的話,基本上這個算法是沒問題的,如果調試後遲遲沒顯示fps,就是太慢了)

2.如果顯示empty all表示錯誤運作,生成empty all的原因是已經存在了對應算法的.mat檔案,是以代碼在第105行進入到了checkResult.m,在load相應的.mat的檔案時發現為空,說明生成了錯誤的.mat檔案,需要手動删除results_OPE_CVPR13目錄下的所有.mat檔案(這裡說明,如果已經生成了.mat檔案且沒有錯誤的情況下,再次運作main_running.m不會生成新的.mat檔案,如果有需求則需要删除原來的所有.mat檔案)

3.如果在調試的過程中能夠顯示跟蹤算法的fps但是一直顯示error的話,建議把第157~163行注釋掉

五、drawResultBB.m配置

我們把results_OPE_CVPR13中的結果,也就是102個項目複制到results_SRE_CVPR13和results_TRE_CVPR13中(在results_SRE_CVPR13和results_TRE_CVPR13已經存在各個算法的.mat檔案,由于我這次舉得例子是CXT和CSK算法的對比,是以選擇替換,還是根據自己的需求進行更改)

運作drawResultBB.m,在tmp\imgs檔案夾下可以看到每個視訊序列中每一幀的實時跟蹤圖,由于我是進行了兩種算法的對比,是以有兩種框線

tracker_benchmark_v1.0配置過程中出現的問題及解決方案
tracker_benchmark_v1.0配置過程中出現的問題及解決方案

六、perfPlot.m配置

1.代碼的第49~59行是生成曲線圖的形狀配置,可以是直線、虛線、點等形狀,原代碼

plotDrawStyle10={   struct('color',[1,0,0],'lineStyle','-'),...
    struct('color',[0,1,0],'lineStyle','--'),...
    struct('color',[0,0,1],'lineStyle',':'),...
    struct('color',[0,0,0],'lineStyle','-'),...%    struct('color',[1,1,0],'lineStyle','-'),...%yellow
    struct('color',[1,0,1],'lineStyle','--'),...%pink
    struct('color',[0,1,1],'lineStyle',':'),...
    struct('color',[0.5,0.5,0.5],'lineStyle','-'),...%gray-25%
    struct('color',[136,0,21]/255,'lineStyle','--'),...%dark red
    struct('color',[255,127,39]/255,'lineStyle',':'),...%orange
    struct('color',[0,162,232]/255,'lineStyle','-'),...%Turquoise
    };
           

由于我喜歡直線,是以我都改成了直線圖(看自己的需求)

plotDrawStyle10={   struct('color',[1,0,0],'lineStyle','-'),...
    struct('color',[0,1,0],'lineStyle','-'),...
    struct('color',[0,0,1],'lineStyle','-'),...
    struct('color',[0,0,0],'lineStyle','-'),...%    struct('color',[1,1,0],'lineStyle','-'),...%yellow
    struct('color',[1,0,1],'lineStyle','-'),...%pink
    struct('color',[0,1,1],'lineStyle','-'),...
    struct('color',[0.5,0.5,0.5],'lineStyle','-'),...%gray-25%
    struct('color',[136,0,21]/255,'lineStyle','-'),...%dark red
    struct('color',[255,127,39]/255,'lineStyle','-'),...%orange
    struct('color',[0,162,232]/255,'lineStyle','-'),...%Turquoise
    };
           

2.由于我們主要測試OPE評價标準下跟蹤算法的性能,是以我們将原代碼第103行和第142行改為

103:
evalTypeSet = 'OPE';
142:
evalType = evalTypeSet;%SRE, TRE, OPE
           

3.為了得到準确率圖和成功率圖,我們将第105行修改為

在figs\overall檔案夾下生成了24張圖檔,12張準确率圖12張成功率圖

tracker_benchmark_v1.0配置過程中出現的問題及解決方案
tracker_benchmark_v1.0配置過程中出現的問題及解決方案
tracker_benchmark_v1.0配置過程中出現的問題及解決方案

全部的流程大概就是這樣,如果大家有什麼疑問或者本篇部落格有什麼錯誤,歡迎大家到下方評論,我有時間一定會及時解答

繼續閱讀