关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset)
关于视觉跟踪中评价标准的相关记录(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)的更多相关文章
- 自动化回归测试案例评价标准 MeRest
自动化回归测试案例评价标准试图定义不同维度来评价自动化案例的优劣,作为后续我们评判讨论测试框架.测试技术和测试案例编写模式的基础.那什么是好的自动化回归测试案例呢?简而言之,就是投资回报率高的案例,因 ...
- 时空上下文视觉跟踪(STC)算法的解读与代码复现(转)
时空上下文视觉跟踪(STC)算法的解读与代码复现 zouxy09@qq.com http://blog.csdn.net/zouxy09 本博文主要是关注一篇视觉跟踪的论文.这篇论文是Kaihua Z ...
- TLD视觉跟踪算法(转)
源:TLD视觉跟踪算法 TLD算法好牛逼一个,这里有个视频,是作者展示算法的效果,http://www.56.com/u83/v_NTk3Mzc1NTI.html.下面这个csdn博客里有人做的相关总 ...
- Video Target Tracking Based on Online Learning—深度学习在目标跟踪中的应用
摘要 近年来,深度学习方法在物体跟踪领域有不少成功应用,并逐渐在性能上超越传统方法.本文先对现有基于深度学习的目标跟踪算法进行了分类梳理,后续会分篇对各个算法进行详细描述. 看上方给出的3张图片,它们 ...
- ROC曲线-阈值评价标准
ROC曲线指受试者工作特征曲线 / 接收器操作特性曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性 ...
- TLD视觉跟踪算法
TLD算法好牛逼一个,这里有个视频,是作者展示算法的效果,http://www.56.com/u83/v_NTk3Mzc1NTI.html.下面这个csdn博客里有人做的相关总结,感觉挺好的,收藏了! ...
- paper 140:TLD视觉跟踪算法(超棒)
我是看了这样的一个视频:http://www.56.com/u83/v_NTk3Mzc1NTI.html 然后在准备针对TLD视觉跟踪算法来个小的总结. 以下博文转自:http://blog.csdn ...
- ICCV2021 | 用于视觉跟踪的学习时空型transformer
前言 本文介绍了一个端到端的用于视觉跟踪的transformer模型,它能够捕获视频序列中空间和时间信息的全局特征依赖关系.在五个具有挑战性的短期和长期基准上实现了SOTA性能,具有实时性,比 ...
- C语言作业评价标准
C语言作业评价标准 作业内容: 每周作业分为基础作业.挑战作业和预习作业: 基础作业为本周所学内容的巩固: 挑战作业包括但不仅限于所学知识的综合运用: 预习作业为下周所学内容的任务单,要求必须在课前完 ...
随机推荐
- <keep-alvie></keep-alive>
<keep-alive></keep-alive>的作用是什么? <keep-alive></keep-alive> 包裹动态组件时,会缓存不活动的组件 ...
- modelform的简介
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- xshell中出现的绿色背景的文件夹
这种文件夹表示权限为777的文件夹 可以使用chmod 777 fileName进行权限修改 如果需要将文件夹以及其子文件夹的权限全部置为777 chmod 777 -R directoryName/ ...
- rabbitMq 教程
https://github.com/401Studio/WeekLearn/issues/2 目录 RabbitMQ 概念 exchange交换机机制 什么是交换机 binding? Direct ...
- js多个异步请求
一,两个(或多个)js异步并发执行,怎么在两个AJax异步操作之后执行一个新的操作 原题来自 ES6 方法 1.Promise 包装异步ajax操作,2.定义async 函数,3.用await等待pr ...
- Redhat 简单本地yum 配置
Redhat 简单本地yum 配置 一.将redhat 系统的镜像挂载到系统上 Vmware Workstion 环境下: [虚拟机设置]--[硬件]--[CD/DVD]--[使用ISO映像文件]-- ...
- multer中间件
1.Multer是node.js的一个中间件,用于处理multipart/form-data类型的表单数据,它主要用于上传文件.(Multer不会处理任何非multipart/form-data类型的 ...
- GoldenGate实时投递数据到大数据平台(6)– HDFS
GoldenGate可以实时将RDBMS的数据投递到HDFS中,在前面的文章中,已经配置过投递到kafka, mongodb等数据平台,本文通过OGG for bigdata的介质中自带的示例演示实时 ...
- sqlchemy self made
# -*- coding: utf-8 -*- from sqlalchemy import create_engine, Column, String, Integer, ForeignKey, T ...
- Linux的常用路由配置
1.配置默认路由 ip route add default via 192.168.10.1 dev eth0 route add default gw 192.168.10.1 2.间接路由: ip ...