畢業設計是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都不會報錯,否則需要更改為絕對路徑
2.下載下傳vlfeat工具,修改代碼第八行(對應好自己的路徑和vlfeat的版本)
3.把代碼第20行更改為OPE,資料集一共有三種評價标準OPE、SRE、TRE,其中OPE需要運作1次,SRE需要運作12次,TRE需要運作20次(其中TRE第1次結果為OPE)。我建議選擇OPE評價标準,因為隻需要運作一次,而且能滿足你的絕大部分需求。此外,有的跟蹤算法光是OPE一個視訊就要跑很久,如果是SRE或者TRE的話,沒幾天下不來。
運作之後的結果圖
一共是102個項目,一個跟蹤算法有51個項目
注意
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檔案夾下可以看到每個視訊序列中每一幀的實時跟蹤圖,由于我是進行了兩種算法的對比,是以有兩種框線
六、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張成功率圖
全部的流程大概就是這樣,如果大家有什麼疑問或者本篇部落格有什麼錯誤,歡迎大家到下方評論,我有時間一定會及時解答