目标跟踪 中 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图 的具体含义及代码实现 的相关文章

  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • Simulink 仿真引擎如何工作?

    我想了解 Simulink 仿真引擎的工作原理 它是否使用离散事件模拟机制 那么如何处理连续时间 它是否依赖于基于静态循环的代码生成 或者 在第一个周期之前 它会计算出块的执行顺序 从不需要任何其他块输入的块开始 每个周期 它都会根据输入和
  • 如何在 Matlab 中对数组应用低通或高通滤波器?

    有没有一种简单的方法可以将低通或高通滤波器应用于 MATLAB 中的数组 我对 MATLAB 的强大功能 或数学的复杂性 有点不知所措 需要一个简单的函数或一些指导 因为我无法从文档或网络搜索中找到答案 看着那 这filter http w
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • MATLAB 类的 Description 和DetailedDescription 属性

    内置 MATLAB 类具有 Description 和 DetailedDescription 属性的值 gt gt handle ans meta class handle Package meta Properties Name han
  • MATLAB:在不使用循环的情况下提取矩阵的多个部分

    我有一个巨大的 2D 矩阵 我想从中提取 15 个不同的 100x100 部分 我有两个向量 x 和 y 其中保存了零件的左上角索引 我用过这样的东西 result cam1 x 1 end x 1 end 99 y 1 end y 1 e
  • 从动态 Java 类路径导入 Java 类时出现 Matlab 编译器 MCC 错误

    我怎样才能得到mcc识别来自用户提供的 Java 库的导入 还是简单地忽略无法解析的导入 我有一个使用 Matlab 编译器构建的 Matlab 代码库 但构建正在中断 因为mcc遇到的时候会报错importMatlab 动态类路径上的 J

随机推荐

  • 爬取淘宝价格

    爬取淘宝价格 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 的目标的中心点 这两