一、代码及依赖库下载
1、下载Object Tracking Benchmark工具:tracker_benchmark_v1.0.zip
下载地址:http://cvlab.hanyang.ac.kr/tracker_benchmark/index.html
2、下载OTB100数据集:
建议使用百度云下载: https://blog.csdn.net/qq_17783559/article/details/82079220
注:tracker_benchmark_v1.0初始用的是虽然是OTB50的数据集,但是程序中拓展了一些OTB100的图像序列,所以,我们下载数据集时,应该用OTB100的数据集,否则会有一些图像序列无法找到。
3、下载vlfeat工具包
下载地址:http://www.vlfeat.org/index.html
二、运行测试代码
4、打开main_running.m,更改vlfeat工具包所在路径,将20行改为 evalType=‘OPE’; %‘OPE’,‘SRE’,‘TRE’(我们只测试OPE)
5、打开util目录下的configSeqs.m,更改读取图像序列路径(数据集下载地址:https://blog.csdn.net/qq_17783559/article/details/82079220)
数据集所在路径可以通过“Ctrl+F”选择替换,但是更深一层路径img\需要一个一个地添加,工作量大。提供百度云下载地址,直接使用即可:链接:https://pan.baidu.com/s/1ZFW1fffaDcUq9lkhfyk8Lw 提取码:kb72
6、打开util目录下的configTrackers.m,更改测试目标跟踪算法(此处用ICCV2017跟踪算法BACF为例)
7、在trackers路径下新建BACF文件夹,并且将算法代码放入文件夹中(BACF代码下载和配置地址:https://blog.csdn.net/qq_17783559/article/details/82081255)
8、打开run_BACF.m
(1)更改31行为:
params.learning_rate = 0.013; % learning rate
(2)更改46-48行为:
params.no_fram = numel(params.s_frames);
%params.seq_st_frame = seq.st_frame;
%params.seq_en_frame = seq.en_frame;
三、测试说明
(1) 当我们在configTrackers.m中配置算法名称为BACF时,主程序会跳转到trackers\BACF\run_BACF.m来执行我们的跟踪代码。举一反三,如果我们的算法名称为XXX,主程序则会跳转到trackers\XXX\run_XXX.m来执行我们的跟踪代码。
(2)跟踪代码run_XXX.m参考以下格式:
function results=run_XXX(seq, video_path, bSaveImage)
%获取图像序列
s_frames = seq.s_frames;
%存放每一帧目标框的位置
rect_position = zeros(numel(s_frames), 4);
%循环处理每一帧图像
for frame = 1:numel(s_frames),
%load image
im = imread(s_frames{frame});
if size(im,3) > 1,
im = rgb2gray(im);
end
%你的跟踪代码
end
%返回的跟踪结果
results.type = 'rect';
results.res = rect_position;%each row is a rectangle
results.fps = fps;
9、运行main_running.m,最终结果保存在results\results_OPE_CVPR13目录下
注: 如果不想显示实时跟踪效果,加快运算速度,可以更改run_BACF.m的56行为params.visualization = 0;
四、画Precision和Success曲线
10、将results\results_OPE_CVPR13中生成跟踪结果mat文件拷贝到results\results_SRE_CVPR13和results\results_TRE_CVPR13文件夹中
11、打开perfPlot.m
(1)更改103行为:
evalTypeSet = ‘OPE’;
注:不要加中括号写成evalTypeSet = {‘OPE’},否则会报错。
(2)更改105行为:
rankingType = ‘threshold’;%AUC, threshod
注:不要直接复制105行后面的threshod,因为作者粗心写错了,中间少了一个“l”。
(3)更改140行为:
for j=1:1
(4)更改142行为:
evalType = evalTypeSet;%SRE, TRE, OPE
(5)CarDark XXX 未定义与 ‘double’ 类型的输入参数相对应的函数 'calcRectInt:
perfPlot程序前面添加:addpath(’./rstEval’);
12、运行perfPlot.m,得到12张Precision和12张Success图,结果保存在tracker_benchmark_v1.0\figs\overall目录中
注:如果更新算法得到新的跟踪结果mat文件,在plot之前,请务必先删除 tracker_benchmark_v1.0\perfMat\overall目录下的所有.mat文件,否则数据将不会更新。
每次运行前先删除上次perfMat/overall中的文件。
13、多个算法对比
更改util\configTrackers.m为:
function trackers=configTrackers
trackersNew={
struct('name','SMS','namePaper','SMS'),...
struct('name','CT','namePaper','CT'),...
struct('name','TLD','namePaper','TLD'),...
struct('name','CSK','namePaper','CSK'),...
struct('name','BACF','namePaper','BACF')};
trackers = trackersNew;
运行perfPlot.m
五、画跟踪效果图
14、运行drawResultBB.m,跟踪结果保存在tracker_benchmark_v1.0\tmp\imgs目录中
15、更改 util\configTrackers.m可以添加对比算法,更改util\configSeqs.m可以控制需要画图的图像序列。
其中tracker排序是你在configTrackers.m文件中的tracker排序,对应的红色是第一个tracker,绿色是第二个tracker,一次类推。
16、去除保存边框
原始代码保存的图像如下,存在厚厚的边框,不助于论文排版
更改drawResultBB.m的116行为:
q=get(gca,'position');
q(1)=0;%设置左边距离值为零
q(2)=0;%设置右边距离值为零
set(gca,'position',q);
[m,n,flag]=size(img);
imwrite(frame2im(getframe(gcf,[0,0,n,m])), [pathSave num2str(i) '.png']);
%imwrite(frame2im(getframe(gcf)), [pathSave num2str(i) '.png']);
再次运行drawResultBB.m,得到保存图像
六、福利环节
至此,所有步骤全部配置完,配置的好的版本百度云下载地址如下 :
链接:https://pan.baidu.com/s/1eCFfoUtlSGM98YJlwpFT3w
提取码:xexv(注:为了减小文件大小,里面不包含BACF及所有对比算法的结果)