OTB数据集和VOT数据集自己存数据接口参考代码:

一、OTB数据集(不使用tracker_benchmark_v1.0)

1、OTB数据结果最基本的格式

type为目标框类型;

res为目标框的所在位置;

fps为跟踪算法的速度;

len为帧数;

startFrame为开始帧的值;

annoBegin为具有groundtruth真实值开始的帧数;

annoBegin与startFrame一般相同。

2、results.res数据格式

results.res表示目标框格式为:

四个值的分别表示(X,Y,W,H),他们的位置关系如图所示:

groundtruth的值也和 results.res格式一样。

3、保存数据代码

这个代码用groundtruth为例,数据集选择的是OTB-2013.

有三个需要注意的地方:

1)Jogging和Skating2具有两个跟踪目标需要区分;

2)David,Football1,Freeman3,Freeman4并非第一帧开始最后一帧结束;

3)Tiger1的首5帧目标被遮挡需要去掉,原benchmark中也是去掉了的。

clear;clc;
close all;
% 数据集路径路径
base_path  = 'D:\Datasets\OTB100\';
% 视频序列
% videos = {'Basketball'};
videos = {'Soccer', 'Matrix', 'Ironman', 'Deer', 'Skating1', 'Shaking', ...'Singer1', 'Singer2', 'CarDark', 'Car4', 'David2', 'Sylvester', 'Trellis', ...'Fish', 'Mhyang', 'David', 'Coke', 'Bolt', 'Boy', 'Dudek', ...'Crossing', 'Couple', 'Football1', 'Jogging-1', 'Jogging-2', 'Doll', ...'Girl', 'Walking2', 'Walking', 'Fleetface', 'Freeman1', 'Freeman3', ...'Freeman4', 'David3', 'Jumping', 'CarScale', 'Skiing', 'Dog1',...'Suv', 'MotorRolling', 'MountainBike', 'Lemming', 'Liquor', 'Woman', 'Faceocc1', ...'Faceocc2', 'Basketball', 'Football', 'Subway', 'Tiger1', 'Tiger2'};
% 跟踪器名字
tracker='GT';
% 保存路径
savePath='./results/';for vid = 1:numel(videos)close all;disp(videos{vid});% 两个视频序列具有两个groundtruthif (strcmp(videos{vid}, 'Jogging-1'))video_path = [base_path '/' 'Jogging'];[seq, ground_truth] = load_video_info(video_path,1);elseif (strcmp(videos{vid}, 'Jogging-2'))video_path = [base_path '/' 'Jogging'];[seq, ground_truth] = load_video_info(video_path,2);elseif (strcmp(videos{vid}, 'Skating2-1'))video_path = [base_path '/' 'Skating2'];[seq, ground_truth] = load_video_info(video_path,1);elseif (strcmp(videos{vid}, 'Skating2-2'))video_path = [base_path '/' 'Skating2'];[seq, ground_truth] = load_video_info(video_path,2);elsevideo_path = [base_path '/' videos{vid}];[seq, ground_truth] = load_video_info(video_path,0);end% 四个视频并非从第一帧开始,最后一帧结束seq.VidName = videos{vid};st_frame = 1;en_frame = seq.len;if (strcmp(videos{vid}, 'David'))st_frame = 300;en_frame = 770;elseif (strcmp(videos{vid}, 'Football1'))st_frame = 1;en_frame = 74;elseif (strcmp(videos{vid}, 'Freeman3'))st_frame = 1;en_frame = 460;elseif (strcmp(videos{vid}, 'Freeman4'))st_frame = 1;en_frame = 283;endseq.st_frame = st_frame;seq.en_frame = en_frame;% 帧数num_frames=en_frame-st_frame+1;% 预声明目标框rect_position = zeros(num_frames, 4);% 初始化目标框rect_position(1,:)=ground_truth(1,:);% 初始化时间time = 0;% 从第二帧开始检测for frame=st_frame+1:en_frame% 开始计时tic();% 跟踪代码,这里直接用groundtruth为例,从第二帧开始rect_position(frame-st_frame+1,:)=ground_truth(frame-st_frame+1,:);% 计算时间time = time + toc();end% 原始数据集中,Tiger1的前5帧都是有遮挡的,所以需要直接去掉if (strcmp(videos{vid}, 'Tiger1'))rect_position=rect_position(6:en_frame,:);st_frame1=st_frame+5;num_frames=num_frames-5;elsest_frame1=st_frame;end%   save resutls.fps = (en_frame-st_frame) / time;results{1}.type = 'rect';results{1}.res = rect_position;results{1}.fps = fps;results{1}.len = num_frames;results{1}.annoBegin = st_frame;results{1}.startFrame = st_frame1;save([savePath videos{vid} '_' tracker '.mat'], 'results');
end

4、运行后保存结果如图:

5、将结果拷贝到benchmark中,运行perfPlot.m。

6、运行 drawResultBB.m

7、工程代码下载地址:

SaveOTBresults.zip_BACFresults-机器学习代码类资源-CSDN下载

二、VOT数据集(不使用vot-toolkit工具)

说明:VOT数据集使用trax来运行跟踪代码,贼麻烦还总容易出错,这里使用matlab自己生成分析文件。

1、VOT的groundtruth格式如下:

每帧有八个数据,分别表示目标框四边形的四个顶点如下图蓝色框所示:(x1,y1)、 (x2,y2)、(x3,y3)、(x4,y4)。

在我们跟踪过程中将其转化为黑色的矩形框表示为:(x,y,width, height) 。

2、VOT实验分析

默认vot-toolkit工具的实验,分为两个部分:

baseline实验是为了分析{'ar', 'expected_overlap', 'speed'}这三个指标。

unsupervised实验是为了分析{'overlap', 'speed'}这两个指标。

1)baseline参数详细解释

baseline.parameters.repetitions = 15;

对每个序列进行多次评估,以获得更好的统计性能。如果跟踪器连续产生两次相同的轨迹,则跟踪器被认为是确定性的,并且省略了进一步的迭代。此处设置重复运行15次,一般最后我们的结果会保存三次,都是一模一样的。

baseline.parameters.burnin = 10;

baseline.parameters.skip_initialize = 5;

baseline.parameters.failure_overlap = 0;

在VOT提出之前,比较流行的评价系统是让tracker在序列的第一帧进行初始化,之后让tracker一直跑到最后一帧。然而tracker可能会因为其中一两个因素导致其在开始的某些帧就跟丢(fail),所以最终评价系统只利用了序列的很小一部分,造成浪费。而VOT提出,评价系统应该在tracker跟丢的时候检测到错误(failure),并在failure发生的5帧之后对tracker重新初始化(reinitialize),这样可以充分利用数据集。之所以是5帧而不是立即初始化,是因为failure之后立即初始化很可能再次跟踪失败,又因为视频中的遮挡一般不会超过5帧,所以会有这样的设定。这是VOT的一个特色机制,即重启(reset/reinitialize)。但重启之后的一部分帧是不能用于评价的,这些帧被称作burn-in period,大量实验结果表明,burn-in period大约为初始化之后(包括第一帧的初始化和所有重启)的10帧。
这段原文:https://blog.csdn.net/Dr_destiny/article/details/80108255

所以这也能够解释baseline实验是监督属性的,因为我们需要已经知道了groundtruth的labels,我们才能够实施重启机制。当平均重叠度为零时,VOT重启机制开启,这是VOT作者给的检测重启示意图:

注意:原始工程的计算重叠度公式在\vot-toolkit-master\native\trax\src\region.c中,本文对其进行仿写。

2)unsupervised参数详细解释

无监督方式就是我们不知道groundtruth,所以通过第一帧给定的目标框跟踪就可以了。

3、csr-dcf示例代码

此处以csr-dcf为例,也可以用其他的代码,按照格式稍微改一改就好了。csr-dcf代码的配置见博客:CVPR2017跟踪算法CSR-DCF的配置(Discriminative Correlation Filter with Channel and Spatial Reliability)_博博有个大大大的Dream-CSDN博客

1)baseline实验代码:

细节介绍:通过compute_polygon_overlap函数计算跟踪结果与groundtruth的重叠度,如果重叠度为零,则重新初始化。这里的重叠度计算函数和vot-toolkit工具中的计算方法是一样的。

本来需要运行至少三次,因为三次的数据除了FPS都是一样的,为了简化我们只运行一次,第二第三次的数据是copy产生的。

    %---------------------------------------------------------% baseline 实验%---------------------------------------------------------startframe=1;finishflag=0;% 预声明目标框rect_positionb = cell(num_frames,1);rect_positionb{1}=1;while(1)% 初始化tic();% 读取第一帧image = imread([sequence_path '/' img_files{startframe}]);[w,h,~]=size(image);% 读取groundtruthregion=ground_truth(startframe,:);if numel(region) > 4% all x,y points shifted by 1region = region + 1;else% shift x,y by 1region(1:2) = region(1:2) + 1;end% 初始化[tracker, ~] = create_csr_tracker(image, region);% 记录初始化时间timeb(startframe,1:3) = toc();% 从第二帧开始检测for frame=startframe+1:num_frames% 开始计时tic();% 跟踪代码,从第二帧开始image = imread([sequence_path '/' img_files{frame}]);[tracker, region] = track_csr_tracker(tracker, image);% matlab indexing: starts with (1,1); gt starts with (0,0)if numel(region) > 4% all x,y points shifted by 1region = region - 1;else% shift x,y by 1region(1:2) = region(1:2) - 1;end% 计算时间timeb(frame,1:3) = toc();   % 计算重叠度OP=compute_polygon_overlap(ground_truth(frame,:),double(region),double([0,0,h,w]));if OP==0if num_frames-frame>4rect_positionb{frame}=2;zero4 = num2cell(zeros(4,1));rect_positionb(frame+1:frame+4,1)=zero4;timeb(frame+1:frame+4,1:3) = 0/0;% 生成Nanrect_positionb{frame+5}=1;startframe=frame+5;break;elserect_positionb{frame}=2;zeron = num2cell(zeros(num_frames-frame,1));rect_positionb(frame+1:num_frames,1)=zeron;timeb(frame+1:num_frames,1:3) = 0/0;% 生成Nanfinishflag=1;break;endelserect_positionb{frame}=double(region);endendif (finishflag==1)||(frame==num_frames)break;endend% Save Databaselinepath=[savePath trackerName '/baseline/' videos{vid}];mkdir(baselinepath);dlmwrite([baselinepath '/' videos{vid} '_001.txt'], rect_positionb{1},'newline','pc');dlmwrite([baselinepath '/' videos{vid} '_002.txt'], rect_positionb{1},'newline','pc');dlmwrite([baselinepath '/' videos{vid} '_003.txt'], rect_positionb{1},'newline','pc');for fid=2:num_framesdlmwrite([baselinepath '/' videos{vid} '_001.txt'], rect_positionb{fid},'-append','newline','pc');dlmwrite([baselinepath '/' videos{vid} '_002.txt'], rect_positionb{fid},'-append','newline','pc');dlmwrite([baselinepath '/' videos{vid} '_003.txt'], rect_positionb{fid},'-append','newline','pc');enddlmwrite([baselinepath '/' videos{vid} '_time.txt'], timeb,'newline','pc', 'precision',5);

2)unsupervised实验代码:

细节介绍:通过第一帧初始化,跟踪到最后一帧。

    %---------------------------------------------------------% unsupervised 实验%---------------------------------------------------------    % 预声明目标框rect_positionu = cell(num_frames,1);rect_positionu{1}=1;% 初始化tic();% 读取第一帧image = imread([sequence_path '/' img_files{1}]);% 读取groundtruthregion=ground_truth(1,:);if numel(region) > 4% all x,y points shifted by 1region = region + 1;else% shift x,y by 1region(1:2) = region(1:2) + 1;end% 初始化[tracker, ~] = create_csr_tracker(image, region);% 记录初始化时间timeu(1) = toc();% 从第二帧开始检测for frame=2:num_frames% 开始计时tic();% 跟踪代码,从第二帧开始image = imread([sequence_path '/' img_files{frame}]);[tracker, region] = track_csr_tracker(tracker, image);% matlab indexing: starts with (1,1); gt starts with (0,0)if numel(region) > 4% all x,y points shifted by 1region = region - 1;else% shift x,y by 1region(1:2) = region(1:2) - 1;end% 计算时间timeu(frame) = toc();rect_positionu{frame}=double(region);end% Save Dataunsupervisedpath=[savePath trackerName '/unsupervised/' videos{vid}];mkdir(unsupervisedpath);dlmwrite([unsupervisedpath '/' videos{vid} '_001.txt'], rect_positionu{1},'newline','pc');for fid=2:num_framesdlmwrite([unsupervisedpath '/' videos{vid} '_001.txt'], rect_positionu{fid},'-append','newline','pc');enddlmwrite([unsupervisedpath '/' videos{vid} '_time.txt'], timeu,'newline','pc', 'precision',5);

完整工程见文末。

4、运行SaveVOTresults.m得到结果

5、速度归一化

目标跟踪的每篇文章提出的算法都是在不同硬件条件平台上跑的,编程语言也不尽相同,那么该如何对这些算法的实时性进行客观评价?VOT采用的评价标准是:EFO。

EFO(Equivalent Filter Operations )是VOT2014提出来的一个衡量tracking速度的新单位,在利用vot-toolkit评价tracker之前,先会测量在一个600*600的灰度图像上用30*30最大值滤波器进行滤波的时间,以此得出一个基准单位,再以这个基础单位衡量tracker的速度,以此减少硬件平台和编程语言等外在因素对tracker速度的影响。
这段原文:https://blog.csdn.net/Dr_destiny/article/details/80108255。

运行代码tracker\benchmark_hardware.m会得到一个电脑的配置文件,生成路径:\vot-toolkit-master\cache\performance.txt。

为了得到更大的EFO,运行benchmark_hardware.m的时候记得把英雄联盟打开,嘿嘿嘿嘿嘿。

硬件参数如下:

6、将生成的结果文件拷贝到\vot-toolkit-master\results\路径下

7、运行run_analysis.m

csr-dcftest是通过上述代码运行的结果。

CSRDCF是通过vot-toolkit工具得到的结果。

ncc,ACT,CCOT是随便找的三个对比算法,这些结果可去官网下载:http://www.votchallenge.net/vot2016/results.html

8、结果分析

结果存放路径:\vot-toolkit-master\reports\report_csr-dcftest\

1)overall数据结果

2)AR指标:

3)EAO指标:

4)无监督下overlap指标:

csr-dcftest与CSRDCF结果基本一致,有细微差距。我认为差距来源:原vot-toolkit工具计算overlap是用C++代码,本工程是在matlab中计算的,所以计算某一帧的计算结果可能不一样。FPS详细比较没有贴图,FPS有一定差距,还在可以接受的范围内。

9、工程代码下载地址:

SaveVOTresults.zip_vot数据集接口函数-机器学习代码类资源-CSDN下载

OTB数据集和VOT数据集融合跟踪算法接口示例相关推荐

  1. 用K-Means算法处理wine数据集和wine_quality数据集

    一.实验目的 根据wine数据集处理的结果,采用2种不同的聚类算法分别建聚类模型:然后,通过定量指标评价所构建的模型的优劣. 二.实验内容   wine数据集和wine_quality数据集是两份和葡 ...

  2. 在Ubuntu20.04系统上LIO-SAM跑KITTI数据集和自己数据集代码修改

    LIO-SAM跑KITTI数据集和自己数据集代码修改 一.编译并运行LIO-SAM 二.代码修改 1.cloud_info.msg 2.imageProjection.cpp 三.KITTI数据集准备 ...

  3. UEA数据集和UCR数据集的处理

    摘要:本文主要内容为针对tsv格式的UCR数据集和arff格式的UEA数据集进行处理,将其中的标签和数据分离出来,并转换为csv文件 目录 前言 数据集 UCR数据集处理 UEA数据集处理 总结 处理 ...

  4. Gowalla(美国微博)好友关系数据集和签到数据集

    数据内容:Gowalla(美国微博)好友关系数据集和签到数据集 (1)好友关系数据 好友关系数据集涵盖了196,591个用户的950,327条好友关系,每一条记录表示两两对应的朋友关系. (2)签到数 ...

  5. 对鸢尾花数据集和月亮数据集,分别采用线性LDA、k-means和SVM算法进行二分类可视化分析

    一.支持向量机 支持向量机是一个功能强大并且全面的机器学习模型,它可以执行线性或者非线性分类,回归甚至异常检测任务.其主要分为三类:线性SVM分类.软间隔分类.非线性SVM分类. 本篇博客将重点深入S ...

  6. Python机器学习:多项式回归与模型泛化004为什么需要训练数据集和测试数据集

    泛化能力:由此及彼能力 遇见新的拟合能力差 数据 #数据 import numpy as np import matplotlib.pyplot as plt x = np.random.unifor ...

  7. 人脸表情识别系统(VGG_16和Xception模型)配置GPU加速,Fer2013数据集和CK+数据集,tensorboard

    编译器 python3.8 开发平台 Pycharm PyQT5 系统界面 (可视化开发工具designer ) 模型训练基于深度学习tensorflow框架 opencv haar cascade ...

  8. php汽车之家数据api,基于聚合数据的全国违章直连查询接口示例-PHP版

    前言 从聚合数据官网的接口文档中我们可以看出全国违章直连查询的调用一般来说需要两个步骤获取支持城市参数接口,即获取到不同城市的需要的参数的长度规则 请求违章查询接口,即获取到车辆的违章记录 我们以无锡 ...

  9. php违章查询接口,基于聚合数据的全国违章直连查询接口示例-PHP版

    前言 从聚合数据官网的接口文档中我们可以看出全国违章直连查询的调用一般来说需要两个步骤获取支持城市参数接口,即获取到不同城市的需要的参数的长度规则 请求违章查询接口,即获取到车辆的违章记录 我们以无锡 ...

最新文章

  1. Tomcat网页加载速度过慢的解决方法
  2. docker 删除默认连接_Net Core 中 Docker应用
  3. EFM32外设模块—USART V1.00
  4. Bech32编码 (3)隔离见证地址
  5. HALCON示例程序circles.hdev边界轮廓的圆形拟合
  6. N 年沉淀,腾讯这套系统终于开源!
  7. Spring框架面试工作必备锦囊 Java框架-Spring
  8. 新编计算机英语,新编计算机英语教程
  9. fastjson php,Fastjson 对象或数组转JSON
  10. android项目模块导入eclipse编译报错,android环信demo导入eclipse编译出错
  11. 深度学习图像分类(十三):ShuffleNet系列(V1,V2)
  12. dreamweaver cs6 html教程,Dreamweaver cs6安装详细图文教程
  13. 阿里云CDN介绍以及如何配合OSS使用
  14. k8s安装 从k8s.gcr.io 拉取镜像失败
  15. 广义相对论 狭义相对论 双生子
  16. 国外优秀免费空间对比APPFOG VS TECHNETCAL
  17. 实现键盘enter回车键调用登陆函数
  18. 水果店开业活动策划,水果店开业怎么搞活动
  19. MatLab 画图方法
  20. 【Vue知识点- No8.】网易云音乐案例(vant组件库的使用)

热门文章

  1. 机器学习中的数学——常用概率分布(九):经验分布(Empirical分布)
  2. solrcloud入门详细使用教程
  3. 外网业务访问故障,ping时通时断,显示有请求超时time out处理过程
  4. VMware 打开虚拟机屏幕太小问题解决
  5. android mmm 编译错误,Android 7.1 使用mmm编译模块失败
  6. GICv3软件overview手册之虚拟化
  7. 如何查看当前Ubuntu的版本
  8. 适配iOS 11和iPhone X——导航栏、UITableView
  9. Win10系统文件备份方法汇总
  10. TypeScript及TypeScript在vue3.0项目中的基本使用