目标跟踪OTB评估指标(OP, CLE, FPS)与matlab代码

OTB是单目标跟踪中非常经典的一个数据集。它包含多种评估指标,最常用的有AUC(曲线下面积),DP(距离精度),这两种指标都可以通过OTB工具箱自动计算得到。然而,除了AUC/DP,为了对算法进行更加全面的评估,论文中常出现的还有OP(重叠精度),CLE(中心位置误差)和FPS(速度),且OTB工具箱中没有关于这三个指标的评估代码。本文通过参考其他代码,汇总了这三种指标的matlab代码。

mean OP(平均重叠精度)

OP的计算方式参考了BACF,将其计算单个视频的OP扩展到计算整个数据集的视频的OP,matlab代码如下:

clear
close all;
clc
 
addpath('./util');

base_path  = 'E:/datasets/OTB100/';
 
seqs=configSeqs;
 
trackers=configTrackers;
 
numSeq=length(seqs);
numTrk=length(trackers);
 
rpAll='.\results\results_OPE_CVPR13\';

for idxTrk=1:numTrk
    t = trackers{idxTrk};
    total_OP=0;
    for idxSeq=1:numSeq
        s = seqs{idxSeq};
        load([rpAll s.name '_' t.name '.mat']);
        % compute the OP
        [~, ground_truth] = load_video_info_all(base_path, s.name);
        gt_boxes = [ground_truth(:,1:2), ground_truth(:,1:2) + ground_truth(:,3:4) - ones(size(ground_truth,1), 2)];
        
        pd_boxes = results{1, 1}.res;
        pd_boxes = [pd_boxes(:,1:2), pd_boxes(:,1:2) + pd_boxes(:,3:4) - ones(size(pd_boxes,1), 2)  ];
        
        OP = zeros(size(gt_boxes,1),1);
        for i=1:size(gt_boxes,1)
            b_gt = gt_boxes(i,:);
            b_pd = pd_boxes(i,:);
            OP(i) = computePascalScore(b_gt,b_pd);
        end
        OP_vid = sum(OP >= 0.5) / numel(OP);
        total_OP = total_OP + OP_vid;
    end
    mean_OP = total_OP/numSeq;
    disp([trackers{idxTrk}.name, '-------- mean OP:',num2str(mean_OP)]);
end

mean CLE(平均中心位置误差)

这部分代码主要参考了https://github.com/HonglinChu/visual_tracker_benchmark中的部分代码,matlab代码如下:

clear
close all;
clc
 
addpath('./util');

base_path  = 'E:/datasets/OTB100/';
 
seqs=configSeqs;
 
trackers=configTrackers;
 
numSeq=length(seqs);
numTrk=length(trackers);
 
rpAll='.\results\results_OPE_CVPR13\';

for idxTrk=1:numTrk
    t = trackers{idxTrk};
    total_CLE=0;
    for idxSeq=1:numSeq
        s = seqs{idxSeq};
        load([rpAll s.name '_' t.name '.mat']);
        % compute the CLE
        [~, ground_truth] = load_video_info_all(base_path, s.name);
        centerGT = [ground_truth(:,1)+(ground_truth(:,3)-1)/2 ground_truth(:,2)+(ground_truth(:,4)-1)/2];
        
        rectMat = results{1, 1}.res;
        center = [rectMat(:,1)+(rectMat(:,3)-1)/2 rectMat(:,2)+(rectMat(:,4)-1)/2];
        
        errCenter = zeros(size(centerGT,1),1);
        for i=1:size(centerGT,1)
            c_gt = centerGT(i,:);
            c_pd = center(i,:);
            errCenter(i) = sqrt(sum((c_gt - c_pd).^2));
        end
        CLE_vid = sum(errCenter) / numel(errCenter);
        total_CLE = total_CLE + CLE_vid;
    end
    mean_CLE = total_CLE/numSeq;
    disp([trackers{idxTrk}.name, '-------- mean CLE:',num2str(mean_CLE)]);
end

mean FPS(平均帧率)

同样参考https://github.com/HonglinChu/visual_tracker_benchmark中的部分代码,matlab代码如下:

clear
close all;
clc
 
addpath('./util');
 
seqs=configSeqs;
 
trackers=configTrackers;
 
% seqs = seqs(1:10);
% trackers = trackers(1:10);
 
numSeq=length(seqs);
numTrk=length(trackers);
 
evalType = 'OPE';
 
switch evalType
    case 'OPE'
        rpAll='.\results\results_OPE_CVPR13\';
    case 'SRE'
        rpAll='.\results\results_SRE_CVPR13\';
    case 'TRE'
        rpAll='.\results\results_TRE_CVPR13\';
end
for idxTrk=1:numTrk
    t = trackers{idxTrk};
%     time=0;
%     frame=0;
    totalFPS=0;
    for idxSeq=1:numSeq
        s = seqs{idxSeq};
        load([rpAll s.name '_' t.name '.mat']);
        res = results{1};
%         time=time+(s.endFrame-s.startFrame+1)/res.fps;  %总时间
%         frame=frame+(s.endFrame-s.startFrame+1);   %总帧数
        totalFPS=totalFPS+res.fps;
    end
%   average_FPS=frame/time;   %平均FPS
    average_FPS=totalFPS/numSeq;
    disp([trackers{idxTrk}.name, ' -------- mean FPS:',num2str(average_FPS)]);
end

【注】在计算OP和CLE的代码里都用到了computePascalScore.m这个函数,这个函数又调用了其他相关函数,这些函数都可以在BACF或上面的Github链接中找到。

以上只是本人根据自己理解完成的,如有误,欢迎指正!

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值