第一步:将跟踪结果保存为OTB_benchmark所要求的格式,即.mat格式:
本文以2015_CVPR_DAT_USABLE算法为例,在使用其他算法时,在相应处做修改即可。
clear;clc;
close all;
%将2015_CVPR_DAT_USABLE算法使用的文件添加进来
addpath('.\src');
%数据集路径路径
base_path = 'F:\my_second_paper_result\files_used_for_my_second\OTB100';
% 视频序列
videos = {'Biker', 'Bird1','Bird2','BlurBody', 'BlurCar2','BlurFace','BlurOwl','Board','Box',... 'Boy','Car1','Car2','Car4','Car24','CarScale','ClifBar','Coke','Coupon','Crowds','Dancer',...
'Dancer2','David2','David3','Deer','Dog','Dog1','Doll','DragonBaby','Dudek','FaceOcc1',...
'FaceOcc2','Fish','FleetFace','Football','Freeman1', 'Girl','Gym','Human2','Human3','Human4',...
'Human6','Human7','Human8','Human9','Ironman','Jump','Jumping','KiteSurf',... 'Lemming','Liquor','Man','Mhyang','MountainBike','Panda','RedTeam','Rubik','Skater','Skater2',...
'Skating1','Skiing','Subway','Surfer','Suv','Sylvester','Toy','Trans','Trellis','Twinnings','Vase',...
'Walking','Walking2','Woman'};
% 跟踪器名字
tracker='2015_CVPR_DAT_USABLE';
% 保存路径
savePath='.\results\';
for vid = 1:numel(videos)
close all;
disp(videos{vid});
video_path = [base_path '\' videos{vid}];
[seq, ground_truth] = load_video_info(video_path,0);
seq.VidName = videos{vid};
st_frame = 1;
en_frame = seq.len;
seq.st_frame = st_frame;
seq.en_frame = en_frame;
% 帧数
num_frames=en_frame-st_frame+1;
img_dir=seq.s_frames;
%此处是关键。本人将2015_CVPR_DAT_USABLE的主函数修改为一个子函数,将以上获得的相关参
%数作为输入,获得后续处理所需要的 rect_position, time。在使用其他算法时,需根据算法的具体情
%况,考虑将算法中的哪个函数放在此处使用。
[rect_position, time] = demo_DAT_USABLE(num_frames,seq,ground_truth,img_dir);
%
fps = (en_frame-st_frame) / time;
results{1}.type = 'rect';
results{1}.res = rect_position;
results{1}.fps = fps;
results{1}.len = num_frames;
results{1}.annoBegin = st_frame;
results{1}.startFrame = st_frame;
save([savePath videos{vid} '_' tracker '.mat'], 'results');
end
第二步:将第一步获得的.mat结果经OTB_benchmark中获得性能图。
① 先对OTB_benchmark中的util\configTrackers.m,util\configSeqs.m进行设置。此处我在试着做时添加了两个算法,四个序列。若需要更多算法和更多的序列,照此添加即可(CSDN中很多可参考博客),具体如下:
function seqs=configSeqs
seqOTB49_100={struct('name','Biker','path','F:\my_second_paper_result\files_used_for_my_second\OTB100\Biker\img\','startFrame',1,'endFrame',142,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
struct('name','Bird1','path','F:\my_second_paper_result\files_used_for_my_second\OTB100\Bird1\img\','startFrame',1,'endFrame',408,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
struct('name','Bird2','path','F:\my_second_paper_result\files_used_for_my_second\OTB100\Bird2\img\','startFrame',1,'endFrame',99,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
struct('name','BlurBody','path','F:\my_second_paper_result\files_used_for_my_second\OTB100\BlurBody\img\','startFrame',1,'endFrame',334,'nz',4,'ext','jpg','init_rect', [0,0,0,0])
};
seqs=seqOTB49_100;
end
%%%%%%%%%%%%%%%%%
function trackers=configTrackers
trackersNew={
struct('name','2015_CVPR_DAT_USABLE','namePaper','2015_CVPR_DAT_USABLE'),...
struct('name','2015_ICCV_CF2','namePaper','2015_ICCV_CF2')
};
trackers = trackersNew;
end
②接着将在第一步中获得的.mat结果放入benchmark中的results文件夹中,并以 results_OPE_‘算法名’的形式命名(由于本人第一次使用,暂不会贴图,只以以下形式给大家列出我的.mat文件的存放形式):
#results(文件夹)
##results_OPE_2015_CVPR_DAT_USABLE(文件夹)
### Biker_2015_CVPR_DAT_USABLE.mat
### Bird1_2015_CVPR_DAT_USABLE.mat
### Bird2_2015_CVPR_DAT_USABLE.mat
### BlurBody_2015_CVPR_DAT_USABLE.mat
## results_OPE_2015_ICCV_CF2(文件夹)
### Biker_2015_ICCV_CF2.mat
### Bird1_2015_ICCV_CF2.mat
### Bird2_2015_ICCV_CF2.mat
### BlurBody_2015_ICCV_CF2.mat
即各文件的关系为
results\results_OPE_2015_CVPR_DAT_USABLE\Biker_2015_CVPR_DAT_USABLE.mat,…
③修改perfPlot.m函数,增加 addpath(’.\util’),后续会用到里面的函数,否则运行会出错
clear
close all;
clc
addpath('.\util'); %%此处为perfPlot.m第一处一修改
addpath(('.\rstEval'));
attPath = '.\anno\att\';
......
evalTypeSet = 'OPE'; %%第103行的evalTypeSet改为OPE,可能需要的第二处修改
...
1. List item
④修改genPerfMat.m函数:
找到此处(26~37行),将第31行的rpAll修改为如下形式(当configTrackers中使用多个算法时此处需修改,否则找不到相应算法的.mat文件),其他处不用修改:
for idxTrk=1:numTrk
switch evalType
case 'SRE'
rpAll=['.\results\results_SRE_CVPR13\'];
case {'TRE', 'OPE'}
rpAll= [ '.\results\results_OPE_' trackers{1,idxTrk}.name '\']; %%此处修改
end
t = trackers{idxTrk};
% load([rpAll s.name '_' t.name '.mat'], 'results','coverage','errCenter')
load([rpAll s.name '_' t.name '.mat']);
disp([s.name ' ' t.name]);
所有修改到此结束,此时直接运行perfPlot.m函数就可以获得18张性能图。
说明:本人在参考OTB-benchmark过程中,未见各位大神将整个过程较为详细地写出,且绝大部分只例举了单个算法时的修改,未就使用多个算法的修改情形做介绍,作为小白,深感不便。在参考大神们的修改方法,并结合自己的理解,在尝试获得多算法的性能对比图时,侥幸顺利得到了结果,便分享给大家。本人小白一枚,暂不会在CSDN贴图,亦不敢与各位大神相提并论,所以若有不足之处,望大家海涵。
参考博客:
[1] https://blog.csdn.net/qq_17783559/article/details/90485701 博博有个大大大的Dream
[2] https://www.cnblogs.com/eraserNut/p/8401320.html
特别感谢 ‘博博有个大大大的Dream ’博主,总能帮大家跳过复杂的OTB或VOT toolkit配置,顺利得到想要的结果!!