DeepSORT(目标跟踪算法)中的解三角方程计算标准化残差(解线性方程组)

本文主要是介绍DeepSORT(目标跟踪算法)中的解三角方程计算标准化残差(解线性方程组),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DeepSORT(目标跟踪算法)中的解三角方程计算标准化残差(解线性方程组)

flyfish

《DeepSORT(目标跟踪算法)中的计算观测值与状态估计的马氏距离》这篇文章介绍了Cholesky 分解。Cholesky 分解将协方差矩阵分解成下三角矩阵,使得求解过程可以高效进行。这篇是利用 solve_triangular 函数,我们可以高效地解这些线性方程组,从而得到标准化残差和更新后的状态。
即上篇解释这句代码cholesky_factor = np.linalg.cholesky(covariance)
这篇解释下两句代码

d = measurements - mean
z = scipy.linalg.solve_triangular(cholesky_factor, d.T, lower=True, check_finite=False,overwrite_b=True)

验证下三角方程组

我们之前的下三角矩阵 L L L 和向量 b \mathbf{b} b 是:
L = [ 2 0 0 3 1 0 1 − 2 1 ] , b = [ 4 5 − 1 ] L = \begin{bmatrix} 2 & 0 & 0 \\ 3 & 1 & 0 \\ 1 & -2 & 1 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 4 \\ 5 \\ -1 \end{bmatrix} L= 231012001 ,b= 451
我们可以使用 scipy.linalg.solve_triangular 来求解方程 L x = b L \mathbf{x} = \mathbf{b} Lx=b

import numpy as np
from scipy.linalg import solve_triangular# 定义下三角矩阵 L 和向量 b
L = np.array([[2, 0, 0],[3, 1, 0],[1, -2, 1]
])
b = np.array([4, 5, -1])# 解三角方程 Lx = b
x = solve_triangular(L, b, lower=True)print("解 x:", x)

验证上三角方程组

我们之前的上三角矩阵 U U U 和向量 b \mathbf{b} b 是:
U = [ 2 − 1 3 0 1 5 0 0 4 ] , b = [ 4 6 8 ] U = \begin{bmatrix} 2 & -1 & 3 \\ 0 & 1 & 5 \\ 0 & 0 & 4 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 4 \\ 6 \\ 8 \end{bmatrix} U= 200110354 ,b= 468
同样,我们可以使用 scipy.linalg.solve_triangular 来求解方程 U x = b U \mathbf{x} = \mathbf{b} Ux=b

# 定义上三角矩阵 U 和向量 b
U = np.array([[2, -1, 3],[0, 1, 5],[0, 0, 4]
])
b_upper = np.array([4, 6, 8])# 解三角方程 Ux = b
x_upper = solve_triangular(U, b_upper, lower=False)print("解 x (上三角):", x_upper)

运行结果

当你运行上述代码时,你应该看到与我们手动计算结果相同的解。

解 x (下三角): [ 2. -1. -5.]
解 x (上三角): [-3. -4.  2.]

手动计算过程

三角矩阵

三角矩阵是一种特殊的方阵,矩阵中所有在对角线一侧的元素都是零。根据零元素的位置,三角矩阵可以分为两种类型:

  1. 下三角矩阵 (Lower Triangular Matrix)
  • 所有非零元素都在主对角线及其以下的位置。
  • 形式如下: L = [ l 11 0 0 … 0 l 21 l 22 0 … 0 l 31 l 32 l 33 … 0 ⋮ ⋮ ⋮ ⋱ 0 l n 1 l n 2 l n 3 … l n n ] L = \begin{bmatrix} l_{11} & 0 & 0 & \ldots & 0 \\ l_{21} & l_{22} & 0 & \ldots & 0 \\ l_{31} & l_{32} & l_{33} & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & 0 \\ l_{n1} & l_{n2} & l_{n3} & \ldots & l_{nn} \end{bmatrix} L= l11l21l31ln10l22l32ln200l33ln30000lnn
  1. 上三角矩阵 (Upper Triangular Matrix)
  • 所有非零元素都在主对角线及其以上的位置。
  • 形式如下: U = [ u 11 u 12 u 13 … u 1 n 0 u 22 u 23 … u 2 n 0 0 u 33 … u 3 n ⋮ ⋮ ⋮ ⋱ u ( n − 1 ) n 0 0 0 … u n n ] U = \begin{bmatrix} u_{11} & u_{12} & u_{13} & \ldots & u_{1n} \\ 0 & u_{22} & u_{23} & \ldots & u_{2n} \\ 0 & 0 & u_{33} & \ldots & u_{3n} \\ \vdots & \vdots & \vdots & \ddots & u_{(n-1)n} \\ 0 & 0 & 0 & \ldots & u_{nn} \end{bmatrix} U= u11000u12u2200u13u23u330u1nu2nu3nu(n1)nunn

三角方程组

三角方程组是由三角矩阵组成的线性方程组,由于其特殊的结构,解这类方程组的计算更加简单高效。三角方程组可以分为两种:

  1. 下三角方程组
  • 形式为 L x = b L \mathbf{x} = \mathbf{b} Lx=b,其中 L L L 是一个下三角矩阵, x \mathbf{x} x 是未知向量, b \mathbf{b} b 是已知向量。
  • 解法从上到下进行,通过顺序消元法求解。
  1. 上三角方程组
  • 形式为 U x = b U \mathbf{x} = \mathbf{b} Ux=b,其中 U U U 是一个上三角矩阵, x \mathbf{x} x 是未知向量, b \mathbf{b} b 是已知向量。
  • 解法从下到上进行,通过顺序回代法求解。

示例和求解过程

下三角方程组示例

考虑下三角矩阵 L L L 和向量 b \mathbf{b} b
L = [ 2 0 0 3 1 0 1 − 2 1 ] , b = [ 4 5 − 1 ] L = \begin{bmatrix} 2 & 0 & 0 \\ 3 & 1 & 0 \\ 1 & -2 & 1 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 4 \\ 5 \\ -1 \end{bmatrix} L= 231012001 ,b= 451
我们要解方程 L x = b L \mathbf{x} = \mathbf{b} Lx=b,其中 x \mathbf{x} x 是未知向量。

  1. 首先,解第一个方程: 2 x 1 = 4 ⟹ x 1 = 2 2x_1 = 4 \implies x_1 = 2 2x1=4x1=2
  2. 接着,解第二个方程: 3 x 1 + x 2 = 5 ⟹ 3 ⋅ 2 + x 2 = 5 ⟹ x 2 = 5 − 6 = − 1 3x_1 + x_2 = 5 \implies 3 \cdot 2 + x_2 = 5 \implies x_2 = 5 - 6 = -1 3x1+x2=532+x2=5x2=56=1
  3. 最后,解第三个方程: 1 x 1 − 2 x 2 + x 3 = − 1 ⟹ 1 ⋅ 2 − 2 ⋅ ( − 1 ) + x 3 = − 1 ⟹ 2 + 2 + x 3 = − 1 ⟹ x 3 = − 1 − 4 = − 5 1x_1 - 2x_2 + x_3 = -1 \implies 1 \cdot 2 - 2 \cdot (-1) + x_3 = -1 \implies 2 + 2 + x_3 = -1 \implies x_3 = -1 - 4 = -5 1x12x2+x3=1122(1)+x3=12+2+x3=1x3=14=5
    因此,解为:
    x = [ 2 − 1 − 5 ] \mathbf{x} = \begin{bmatrix} 2 \\ -1 \\ -5 \end{bmatrix} x= 215
    上三角方程组示例

考虑上三角矩阵 U U U 和向量 b \mathbf{b} b
U = [ 2 − 1 3 0 1 5 0 0 4 ] , b = [ 4 6 8 ] U = \begin{bmatrix} 2 & -1 & 3 \\ 0 & 1 & 5 \\ 0 & 0 & 4 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 4 \\ 6 \\ 8 \end{bmatrix} U= 200110354 ,b= 468
我们要解方程 U x = b U \mathbf{x} = \mathbf{b} Ux=b

  1. 首先,解最后一个方程: 4 x 3 = 8 ⟹ x 3 = 2 4x_3 = 8 \implies x_3 = 2 4x3=8x3=2
  2. 接着,解倒数第二个方程: x 2 + 5 x 3 = 6 ⟹ x 2 + 5 ⋅ 2 = 6 ⟹ x 2 = 6 − 10 = − 4 x_2 + 5x_3 = 6 \implies x_2 + 5 \cdot 2 = 6 \implies x_2 = 6 - 10 = -4 x2+5x3=6x2+52=6x2=610=4
  3. 最后,解第一个方程: 2 x 1 − x 2 + 3 x 3 = 4 ⟹ 2 x 1 − ( − 4 ) + 3 ⋅ 2 = 4 ⟹ 2 x 1 + 4 + 6 = 4 ⟹ 2 x 1 = 4 − 10 = − 6 ⟹ x 1 = − 3 2x_1 - x_2 + 3x_3 = 4 \implies 2x_1 - (-4) + 3 \cdot 2 = 4 \implies 2x_1 + 4 + 6 = 4 \implies 2x_1 = 4 - 10 = -6 \implies x_1 = -3 2x1x2+3x3=42x1(4)+32=42x1+4+6=42x1=410=6x1=3
    因此,解为:
    x = [ − 3 − 4 2 ] \mathbf{x} = \begin{bmatrix} -3 \\ -4 \\ 2 \end{bmatrix} x= 342

再把上一篇和这一篇结合起来

我们看 scipy.linalg.solve_triangular 这句代码是如何通过解三角方程计算标准化残差的。

示例和解释

假设我们有如下矩阵 A A A
[ 4 12 − 16 12 37 − 43 − 16 − 43 98 ] \begin{bmatrix}4 & 12 & -16 \\ 12 & 37 & -43 \\ -16 & -43 & 98 \end{bmatrix} 41216123743164398
我们已经通过 Cholesky 分解将 ( A ) 分解为下三角矩阵 ( 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
现在假设我们有一个测量向量:
measurement = [ 2 − 1 3 ] \text{measurement} = \begin{bmatrix} 2 \\ -1 \\ 3 \end{bmatrix} measurement= 213

步骤解释

  1. 计算差值 ( d )
    差值 ( d ) 是测量向量与均值向量的差。假设均值向量 ( \mu ) 为:
    μ = [ 1 0 2 ] \mu = \begin{bmatrix} 1 \\ 0 \\ 2 \end{bmatrix} μ= 102
    则差值 ( d ) 为:
    d = measurement − μ = [ 2 − 1 3 ] − [ 1 0 2 ] = [ 1 − 1 1 ] d = \text{measurement} - \mu = \begin{bmatrix} 2 \\ -1 \\ 3 \end{bmatrix} - \begin{bmatrix} 1 \\ 0 \\ 2 \end{bmatrix} = \begin{bmatrix} 1 \\ -1 \\ 1 \end{bmatrix} d=measurementμ= 213 102 = 111
  2. Cholesky 分解
    我们已经知道 ( 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
  3. 解三角方程
    scipy.linalg.solve_triangular 用于求解三角方程组。具体来说,solve_triangular 函数解决如下方程:
    L z = d Lz = d Lz=d
    其中 ( d ) 是差值向量,( L ) 是下三角矩阵,( z ) 是标准化残差向量。
    我们用 scipy.linalg.solve_triangular 来解这个方程:
import numpy as np
from scipy.linalg import cholesky, solve_triangular
# 定义矩阵和向量
L = np.array([
[2, 0, 0],
[6, 1, 0],
[-8, 5, 3]
])
d = np.array([1, -1, 1])
# 解三角方程
z = solve_triangular(L, d, lower=True)
print("Standardized residual (z):", z)

结果

Standardized residual (z): [ 0.5        -4.          8.33333333]

具体数值计算

手动求解 L z = d Lz = d Lz=d
[ 2 0 0 6 1 0 − 8 5 3 ] [ z 1 z 2 z 3 ] = [ 1 − 1 1 ] \begin{bmatrix} 2 & 0 & 0 \\ 6 & 1 & 0 \\ -8 & 5 & 3 \end{bmatrix} \begin{bmatrix} z_1 \\ z_2 \\ z_3 \end{bmatrix} = \begin{bmatrix} 1 \\ -1 \\ 1 \end{bmatrix} 268015003 z1z2z3 = 111
我们逐步求解:

  1. 第一个方程:
    2 z 1 = 1 2z_1 = 1 2z1=1
    z 1 = 1 2 = 0.5 z_1 = \frac{1}{2} = 0.5 z1=21=0.5
  2. 第二个方程:
    6 z 1 + z 2 = − 1 6z_1 + z_2 = -1 6z1+z2=1
    6 ⋅ 0.5 + z 2 = − 1 6 \cdot 0.5 + z_2 = -1 60.5+z2=1
    3 + z 2 = − 1 3 + z_2 = -1 3+z2=1
    z 2 = − 4 z_2 = -4 z2=4
  3. 第三个方程:
    − 8 z 1 + 5 z 2 + 3 z 3 = 1 -8z_1 + 5z_2 + 3z_3 = 1 8z1+5z2+3z3=1
    − 8 ⋅ 0.5 + 5 ⋅ ( − 4 ) + 3 z 3 = 1 -8 \cdot 0.5 + 5 \cdot (-4) + 3z_3 = 1 80.5+5(4)+3z3=1
    − 4 − 20 + 3 z 3 = 1 -4 - 20 + 3z_3 = 1 420+3z3=1
    − 24 + 3 z 3 = 1 -24 + 3z_3 = 1 24+3z3=1
    3 z 3 = 25 3z_3 = 25 3z3=25
    z 3 = 25 3 ≈ 8.33 z_3 = \frac{25}{3} \approx 8.33 z3=3258.33
    所以标准化残差向量 ( z ) 是:
    z = [ 0.5 − 4 8.33 ] z = \begin{bmatrix} 0.5 \\ -4 \\ 8.33 \end{bmatrix} z= 0.548.33

DeepSORT(目标跟踪算法)中的马氏距离详解(很详细)
DeepSORT(目标跟踪算法)中 可以设置阈值进行异常检测或目标跟踪的原因(写了重要步骤)

这篇关于DeepSORT(目标跟踪算法)中的解三角方程计算标准化残差(解线性方程组)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048753

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc