DeepSORT(目标跟踪算法)中的计算观测值与状态估计的马氏距离

DeepSORT(目标跟踪算法)中的计算观测值与状态估计的马氏距离

flyfish

在目标跟踪中,使用马氏距离可以帮助判断某个观测值是否与当前的状态估计一致。
gating_distance 是一个方法,用于计算状态分布和观测值之间的门限距离(gating distance)。门限距离通常用于数据关联和验证测量值是否合理。提示用户可以从 chi2inv95 中获取适当的距离阈值。如果only_position 为 False,则使用4自由度的卡方分布,否则使用2自由度的卡方分布。

使用 gating_distance 方法计算观测值与状态估计的马氏距离,并判断哪些观测值在合理范围内.
在源码中有这样一句

  cholesky_factor = np.linalg.cholesky(covariance)

将正定矩阵分解为一个下三角矩阵及其转置的过程

Cholesky 分解是一种将正定矩阵分解为一个下三角矩阵及其转置的过程。具体来说,如果 A A A 是一个对称正定矩阵,那么它可以被分解为:

A = L L T A = LL^T A=LLT

其中 L L L 是一个下三角矩阵。

具体例子

假设我们有一个 3x3 的对称正定矩阵:
[ 4 12 − 16 12 37 − 43 − 16 − 43 98 ] \begin{bmatrix}4 & 12 & -16 \\ 12 & 37 & -43 \\ -16 & -43 & 98 \end{bmatrix} 41216123743164398
我们要找到下三角矩阵 ( L ) 使得:
A = L L T A = LL^T A=LLT

计算过程

  1. 初始化 ( L ) 矩阵
    ( L ) 初始化为一个与 ( A ) 维度相同的零矩阵:
    L = [ l 11 0 0 l 21 l 22 0 l 31 l 32 l 33 ] L = \begin{bmatrix} l_{11} & 0 & 0 \\ l_{21} & l_{22} & 0 \\ l_{31} & l_{32} & l_{33} \end{bmatrix} L= l11l21l310l22l3200l33
  2. 计算 L L L 的元素
  • 计算(l_{11} )
    l 11 = a 11 = 4 = 2 l_{11} = \sqrt{a_{11}} = \sqrt{4} = 2 l11=a11 =4 =2
  • 计算 ( l_{21} )
    l 21 = a 21 l 11 = 12 2 = 6 l_{21} = \frac{a_{21}}{l_{11}} = \frac{12}{2} = 6 l21=l11a21=212=6
  • 计算 ( l_{31} )
    l 31 = a 31 l 11 = − 16 2 = − 8 l_{31} = \frac{a_{31}}{l_{11}} = \frac{-16}{2} = -8 l31=l11a31=216=8
  • 计算 ( l_{22} )
    l 22 = a 22 − l 21 2 = 37 − 6 2 = 37 − 36 = 1 l_{22} = \sqrt{a_{22} - l_{21}^2} = \sqrt{37 - 6^2} = \sqrt{37 - 36} = 1 l22=a22l212 =3762 =3736 =1
  • 计算 ( l_{32} )
    l 32 = a 32 − l 31 l 21 l 22 = − 43 − ( − 8 ) ⋅ 6 1 = − 43 + 48 1 = 5 l_{32} = \frac{a_{32} - l_{31} l_{21}}{l_{22}} = \frac{-43 - (-8) \cdot 6}{1} = \frac{-43 + 48}{1} = 5 l32=l22a32l31l21=143(8)6=143+48=5
  • 计算 ( l_{33} )
    l 33 = a 33 − l 31 2 − l 32 2 = 98 − ( − 8 ) 2 − 5 2 = 98 − 64 − 25 = 9 = 3 l_{33} = \sqrt{a_{33} - l_{31}^2 - l_{32}^2} = \sqrt{98 - (-8)^2 - 5^2} = \sqrt{98 - 64 - 25} = \sqrt{9} = 3 l33=a33l312l322 =98(8)252 =986425 =9 =3
  1. 构造 ( L ) 矩阵
    L = [ 2 0 0 6 1 0 − 8 5 3 ] L = \begin{bmatrix} 2 & 0 & 0 \\ 6 & 1 & 0 \\ -8 & 5 & 3 \end{bmatrix} L= 268015003
  2. 验证分解结果
    我们可以验证 L L T = A LL^T = A LLT=A

L L T = [ 2 0 0 6 1 0 − 8 5 3 ] [ 2 6 − 8 0 1 5 0 0 3 ] = [ 4 12 − 16 12 37 − 43 − 16 − 43 98 ] = A LL^T = \begin{bmatrix} 2 & 0 & 0 \\ 6 & 1 & 0 \\ -8 & 5 & 3 \end{bmatrix} \begin{bmatrix} 2 & 6 & -8 \\ 0 & 1 & 5 \\ 0 & 0 & 3 \end{bmatrix} = \begin{bmatrix} 4 & 12 & -16 \\ 12 & 37 & -43 \\ -16 & -43 & 98 \end{bmatrix} = A LLT= 268015003 200610853 = 41216123743164398 =A
因此,分解是正确的。

Python 示例

我们可以使用 NumPy 来计算 Cholesky 分解:

import numpy as np# 定义矩阵 A
A = np.array([[4, 12, -16],[12, 37, -43],[-16, -43, 98]
])# 计算 Cholesky 分解
L = np.linalg.cholesky(A)# 输出结果
print("L:\n", L)
print("L * L.T:\n", np.dot(L, L.T))

运行上述代码,您将得到下三角矩阵 L L L 和验证结果 L L T LL^T LLT

结果

L:[[ 2.  0.  0.][ 6.  1.  0.][-8.  5.  3.]]
L * L.T:[[  4.  12. -16.][ 12.  37. -43.][-16. -43.  98.]]

矩阵 A A A 成功地分解为 L L T LL^T LLT

计算观测值与状态估计的马氏距离的函数说明

def gating_distance(self, mean, covariance, measurements,only_position=False):mean, covariance = self.project(mean, covariance)if only_position:mean, covariance = mean[:2], covariance[:2, :2]measurements = measurements[:, :2]cholesky_factor = np.linalg.cholesky(covariance)d = measurements - meanz = scipy.linalg.solve_triangular(cholesky_factor, d.T, lower=True, check_finite=False,overwrite_b=True)squared_maha = np.sum(z * z, axis=0)return squared_maha

参数说明:

  • mean:状态分布的均值向量(8维)。
  • covariance:状态分布的协方差矩阵(8x8维)。
  • measurements:Nx4维矩阵,包含N个观测值,每个观测值的格式为 (x, y, a, h),其中 (x, y) 是边界框的中心位置,a 是长宽比,h 是高度。
  • only_position(可选):如果为 True,则只计算中心位置 (x, y) 的距离

返回值说明:

返回一个长度为 N 的数组,其中第 i 个元素包含 (mean, covariance) 和 measurements[i] 之间的平方马氏距离。

具体步骤

  • 1 投影到测量空间
    mean, covariance = self.project(mean, covariance) 将状态均值和协方差矩阵投影到测量空间。

  • 2 简化计算(如果只考虑位置)
    if only_position: 部分只考虑位置部分,简化均值和协方差矩阵。

  • 3 计算马氏距离
    cholesky_factor = np.linalg.cholesky(covariance) 计算协方差矩阵的 Cholesky 分解。
    d = measurements - mean 计算观测值与均值的差值。
    z = scipy.linalg.solve_triangular(cholesky_factor, d.T, lower=True, check_finite=False, overwrite_b=True) 通过解三角方程计算标准化残差。
    squared_maha = np.sum(z * z, axis=0) 计算平方马氏距离。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django ORM的QuerySet:解锁数据库交互的魔法钥匙

用到此篇文章知识的几篇文章: Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django API开发实战:前后端分离、Restful风格与DRF序列化器详解 文章目录 前言一、什么是QuerySet?二、QuerySet 的用途三…

Latex详细教程——图片、表格、公式

一、图片 1、占地一栏普通图片 使用figure环境,[thpb]表示希望在文中占地的优先级,[t] ~ top,顶部;[h] ~ here,当前位置;[p] ~ page of its own,浮动页;[b] ~ bottom,底…

Dell服务器根据GPU温度调整风扇转速

前言 dell服务器自动风扇是根据CPU温度来调速的,我跑AI的时候cpu温度不高但是GPU温度很高导致显卡卡死PVE虚拟机直接挂起无法运行,我看了下也没有基于显卡温度调速的脚本,于是我就自己写了一个 基于ipmi工具 乌班图等linux先安装ipmi apt …

GPT-4o:人工智能新贵的崭露头角

近日,OpenAI 推出了 GPT-4o,这一新一代的人工智能技术引起了广泛的关注和讨论。本文将对 GPT-4o 进行评价,包括与之前版本的对比分析、技术能力以及个人整体感受等方面。 1. 版本间的对比分析 GPT-4o 是 GPT 系列的最新版本,相较…

搭建vauditdemo靶场mysql为NO问题

一、问题 在搭建vauditdemo时,遇到如下显示问题: mysql版本检测为NO 二、解决 查找该方面问题时,并没有找到解决方法 然后换mysql版本换了五六个也没有解决问题 问了AI后给的答复有一条为将mysql改为mysqli 修改保存后解决问题 步骤如…

二分【1】二分查找框架 查找指定元素

目录 二分查找 基本思想 几种情况汇总 一。严格递增序列 1.查找本身 2.查找第一个大于等于自己的 3.查找第一个大于自己的 4.严格递减序列 二。有重复元素 1.取其中第一个出现的 2.取其中最后一个出现的 二分查找 基本思想 几种情况汇总 一。严格递增序列 1.查找本身…

QT 使用opencv 打开usb相机

1.在.pro文件中 添加opencv的头文件与lib 库 INCLUDEPATH D:\opencv\build\install\include LIBS D:\opencv\build\install\x64\mingw\lib\libopencv_*.a LIBS D:\opencv\build\install\x64\mingw\bin\libopencv_*.dll 2. usb相机类的头文件usbCamera.h #ifndef USBCAM…

QNX Hypervisor详细介绍

标签: QNX Hypervisor; Hypervisor; QNX Hypervisor是当前主流的满足车规级的虚拟机产品,这方面高通和QNX高度绑定,“QQ”(Qualcomm+QNX)组合在智能座舱领域占比高达90%以上。 什么是QNX Hypervisor? QNX Hypervisor是由BlackBerry旗下的QNX软件系统公司开发的一种虚…

作业-day-240607

思维导图 C编程 要求: 搭建一个货币的场景,创建一个名为 RMB 的类,该类具有整型私有成员变量 yuan(元)、jiao(角)和 fen(分),并且具有以下功能:…

模板显式、隐式实例化和(偏)特化、具体化的详细分析

最近看了<The C Programing Language>看到了模板的特化&#xff0c;突然想起来<C Primer>上说的显式具体化、隐式具体化、特化、偏特化、具体化等概念弄得头晕脑胀&#xff0c;我在网上了找了好多帖子&#xff0c;才把概念给理清楚。 看着这么多叫法&#xff0c;其…

上位机图像处理和嵌入式模块部署(f407 mcu vs h750)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在目前工业控制上面&#xff0c;f103和f407是用的最多的两种stm32 mcu。前者频率低一点&#xff0c;功能少一点&#xff0c;一般用在低端的嵌入式设…

【DevOps】路由与路由器详细介绍:原理、功能、类型及应用场景

目录 一、路由详细介绍 1、什么是路由&#xff1f; 2、路由的基本原理 3、 路由协议 静态路由 动态路由 4、 路由表 5、 路由算法 6、路由的优缺点 优点 缺点 7、 路由应用场景 二、路由器详细介绍 1、什么是路由器&#xff1f; 2、 路由器的工作原理 3、路由器…

软考初级网络管理员_02_计算机系统基础知识(硬件)单选题

1.计算机系统中采用()技术执行程序指令时&#xff0c;多条指令执行过程的不同阶段可以同时进行处理。 流水线 云计算 大数据 面向对象 2.当硬盘出现坏道或坏块是&#xff0c;使用哪种方式重构? 全盘重构 局部重构 恢复重构 本地重构 3.传输二进制信号需要()的带宽。…

C语言详解(文件操作)1

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

通过在idea上搭建虚拟hadoop环境使用MapReduce做词频去重

idea上的MapReduce ​ 一般在开发中&#xff0c;若是等到环境搭配好了再进行测试或者统计数据&#xff0c;数据处理等操作&#xff0c;那会很耽误时间&#xff0c;所以一般都是2头跑&#xff0c;1波人去在客户机上搭建环境&#xff0c;1波人通过在idea上搭建虚拟hadoop环境&am…

【Python Cookbook】S02E08 编写多行模式的正则表达式

目录 问题解决方案讨论 问题 我们打算使用正则表达式对一段文本做匹配&#xff0c;但是希望在进行匹配时能够跨越多行。换句话说&#xff0c;正则表达式中 . 可以匹配任意除了换行符的字符&#xff0c;我们如何让他也能够匹配换行符&#xff1f; 解决方案 例如在如下的两个案…

React+TS前台项目实战(五)-- 全局常用组件Link封装+使用Omit定义类型

文章目录 前言Link组件1. 功能分析2. 代码注释说明3. 使用方式 总结 前言 接下来的几篇文章&#xff0c;将主要封装全局常用组件&#xff0c;以便于后续编写页面的简易和维护性的提高。本文将主要讲述跳转组件的封装。 Link组件 1. 功能分析 &#xff08;1&#xff09;国际化…

java期末细节知识整理(三)

1.一个类是多个对象的共性体现 2.一个类可以有多个修饰符 3.类是将数据和方法封装在一起的一种数据结构 4.类和对象是面向对象程序设计方法中最核心的概念 5.在三目运算符flag&#xff1f;x1&#xff1a;x2中&#xff0c;如果x1和x2中有一个是浮点数&#xff0c;那么返回值…

Vue3父组件如何访问子组件属性和方法

本篇内容主要是父组件如何访问子组件的属性和方法 文章目录 子组件 //son.vue代码const list (info) >{console.log(info) }const name ref("XXXX")//子组件向父组件暴露了一个方法&#xff0c;然后父组件就可以去使用子组件里面的一些属性和方法了 //子组件向…

JAVA Mongodb 深入学习(二)索引的创建和优化

一、常用索引类型 1、单个索引 单个索引的创建 db.你的表名.createIndex({"你的字段名":1}) 单个索引的创建且是唯一索引 db.你的表名.createIndex({"你的字段名":1}),{ unique: true }) 2、复合索引 将多个过滤的字段&#xff0c;做成索引&#xff0c;…