首先有读懂以下解决方案的基础:
https://blog.csdn.net/qq_33970986/article/details/105496382
按照这种方式修改之后,仍然出现error
遇到这种情况,主要是因为tracker中最后一行[seq, results] = get_sequence_results(seq)的问题,打开这个函数,
function [seq, results] = get_sequence_results(seq)
% »ñÈ¡ÐòÁнá¹û
if strcmpi(seq.format, 'otb')%otbÊý¾Ý¼¯
results.type = 'rect';
results.res = seq.rect_position;
elseif strcmpi(seq.format, 'vot')%votÊý¾Ý¼¯
seq.handle.quit(seq.handle);
else
error('Uknown sequence format');%δ֪Êý¾Ý¼¯
end
if isfield(seq, 'time') %È·¶¨ÊäÈëÊÇ·ñΪ½á¹¹Êý×é×ֶΣ¬Êä³öÂß¼0-1
results.fps = seq.num_frames / seq.time;%ÇóÖ¡ÂÊ
else
results.fps = NaN;
end
%AUC results
pd_boxes = results.res;
thresholdSetOverlap = 0: 0.05 : 1;
success_num_overlap = zeros(1, numel(thresholdSetOverlap));
res = calcRectInt(seq.gt_box, pd_boxes);
for t = 1: length(thresholdSetOverlap)
success_num_overlap(1, t) = sum(res > thresholdSetOverlap(t));
end
results.cur_AUC = mean(success_num_overlap) / size(seq.gt_box, 1);
会发现它没有对UAV数据及进行定义,并且提前计算了AUC,
通过main_unning的错误报告问题可知seq.gt_box未定义:
对照错误信息与BACF的运行代码进行修补,
在BACF中,最后的结果是以这种形式体现的:
因此,需要将ECO中的[seq, results] = get_sequence_results(seq)
修改一下:
1,加入uav选项,其实跟otb一样都是rect
2,定义好结果,不需要函数内自行比对AUC,删除这一块
3,fps计算方式无误,不需要修改
function [seq, results] = get_sequence_results(seq)
% »ñÈ¡ÐòÁнá¹û
if strcmpi(seq.format, 'otb')%otbÊý¾Ý¼¯
results.type = 'rect';
results.res = seq.rect_position;
elseif strcmpi(seq.format, 'vot')%votÊý¾Ý¼¯
seq.handle.quit(seq.handle);
elseif strcmpi(seq.format, 'uav')%uavÊý¾Ý¼¯
results.type = 'rect';
results.res = seq.rect_position;
else
error('Uknown sequence format');%δ֪Êý¾Ý¼¯
end
if isfield(seq, 'time') %È·¶¨ÊäÈëÊÇ·ñΪ½á¹¹Êý×é×ֶΣ¬Êä³öÂß¼0-1
results.fps = seq.num_frames / seq.time;%ÇóÖ¡ÂÊ
else
results.fps = NaN;
end
% %AUC results
% pd_boxes = results.res;
% thresholdSetOverlap = 0: 0.05 : 1;
% success_num_overlap = zeros(1, numel(thresholdSetOverlap));
% res = calcRectInt(seq.gt_box, pd_boxes);
% for t = 1: length(thresholdSetOverlap)
% success_num_overlap(1, t) = sum(res > thresholdSetOverlap(t));
% end
% results.cur_AUC = mean(success_num_overlap) / size(seq.gt_box, 1);
完成,重新跑一下试试:
完美运行,所以其实就是get_sequence_results中多此一举,多了一个计算AUC的步骤,因为读取不到groundtruth导致函数无法返回gt_box进而引起评测代码不能正确读取结果而导致的报错。