关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset)

2018-01-22  21:49:17

Benchmark website:http://cvlab.hanyang.ac.kr/tracker_benchmark/benchmark_v10.html

1. 修改 benchmark 的路径,改为你自己的数据集的路径:

2. 也可以修改 tracker 的设置,仅仅显示自己想要输出的那些跟踪算法:

3. 展示结果:

那么,问题来了,怎么将其拓展到 OTB100 dataset 上?怎么评价自己的跟踪结果?

1. 首先,将 tracking 的 txt 文档,生成 .mat 文件:

  第一个是生成 .mat 文件的主函数。

 %% ####################################################

 % First, load the track_results.txt and groundtruth.txt
close all; clear all; clc;
warning off all;
addpath('./util');
addpath(('C:\Users\WANG XIAO\Downloads\tracker_benchmark_v1.0\vlfeat-0.9.20-bin\vlfeat-0.9.20\toolbox'));
vl_setup seqs=configSeqs;
trackers = configTrackers; for ii=:size(seqs, )
seqs{, ii}.path = [seqs{, ii}.path 'img\'];
end numSeq=length(seqs);
numTrk=length(trackers);
evalType = 'TRE';
finalPath = ['./results/results_' evalType '_CVPR13/']; if ~exist(finalPath,'dir')
mkdir(finalPath);
end tmpRes_path = ['./tmp/' evalType '/'];
bSaveImage=; if ~exist(tmpRes_path, 'dir')
mkdir(tmpRes_path);
end pathAnno = './anno/';
addpath(('./rstEval'));
addpath(['./trackers/VIVID_Tracker']);
results_base_path = 'C:\Users\WANG XIAO\Downloads\tracker_benchmark_v1.0\txt_files\SRDCF\';
groundtruth_base_path ='C:\Users\WANG XIAO\Desktop\OTB100\Benchmark\'; % all videos, call self with each video name. only keep valid directory names
dirs = dir(groundtruth_base_path);
videos = {dirs.name};
videos(strcmp('.', videos) | strcmp('..', videos) | ...
strcmp('anno', videos) | ~[dirs.isdir]) = []; [vn,~] = size(videos(:));
numSeg = ; % #####################################################
% The Main For Loop
% #####################################################
for num = :numel(videos)
% get image ground truth for evaluation
[gt] = load_groundtruth_txt_info(groundtruth_base_path, videos{num});
% get image track result for evaluation
[track_result] = load_results_txt_info(results_base_path, [videos{num} ]);
[num_of_frames, ~] = size(gt(:,));
toc = ; s = seqs{num};
s.len = s.endFrame - s.startFrame + ;
s.s_frames = cell(s.len,);
nz = strcat('%0',num2str(s.nz),'d'); % number of zeros in the name of image
for i=:s.len
image_no = s.startFrame + (i-);
id = sprintf(nz,image_no);
s.s_frames{i} = strcat(s.path, id, '.', s.ext);
end img = imread(s.s_frames{});
[imgH,imgW,ch]=size(img); rect_anno = dlmread([pathAnno s.name '.txt']); [subSeqs, subAnno, subTrackingResults] = splitSeqTREv2(s, numSeg, rect_anno, track_result); % Second, translate the track_results.txt to .mat format file and save it.
for subIndex = :numSeg % parts current_part_track_results = subTrackingResults{, subIndex};
current_part_gt_results = subAnno{, subIndex}; results{subIndex}.res = current_part_track_results;
results{subIndex}.type = 'rect'; % 'ivtAff'
results{subIndex}.fps = num_of_frames / toc;
results{subIndex}.len = subSeqs{, subIndex}.len ;
results{subIndex}.annoBegin = ;
results{subIndex}.startFrame = subSeqs{, subIndex}.startFrame;
results{subIndex}.anno = current_part_gt_results;
results{subIndex}.shiftType = 'left';
videos{num} = [lower(videos{num}()) videos{num}(:end)];
if videos{num}(end-)=='-'
videos{num} = [videos{num}(:end-) '.' videos{num}(end)];
end
if strcmp(videos{num},'human4')
videos{num}='human4.2';
end end matsavePath = './results/results_TRE_CVPR13/';
mkdir(matsavePath); save([[matsavePath videos{num}] '_SRDCF.mat'], 'results'); end
  function [ track_result ] = load_results_txt_info(base_path,video)
%LOAD_TXT_INFO %see if there's a suffix, specifying one of multiple targets, for
%example the dot and number in 'Jogging.1' or 'Jogging.2'. if numel(video) >= && video(end-) == '.' && ~isnan(str2double(video(end))),
suffix = video(end-:end); %remember the suffix
video = video(:end-); %remove it from the video name
else
suffix = '';
end %full path to the video's files
if base_path(end) ~= '/' && base_path(end) ~= '\',
base_path(end+) = '/';
end %try to load ground truth from text file (Benchmark's format)
% filename = [base_path video suffix '_ours.txt'];
try
filename = [base_path 'SRDCF_' suffix video '.txt'];
catch
filename = [base_path video suffix '_SRDCF.txt'];
end f = fopen(filename);
assert(f ~= -, ['No initial position or ground truth to load ("' filename '").']) %the format is [x, y, width, height]
try
track_result = textscan(f, '%f,%f,%f,%f', 'ReturnOnError',false);
catch %#ok, try different format (no commas)
frewind(f);
track_result = textscan(f, '%f %f %f %f');
% str = fgetl(f);
% track_result = textscan(str,'%f');
% str = track_result{}';
end
track_result = cat(, track_result{:});
fclose(f); end
 function [subSeqs, subAnno, subTrackingResults]=splitSeqTREv2(seq, segNum,rect_anno, track_result)
% segments for each sequences
% first, excluding all the occ/out-of-view frames
% then, sampling minNum = ; fileName = ['initOmit/' seq.name '.txt'];
IdxExclude = [];
if exist(fileName)
IdxExclude=load(fileName)-seq.startFrame+;
end
Idx = :seq.len;
for j = :size(IdxExclude,)
Idx(IdxExclude(j,):IdxExclude(j,))=;
end
Idx = Idx(find(Idx>)); for i=:length(Idx)
r = rect_anno(Idx(i),:); if r()<= | r()<= | r()<= | r()<= | isnan(sum(r))
Idx(i) = ;
end
end Idx = Idx(find(Idx>)); for i = length(Idx):-:
if seq.len - Idx(i) + >= minNum
endSeg = Idx(i);
endSegIdx = i;
break;
end
end startFrIdxOne = [floor(:endSegIdx/(segNum-):endSegIdx) endSegIdx] ; % endSeg = seq.len-minNum+; subAnno=[];
subSeqs=[];
subTrackingResults = []; for i = :length(startFrIdxOne)
index = Idx(startFrIdxOne(i));
subS.path = seq.path;
subS.nz = seq.nz;
subS.ext = seq.ext; subS.startFrame = index+seq.startFrame-;
subS.endFrame = seq.endFrame; subS.len = subS.endFrame - subS.startFrame + ; subS.annoBegin = seq.startFrame;
subS.init_rect = rect_anno(index,:);
anno = rect_anno(index:end,:); subS.s_frames = seq.s_frames(index:end); subS.name = seq.name;
% subS.nameIdx = [seq.name '_' num2str(i)]; subAnno{i} = anno;
subSeqs{i} = subS;
subTrackingResults{i} = track_result(subS.startFrame:subS.endFrame, :); end
  function [ ground_truth] = load_groundtruth_txt_info(base_path, video)
%LOAD_TXT_INFO disp(['==>> deal with video: ', video]); %see if there's a suffix, specifying one of multiple targets, for
%example the dot and number in 'Jogging.1' or 'Jogging.2'. if numel(video) >= && video(end-) == '.' && ~isnan(str2double(video(end))),
suffix = video(end-:end); %remember the suffix
video = video(:end-); %remove it from the video name
else
suffix = '';
end %full path to the video's files
if base_path(end) ~= '/' && base_path(end) ~= '\',
base_path(end+) = '/';
end
video_path = [base_path video '/']; %try to load ground truth from text file (Benchmark's format)
filename = [video_path 'groundtruth_rect' suffix '.txt'];
f = fopen(filename);
assert(f ~= -, ['No initial position or ground truth to load ("' filename '").']) %the format is [x, y, width, height]
try
ground_truth = textscan(f, '%f,%f,%f,%f', 'ReturnOnError',false);
catch %#ok, try different format (no commas)
frewind(f);
ground_truth = textscan(f, '%f %f %f %f');
end ground_truth = cat(, ground_truth{:}); fclose(f); end

有了这些 .mat 文件,就可以将其用于画 TRE 的曲线图了。

2. 用 perfPlot.m 函数来画出曲线图即可。

关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset)的更多相关文章

  1. 自动化回归测试案例评价标准 MeRest

    自动化回归测试案例评价标准试图定义不同维度来评价自动化案例的优劣,作为后续我们评判讨论测试框架.测试技术和测试案例编写模式的基础.那什么是好的自动化回归测试案例呢?简而言之,就是投资回报率高的案例,因 ...

  2. 时空上下文视觉跟踪(STC)算法的解读与代码复现(转)

    时空上下文视觉跟踪(STC)算法的解读与代码复现 zouxy09@qq.com http://blog.csdn.net/zouxy09 本博文主要是关注一篇视觉跟踪的论文.这篇论文是Kaihua Z ...

  3. TLD视觉跟踪算法(转)

    源:TLD视觉跟踪算法 TLD算法好牛逼一个,这里有个视频,是作者展示算法的效果,http://www.56.com/u83/v_NTk3Mzc1NTI.html.下面这个csdn博客里有人做的相关总 ...

  4. Video Target Tracking Based on Online Learning—深度学习在目标跟踪中的应用

    摘要 近年来,深度学习方法在物体跟踪领域有不少成功应用,并逐渐在性能上超越传统方法.本文先对现有基于深度学习的目标跟踪算法进行了分类梳理,后续会分篇对各个算法进行详细描述. 看上方给出的3张图片,它们 ...

  5. ROC曲线-阈值评价标准

    ROC曲线指受试者工作特征曲线 / 接收器操作特性曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性 ...

  6. TLD视觉跟踪算法

    TLD算法好牛逼一个,这里有个视频,是作者展示算法的效果,http://www.56.com/u83/v_NTk3Mzc1NTI.html.下面这个csdn博客里有人做的相关总结,感觉挺好的,收藏了! ...

  7. paper 140:TLD视觉跟踪算法(超棒)

    我是看了这样的一个视频:http://www.56.com/u83/v_NTk3Mzc1NTI.html 然后在准备针对TLD视觉跟踪算法来个小的总结. 以下博文转自:http://blog.csdn ...

  8. ICCV2021 | 用于视觉跟踪的学习时空型transformer

    ​  前言  本文介绍了一个端到端的用于视觉跟踪的transformer模型,它能够捕获视频序列中空间和时间信息的全局特征依赖关系.在五个具有挑战性的短期和长期基准上实现了SOTA性能,具有实时性,比 ...

  9. C语言作业评价标准

    C语言作业评价标准 作业内容: 每周作业分为基础作业.挑战作业和预习作业: 基础作业为本周所学内容的巩固: 挑战作业包括但不仅限于所学知识的综合运用: 预习作业为下周所学内容的任务单,要求必须在课前完 ...

随机推荐

  1. Java多线程-----匿名内部类创建线程

       1.继承Thread类创建线程 package com.practise.createthread; public class AnonymousThread { public static v ...

  2. 【2017-03-02】C#函数,递归法

    函数 函数的意义:独立完成某项功能的个体 函数的优势:1.提高代码的重用性     2.提高功能开发的效率   3.提高程序代码的可维护性 函数四要素: 1,输入:(值的类型+名称) 2,输出:ret ...

  3. java踩坑

    1. java判断两个字符串是否相等用equals 2. java只传递指针遇到的坑: 1 import java.util.*; 2 3 public class mapTest { 4 publi ...

  4. SVM支撑向量机原理

    转自:http://blog.csdn.net/v_july_v/article/details/7624837 目录(?)[-] 支持向量机通俗导论理解SVM的三层境界 前言 第一层了解SVM 1分 ...

  5. linux常用命令:touch 命令

    linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch [选项]... 文件... 2.命令参数: -a    ...

  6. JAVA中异常状况总结

    之前在<会当凌绝顶>这本书中学到过对于异常处理的知识,当时也是根据书上的代码,自己进行编写大概知道是怎么回事儿,王老师给我们上了一节课之后,发现异常处理可以发挥很大的作用.  通过在网络上 ...

  7. python GIL 全局锁,多核cpu下的多线程性能究竟如何?

    python GIL 全局锁,多核cpu下的多线程性能究竟如何?GIL全称Global Interpreter Lock GIL是什么? 首先需要明确的一点是GIL并不是Python的特性,它是在实现 ...

  8. Windows Services(NT)

    本文主要记录什么是Windows Service,及其主要组成?并通过一个列子来创建一个Windows Services,同时,记录几个在查资料碰到的问题. Windows Services全文简称N ...

  9. Spring cloud开发内存占用过高解决方法

    https://blog.csdn.net/wanhuiguizong/article/details/79289986 版权声明:本文为博主原创文章,转载请声明文章来源和原文链接. https:// ...

  10. Redis慢查询日志学习功能

    慢查询日志 什么是SLOW LOG? Slow log是Redis用来记录查询执行时间超过给定时长的命令请求的日志系统.查询执行时间指的是不包括像客户端响应(talking).发送回复等IO操作,而单 ...