目标跟踪 中 precision plot图 与 success Plot图 的具体含义及代码实现

2023-11-01


precision plot图

类似如下图:
在这里插入图片描述
其含义为:跟踪算法估计的目标位置(bounding box)的中心点与人工标注(ground-truth)的目标的中心点,这两者的距离小于给定阈值的视频帧的百分比。不同的阈值,得到的百分比不一样,因此可以获得一条曲线。

该评估方法的缺点:无法反映目标物体大小与尺度的变化。

简单来说:横坐标代表阈值,阈值范围是1到50,纵坐标代表 跟踪算法估计的目标位置(bounding box)的中心点与人工标注(ground-truth)的目标的中心点的距离小于给定阈值的视频帧的百分比。(比如:横坐标阈值为10,对应纵坐标百分比为0.6,就代表当前跟踪视频序列有60%的视频帧是满足bounding box的中心与ground-truth的中心的距离是小于10个像素)

其matlab代码为:

function [precisions, distances, averageLocationError] = precision_plot(positions, ground_truth,colortype,show)
%PRECISION_PLOT
%   Calculates precision for a series of distance thresholds (percentage of
%   frames where the distance to the ground truth is within the threshold).
%   The results are shown in a new figure if SHOW is true.
%
%   Accepts positions and ground truth as Nx2 matrices (for N frames), and
%   a title string. 
%  modified: 5/31/2016--------------------------
% positions, and ground_truth is the coordinates of center points
% ---------------------------------------------
%
%   Joao F. Henriques, 2014
%   http://www.isr.uc.pt/~henriques/

	
	max_threshold = 50;  %used for graphs in the paper
	
	
	precisions = zeros(max_threshold, 1);
	
	if size(positions,1) ~= size(ground_truth,1),
% 		fprintf('%12s - Number of ground truth frames does not match number of tracked frames.\n', title)
		
		%just ignore any extra frames, in either results or ground truth
		n = min(size(positions,1), size(ground_truth,1));
		positions(n+1:end,:) = [];
		ground_truth(n+1:end,:) = [];
	end
	
	%calculate distances to ground truth over all frames
	distances = sqrt((positions(:,1) - ground_truth(:,1)).^2 + ...
				 	 (positions(:,2) - ground_truth(:,2)).^2);
	distances(isnan(distances)) = [];

	%compute precisions
	for p = 1:max_threshold,
		precisions(p) = nnz(distances <= p) / numel(distances);
    end
	
    averageLocationError = sum(distances)/numel(distances);
	%plot the precisions
	if show == 1,
% 		figure('Number','off', 'Name',['Precisions - ' title])
		plot(precisions, colortype, 'LineWidth',1.2)
		xlabel('Local error threshold'), ylabel('Precision')
	end
	
end
clear all;
gt = importdata('groundtruth.txt');%ground truth file 
A = importdata('boundingbox.txt'); %output file
gt(:,3:4) = gt(:,3:4)+0.001;

[precisions1, distances1, averageLocationError1]=precision_plot(A,gt,'k',1);hold on;

legend('tracker','Location','NorthEast');

注意:以上代码只是算一个视频序列的结果,那要怎么求出跟踪算法对于一整个数据集(如OTB 、VOT)的precision plot呢?一般来说直接跑benchmark就可以直接出来了 但是我就想手算 我就不嫌麻烦 行不行? 行!!!

运行完上面第二段代码,matlab右边工作台会出现一个:
在这里插入图片描述
双击点开:
在这里插入图片描述
就是50个点

再对视频集中所有的视频序列都跑一遍跟踪算法,比如跑OTB50(OTB50一个50个视频序列)是不是就得到了 50列这样的数据,全部拿到Excel中,每行求平均,再对求出的平均一画折线图,OK 完成。

在这里插入图片描述

success plot图

类似如下图:

在这里插入图片描述
其含义是:首先定义重合率得分(overlap score,OS),追踪算法得到的bounding box(记为a),与ground-truth给的box(记为b),重合率定义为:OS = |a∩b|/|a∪b|,|·|表示区域的像素数目。当某一帧的OS大于设定的阈值时,则该帧被视为成功的(Success),总的成功的帧占所有帧的百分比即为成功率(Success rate)。OS的取值范围为0~1,因此可以绘制出一条曲线。一般阈值设定为0.5。

简单来说:假设一个视频序列一共有1000帧,当横坐标为0.2时,对应的纵坐标为0.7:代表的意思就是:有70%的帧(即700帧)的OS大于0.2

matlab代码为:

function [ success_rate, OverlapRatio ] = success_plot( positions, ground_truth, colortype,show )
    % positions and ground_truth format: [x,y,w,h] of the top-left point of the
    % bounding box

    Ratio = bboxOverlapRatio(positions, ground_truth);
    OverlapRatio = diag(Ratio);
    threshold = [0.02:0.02:1];
    N = size(threshold,2);
    success_rate = zeros(N,1);
    for i = 1:N
        success_rate(i) = nnz(OverlapRatio >= threshold(i)) / numel(OverlapRatio);
    end
    if show==1
        plot(success_rate,threshold, colortype, 'LineWidth',1.2)
        xlabel('Overlap threshold'), ylabel('Success rate')
    end
end
clear all;
gt = importdata('bird1.txt');%ground truth file 
A = importdata('bird1_bboxes.txt'); %output file
gt(:,3:4) = gt(:,3:4)+0.001;

success_plot(A,gt,'r',1);hold on;
legend('ours','Location','NorthEast');

注意:以上代码只是算一个视频序列的结果,算全部序列方法和precision plot一致

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标跟踪 中 precision plot图 与 success Plot图 的具体含义及代码实现 的相关文章

  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • 轴标注问题

    通过运行我编写的以下 matlab 函数 可以互换图中的 x 轴和 y 轴 谁能告诉我问题出在哪里或者帮我解决它吗 预先感谢您的任何帮助 function axislabeling n x 1 1 n y 1 1 n z zeros n n
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • 考虑预分配速度[重复]

    这个问题在这里已经有答案了 我正在做以下事情 for i 1 m index 0 for j 1 n index index values i j 2 j 1 if j 1 symbol chip chip values index 1 e
  • 氡变换线检测

    我正在尝试检测灰度图像中的线条 为此 我在 MATLAB 中使用 Radon 变换 我的 m 文件的示例如下所示 我可以使用此代码检测多行 我还使用线条的移位和旋转属性来绘制线条 但是 我不明白在获取rho和theta值后如何获取检测线的起
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p
  • matlab中优先级队列的实现方法

    matlab中有没有提供minpriorityqueue功能的库 import java util PriorityQueue import java util public class MyQueue Comparator
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • 计算向量的导数

    我有以下函数 维维亚尼曲线 Phi t cos t 2 cos t sin t sin t 只需检查它是否有效 s linspace 0 T 1000 plot3 cos s 2 cos s sin s sin s 如何推导函数Phi 可能
  • 在 numpy/scipy 中查找 matlab 函数

    是否有一个等价的函数find A gt 9 1 来自 numpy scipy 的 matlab 我知道有nonzeronumpy 中的函数 但我需要的是第一个索引 以便我可以在另一个提取的列中使用第一个索引 Ex A 1 2 3 9 6 4
  • MATLAB - 从目录读取文件?

    我希望从目录中读取文件并对每个文件迭代执行操作 此操作不需要更改文件 我知道我应该为此使用 for 循环 到目前为止我已经尝试过 FILES ls path to folder for i 1 size FILES 1 STRU pdbre
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • Matlab的uicontrol在Octave中的实现?

    我正在尝试在 Octave 中运行我们实验室中使用的图形程序的 m Matlab 代码 Octave 告诉我代码中使用的函数 uicontrol 没有定义 经过一番搜索 我发现 JHandles 包有一个 uicontrol GUI 功能的
  • 从 3 个向量创建等值线图

    我正在尝试根据这些数据创建等高线图 pH D Tur 5 10 3 79 18918919 5 50 6 92 97297297 5 00 0 50 09009009 5 00 6 90 36036036 5 10 9 91 0810810
  • Matlab 的 fftn 在多线程下变得更慢?

    我可以访问 12 核机器和一些严重依赖 fftn 的 matlab 代码 我想加快我的代码速度 由于 fft 可以并行化 我认为更多的内核会有所帮助 但我看到的恰恰相反 这是一个例子 X peaks 1028 ncores feature
  • 如何使用 MATLAB 的“等值面”函数创建三角球体

    如何创建一个三角球体 其中每个三角形的面面积相同 我想要这样的东西 http imageshack us a img198 5041 71183923 png http imageshack us a img198 5041 7118392

随机推荐

  • 爬取淘宝价格

    爬取淘宝价格 from selenium import webdriver from lxml import etree from time import sleep 实例化一个浏览器对象 bro webdriver Chrome exec
  • [调用函数]

    注 梳理 整理 用来帮助自己学习 如有错误 请指出 1 编写一个函数 该函数接受两个整数作为参数并返回它们的和 在主函数中调用该函数并输出结果 示例输入 5 7 示例输出 12 解题思路 首先需要定义一个函数来实现两个整数的加法 函数的返回
  • 对于进程同步和异步的理解

    多进程并发执行具有异步的特性 进程异步就是指一个以上的进程在并发执行时具有的异步特型 就比如说两个进程之间指令的执行顺序是不确定的 具有很强的随机性 举个例子 现在有两个并发执行的进程 A 和 B 各自都有n条指令需要执行 然而 我的CPU
  • python后端学习(七)HTTP协议、实现WEB服务器

    HTTP协议简介 浏览器 gt 服务器发送的请求格式如下 GET HTTP 1 1 请求方式 路径 协议及版本 Host 127 0 0 1 8080 请求的地址 Connection keep alive 长连接 Accept text
  • RS485模块的介绍及引脚连线说明

    RS485模块通讯 1 RS 485简介 2 SP3485芯片及应用 1 RS 485简介 RS 485采用平衡发送和差分接收 因此具有抑制共模干扰的能力 以下是某宝上RS485模块的截图 应用特点 传输数据速度快 高达10Mbps 即10
  • 【老生谈算法】matlab实现粒子滤波及实现

    粒子滤波及matlab实现 1 文档下载 本算法已经整理成文档如下 有需要的朋友可以点击进行下载 说明 文档 点击下载 本算法文档 老生谈算法 matlab实现粒子滤波及实现 doc 更多matlab算法原理及源码详解可点击下方文字直达 5
  • 《Apache MINA 2.0 用户指南》第六章:传输

    最近准备将Apache MINA 2 0 用户指南英文文档翻译给大家 但是我偶然一次百度 发现 Defonds 这位大牛已经翻译大部分文档 原文链接 http mina apache org mina project userguide c
  • 从单向链表中删除指定值的节点-牛客网

    题目描述 输入一个单向链表和一个节点的值 从单向链表中删除等于该值的节点 删除后如果链表中无节点则返回空指针 链表结点定义如下 struct ListNode int m nKey ListNode m pNext 详细描述 本题为考察链表
  • 电脑知识【自用】

    1 解决BIOS误删Windows Boot Manager 方法一 通过Grub进行修复 通过以下步骤解决 重启电脑 按F12进入BIOS SETUP 进入Boot Sequence 查看Windows Boot Manager是否丢失
  • Sftp实现文件的上传下载(com.jcraft.jsch依赖解决解决:Could not parse response code.Server Reply: SSH-2.0-OpenSSH_5.3)

    依赖如下
  • 给vcenter中的Esxi主机网络添加VLAN

    1 使用vSphere Client连接到VMware ESXi Server 在 配置 网络 中 可以看到 当前有两个虚拟交换机 并且为该虚拟交换机分配了管理地址10 10 228 81 点击 添加网络 如图所示 2 添加配置向导 在网络
  • 圆检测学习笔记

    目录 边缘检测 再检测圆 霍夫圆检测 转自 深度OpenCV开发之精准找圆 GitHub zikai1 CircleDetection circle detection inscribed triangles image processin
  • Hive中自定义UDF,UDTF实例以及三种自定义函数的区别

    Hive中有三种UDF 分类 1 用户定义函数 user defined function UDF 2 用户定义聚集函数 user defined aggregate function UDAF 3 用户定义表生成函数 user defin
  • Jpcap环境安装配置

    1 Jpcap 下载地址 链接地址不可用 问度娘JpcapSetup 0 7 exe 然后下载 2 WinPcap 下载地址 http www winpcap org install default htm 3 Libpcap 下载地址 h
  • vue+axios+element+ui实现手机发送验证码及校验验证码功能

    配合express拿到官网接口 1 首先布局 使用element表单输入框 标签上面相应的绑定了一些事件以及校验规则 下面逻辑代码中有注释 div class wrap div
  • 按钮控件之4---QToolButton 工具按钮控件

    一 设置和基本显示 QWidget w QToolButton pb1 new QToolButton w 设置文字 setText 设置图标 setIcon 改变图标大小 setIconSize 设置提示文本 setToolTip pb1
  • PyTorch分布式训练

    PyTorch切分模型和数据两种方法 DataParallel是单进程多线程的 只用于单机情况 DistributedDataParallel支持模型并行 同时适用于单机和多机情况 多进程 每个进程都有独立的优化器 执行自己的更新过程 梯度
  • android listview 点击 数据,关于获取listview中点击item的数据的问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 listview setOnItemClickListener new AdapterView OnItemClickListener Override public void onItemCl
  • WebGPU(七):C++头部封装

    WebGPU 七 C 头部封装 在前面的学习中 我们使用的都是原生态的WebGPU API 那是基于C语言的API 但是为了更高效的开发 我们可以使用一个基于C 的库 根据参考的教程 这个github库提供更加纤细的描述 它提供了一个web
  • 目标跟踪 中 precision plot图 与 success Plot图 的具体含义及代码实现

    文章目录 precision plot图 success plot图 precision plot图 类似如下图 其含义为 跟踪算法估计的目标位置 bounding box 的中心点与人工标注 ground truth 的目标的中心点 这两