作为计算机视觉的重要组成部分,最近几年有很多的目标跟踪算法提出。在如何评价算法性能方面也相继有一些方法和视频序列提出。本篇博客主要对2015年发表于IEEE上一篇《Object Tracking Benchmark》当中提出的OPE、TRE、SRE三个基本评价方法进行讲解,同时也会简单介绍一下Precision Plot、Success Plot的matlab实现方法。
作者除了在文章中介绍了评价算法性能的几种方法和参数之外,还给出了两个用来进行测试的数据集:TB-50 Sequences和TB-100 Sequences。其中有许多视频序列都是我们在近几年的论文中都可以看到的,作者同时也给database添加了label,如FM=Fast Move、SV=scale variance等,方便测试算法在不同环境下的性能。感兴趣的话可以在作者主页找到这些内容。
有了benchmark之后,接下来就是参考《Object Tracking Benchmark》中定义的参数对目标跟踪算法的性能进行评价。两个衡量目标跟踪精准度的基本参数是Precision Plot和Success Plot。接下来将对这两个参数进行介绍。
Precesion Plot: Euclidean distance between the center locations.
precesion plot(精度测算)主要指的是预测位置中心点与benchmark中标注的中心位置间的欧式距离,是以像素为单位进行的计算。计算方式比较简单,在进行目标跟踪时我们主要会得到两个参数:跟踪目标左上角的坐标和scale的大小。在这里给出计算的matlab代码。
addpath('../STCT-master/sample_res/');
%res=load('./sample_res/Basketball/res_basketball.txt');
res=load('./sample_res/Basketball/track_res_fct_scale_base1.mat');
res=res.results.res;
ground_truth=load('./sample_res/Basketball/groundtruth_rect.txt');
[m,n]=size(res);
precision_plot(m)=0;
average_precision_plot=0;
%calculate precision plot
for i=1:m
temp1=(res(i,1)+res(i,3)/2-ground_truth(i,1)-ground_truth(i,3))^2;
temp2=(res(i,2)+res(i,4)/2-ground_truth(i,2)-ground_truth(i,4))^2;
precision_plot(i)=sqrt(temp1+temp2);
end
%average precision plot
average_precision_plot=sum(precision_plot);
average_precision_plot=average_precision_plot/m;
最终结果用average_precision_plot来表示,即为该视频序列所有帧的平均误差。
Success Plot:
success plot(成功率测算)主要指的是预测目标所在benchmark的重合程度。通过success plot,我个人觉得对scale和precision都有了数值上的描述。下面简单介绍success plot的计算方法。
在说明success plot的计算方法前,首先要对两个参数进行介绍。rt为tracked bounding box,r0为ground_truth bounding box。这样success plot的计算就很好理解了。同样也附上matlab代码。
success_plot(m)=0;
average_success_plot=0;
%calculate success plot
for i=1:m
s1=res(i,3)*res(i,4);
s2=ground_truth(i,3)*ground_truth(i,4);
%length
if res(i,1)i,1)
temp3=res(i,1)+res(i,3)-ground_truth(i,1);
else
temp3=ground_truth(i,1)+ground_truth(i,3)-res(i,1);
end
%height
if res(i,2)i,2)
temp4=res(i,2)+res(i,4)-ground_truth(i,2);
else
temp4=ground_truth(i,2)+ground_truth(i,4)-res(i,2);
end
s_common=temp3*temp4;
if s_common>=s1+s2
success_plot(i)=0;
else
success_plot(i)=s_common/(s1+s2-s_common);
end
end
%average success plot
average_success_plot=sum(success_plot);
average_success_plot=average_success_plot/m;
display(average_precision_plot);
display(average_success_plot);
关于鲁棒性
为了测试/表征算法的鲁棒性,仅仅有以上的两个简单参数怕是远远不够的。简单对OPE、TRE、SRE进行介绍。
OPE: one-pass evaluation;
TRE: temporal robustness evaluation (different start frame);
SRE:spatial robustness evaluation (four center shifts and four corner shifts).
其中OPE即为普通方法,TRE、SRE为测试鲁棒性方法。另还有其它更加复杂的方法,如果感兴趣的话可以在参考文献中查找到。在这里就不做过多的描述了。
主要参考文献:
Wu Y, Lim J, Yang M H. Object tracking benchmark[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2015, 37(9): 1834-1848.