关于视觉跟踪中评价标准的相关记录(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 文件的主函数。

  1. %% ####################################################
  2.  
  3. % First, load the track_results.txt and groundtruth.txt
  4. close all; clear all; clc;
  5. warning off all;
  6. addpath('./util');
  7. addpath(('C:\Users\WANG XIAO\Downloads\tracker_benchmark_v1.0\vlfeat-0.9.20-bin\vlfeat-0.9.20\toolbox'));
  8. vl_setup
  9.  
  10. seqs=configSeqs;
  11. trackers = configTrackers;
  12.  
  13. for ii=:size(seqs, )
  14. seqs{, ii}.path = [seqs{, ii}.path 'img\'];
  15. end
  16.  
  17. numSeq=length(seqs);
  18. numTrk=length(trackers);
  19. evalType = 'TRE';
  20. finalPath = ['./results/results_' evalType '_CVPR13/'];
  21.  
  22. if ~exist(finalPath,'dir')
  23. mkdir(finalPath);
  24. end
  25.  
  26. tmpRes_path = ['./tmp/' evalType '/'];
  27. bSaveImage=;
  28.  
  29. if ~exist(tmpRes_path, 'dir')
  30. mkdir(tmpRes_path);
  31. end
  32.  
  33. pathAnno = './anno/';
  34. addpath(('./rstEval'));
  35. addpath(['./trackers/VIVID_Tracker']);
  36. results_base_path = 'C:\Users\WANG XIAO\Downloads\tracker_benchmark_v1.0\txt_files\SRDCF\';
  37. groundtruth_base_path ='C:\Users\WANG XIAO\Desktop\OTB100\Benchmark\';
  38.  
  39. % all videos, call self with each video name. only keep valid directory names
  40. dirs = dir(groundtruth_base_path);
  41. videos = {dirs.name};
  42. videos(strcmp('.', videos) | strcmp('..', videos) | ...
  43. strcmp('anno', videos) | ~[dirs.isdir]) = [];
  44.  
  45. [vn,~] = size(videos(:));
  46. numSeg = ;
  47.  
  48. % #####################################################
  49. % The Main For Loop
  50. % #####################################################
  51. for num = :numel(videos)
  52. % get image ground truth for evaluation
  53. [gt] = load_groundtruth_txt_info(groundtruth_base_path, videos{num});
  54. % get image track result for evaluation
  55. [track_result] = load_results_txt_info(results_base_path, [videos{num} ]);
  56. [num_of_frames, ~] = size(gt(:,));
  57. toc = ;
  58.  
  59. s = seqs{num};
  60. s.len = s.endFrame - s.startFrame + ;
  61. s.s_frames = cell(s.len,);
  62. nz = strcat('%0',num2str(s.nz),'d'); % number of zeros in the name of image
  63. for i=:s.len
  64. image_no = s.startFrame + (i-);
  65. id = sprintf(nz,image_no);
  66. s.s_frames{i} = strcat(s.path, id, '.', s.ext);
  67. end
  68.  
  69. img = imread(s.s_frames{});
  70. [imgH,imgW,ch]=size(img);
  71.  
  72. rect_anno = dlmread([pathAnno s.name '.txt']);
  73.  
  74. [subSeqs, subAnno, subTrackingResults] = splitSeqTREv2(s, numSeg, rect_anno, track_result);
  75.  
  76. % Second, translate the track_results.txt to .mat format file and save it.
  77. for subIndex = :numSeg % parts
  78.  
  79. current_part_track_results = subTrackingResults{, subIndex};
  80. current_part_gt_results = subAnno{, subIndex};
  81.  
  82. results{subIndex}.res = current_part_track_results;
  83. results{subIndex}.type = 'rect'; % 'ivtAff'
  84. results{subIndex}.fps = num_of_frames / toc;
  85. results{subIndex}.len = subSeqs{, subIndex}.len ;
  86. results{subIndex}.annoBegin = ;
  87. results{subIndex}.startFrame = subSeqs{, subIndex}.startFrame;
  88. results{subIndex}.anno = current_part_gt_results;
  89. results{subIndex}.shiftType = 'left';
  90. videos{num} = [lower(videos{num}()) videos{num}(:end)];
  91. if videos{num}(end-)=='-'
  92. videos{num} = [videos{num}(:end-) '.' videos{num}(end)];
  93. end
  94. if strcmp(videos{num},'human4')
  95. videos{num}='human4.2';
  96. end
  97.  
  98. end
  99.  
  100. matsavePath = './results/results_TRE_CVPR13/';
  101. mkdir(matsavePath);
  102.  
  103. save([[matsavePath videos{num}] '_SRDCF.mat'], 'results');
  104.  
  105. end
  1. function [ track_result ] = load_results_txt_info(base_path,video)
  2. %LOAD_TXT_INFO
  3.  
  4. %see if there's a suffix, specifying one of multiple targets, for
  5. %example the dot and number in 'Jogging.1' or 'Jogging.2'.
  6.  
  7. if numel(video) >= && video(end-) == '.' && ~isnan(str2double(video(end))),
  8. suffix = video(end-:end); %remember the suffix
  9. video = video(:end-); %remove it from the video name
  10. else
  11. suffix = '';
  12. end
  13.  
  14. %full path to the video's files
  15. if base_path(end) ~= '/' && base_path(end) ~= '\',
  16. base_path(end+) = '/';
  17. end
  18.  
  19. %try to load ground truth from text file (Benchmark's format)
  20. % filename = [base_path video suffix '_ours.txt'];
  21. try
  22. filename = [base_path 'SRDCF_' suffix video '.txt'];
  23. catch
  24. filename = [base_path video suffix '_SRDCF.txt'];
  25. end
  26.  
  27. f = fopen(filename);
  28. assert(f ~= -, ['No initial position or ground truth to load ("' filename '").'])
  29.  
  30. %the format is [x, y, width, height]
  31. try
  32. track_result = textscan(f, '%f,%f,%f,%f', 'ReturnOnError',false);
  33. catch %#ok, try different format (no commas)
  34. frewind(f);
  35. track_result = textscan(f, '%f %f %f %f');
  36. % str = fgetl(f);
  37. % track_result = textscan(str,'%f');
  38. % str = track_result{}';
  39. end
  40. track_result = cat(, track_result{:});
  41. fclose(f);
  42.  
  43. end
  1. function [subSeqs, subAnno, subTrackingResults]=splitSeqTREv2(seq, segNum,rect_anno, track_result)
  2. % segments for each sequences
  3. % first, excluding all the occ/out-of-view frames
  4. % then, sampling
  5.  
  6. minNum = ;
  7.  
  8. fileName = ['initOmit/' seq.name '.txt'];
  9. IdxExclude = [];
  10. if exist(fileName)
  11. IdxExclude=load(fileName)-seq.startFrame+;
  12. end
  13. Idx = :seq.len;
  14. for j = :size(IdxExclude,)
  15. Idx(IdxExclude(j,):IdxExclude(j,))=;
  16. end
  17. Idx = Idx(find(Idx>));
  18.  
  19. for i=:length(Idx)
  20. r = rect_anno(Idx(i),:);
  21.  
  22. if r()<= | r()<= | r()<= | r()<= | isnan(sum(r))
  23. Idx(i) = ;
  24. end
  25. end
  26.  
  27. Idx = Idx(find(Idx>));
  28.  
  29. for i = length(Idx):-:
  30. if seq.len - Idx(i) + >= minNum
  31. endSeg = Idx(i);
  32. endSegIdx = i;
  33. break;
  34. end
  35. end
  36.  
  37. startFrIdxOne = [floor(:endSegIdx/(segNum-):endSegIdx) endSegIdx] ;
  38.  
  39. % endSeg = seq.len-minNum+;
  40.  
  41. subAnno=[];
  42. subSeqs=[];
  43. subTrackingResults = [];
  44.  
  45. for i = :length(startFrIdxOne)
  46. index = Idx(startFrIdxOne(i));
  47. subS.path = seq.path;
  48. subS.nz = seq.nz;
  49. subS.ext = seq.ext;
  50.  
  51. subS.startFrame = index+seq.startFrame-;
  52. subS.endFrame = seq.endFrame;
  53.  
  54. subS.len = subS.endFrame - subS.startFrame + ;
  55.  
  56. subS.annoBegin = seq.startFrame;
  57. subS.init_rect = rect_anno(index,:);
  58. anno = rect_anno(index:end,:);
  59.  
  60. subS.s_frames = seq.s_frames(index:end);
  61.  
  62. subS.name = seq.name;
  63. % subS.nameIdx = [seq.name '_' num2str(i)];
  64.  
  65. subAnno{i} = anno;
  66. subSeqs{i} = subS;
  67. subTrackingResults{i} = track_result(subS.startFrame:subS.endFrame, :);
  68.  
  69. end
  1. function [ ground_truth] = load_groundtruth_txt_info(base_path, video)
  2. %LOAD_TXT_INFO
  3.  
  4. disp(['==>> deal with video: ', video]);
  5.  
  6. %see if there's a suffix, specifying one of multiple targets, for
  7. %example the dot and number in 'Jogging.1' or 'Jogging.2'.
  8.  
  9. if numel(video) >= && video(end-) == '.' && ~isnan(str2double(video(end))),
  10. suffix = video(end-:end); %remember the suffix
  11. video = video(:end-); %remove it from the video name
  12. else
  13. suffix = '';
  14. end
  15.  
  16. %full path to the video's files
  17. if base_path(end) ~= '/' && base_path(end) ~= '\',
  18. base_path(end+) = '/';
  19. end
  20. video_path = [base_path video '/'];
  21.  
  22. %try to load ground truth from text file (Benchmark's format)
  23. filename = [video_path 'groundtruth_rect' suffix '.txt'];
  24. f = fopen(filename);
  25. assert(f ~= -, ['No initial position or ground truth to load ("' filename '").'])
  26.  
  27. %the format is [x, y, width, height]
  28. try
  29. ground_truth = textscan(f, '%f,%f,%f,%f', 'ReturnOnError',false);
  30. catch %#ok, try different format (no commas)
  31. frewind(f);
  32. ground_truth = textscan(f, '%f %f %f %f');
  33. end
  34.  
  35. ground_truth = cat(, ground_truth{:});
  36.  
  37. fclose(f);
  38.  
  39. 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. JavaScript--Document对象方法createElement()和createTextNode()

    createElement() 方法通过指定名称创建一个元素 createTextNode() 可创建文本节点 <!DOCTYPE html> <html> <head& ...

  2. PGPDesktop在win7环境下的安装和使用

    PGPDesktop在win7环境下的安装和使用 PGP的简介 PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件,它提供了非对称加密和数字签名,是目前非常流 ...

  3. 【2017-2-21】C#分支语句,分支嵌套,变量的作用域

    分支语句 句式:if else(必须是if开头,可以是else if或者else结束,也可以直接结束) if(bool型比较表达式) { 如果上面的条件成立,则执行这里面的代码 } else if(b ...

  4. Spark学习之路 (九)SparkCore的调优之数据倾斜调优

    摘抄自:https://tech.meituan.com/spark-tuning-pro.html 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Sp ...

  5. 基于Kubernetess集群部署完整示例——Guestbook

    目录贴:Kubernetes学习系列 本文依赖环境:Centos7部署Kubernetes集群.基于Kubernetes集群部署skyDNS服务 该示例中,我们将创建一个redis-master.两个 ...

  6. super和this关键字

    super关键字: this关键字: 栈内存和堆内存和方法区内存分析: 其中,new出来的即对象都在堆内存区: main方法先进栈: 方法区中 [[ super_class ]]是编译器生成,代码表现 ...

  7. MyBatis学习(一)简单入门程序

    MyBatis入门学习 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

  8. ELKF安装使用教程。elasticsearch+logstash+kibana+filebeta。

    近期因工作需要学习了ELKF的安装和使用.网络上的中文我看大部分也比较老版本了,我想写一下,希望能给他人带来一点帮助.小弟不才,有错位之处,还请大家原谅指点. ELKF就是:elasticsearch ...

  9. JS实现input中输入数字,控制每四位加一个空格(银行卡号格式)

    前言 今天来讲讲js中实现input中输入数字,控制每四位加一个空格的方法!这个主要是应用于我们在填写表单的时候,填写银行卡信息,要求我们输入的数字是四位一个空格!今天主要介绍两种方式来实现这个方法! ...

  10. ymPrompt,jcs缓存架构

    jcs.auxiliary.LTCP=org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPCacheFactory#jcs.auxiliary. ...