分享免费的编程资源和教程

网站首页 > 技术教程 正文

kalman滤波中的初始协方差求取细节

goqiw 2025-01-08 13:34:38 技术教程 6 ℃ 0 评论


1 回顾协方差的定义

2 kalman滤波中协方差的给值方法

3 对应代码


首先,回顾一下统计量的定义

当随机变量X是一维的时候:

当随机变量是多维的时候,设[X,Y]构成一个二维的随机变量,就不计算方差了,改计算协方差了:

那么此时的写方差矩阵为:

设[X,Y,Z]构成一个三维的随机变量,那么这个3维的随机变量的协方差矩阵为:

读者朋友可以写一些8维的随机变量 [X,Y,A,H,VX,VY,VA,VH]的协方差矩阵为:

[请读者朋友填空]


一般的,conv(x,y)=conv(y,x),如果随机变量x与随机变量y无关,则con(x,y)=0.

那么我们设[X,Y,Z] 构成一个三维的随机变量,且他们两两无关,则协方差矩阵为:

其次,kalman滤波中的协方差的给值方法


假设 kalman滤波中,我们的随机变量是8维的:[X,Y,A,H,Vx,Vy,Va,Vh]

各维度随机变量之间是无关的,所以这个8维的协方差为:

那么这个协方差中的这些非零值该如何给值?

这些非零值其实刚好的每个维度上的随机变量的方差。

所以,我们其实可以按照经验随机给值就行了。

现有经验就是:

X,Y,H是位置维度的,他们的方差应该再同一量级,并且都跟X或者Y或者H的均值有关。
Vx,Vy,Vh是速度维度的,他们的方差应该再同一量级,并且都跟X或者Y或者H的均值有关。

A 是比率,单独随机给一个方差值,Va是A的变化速度,也是单独给一个值。


基于以上经验,我们令:

这里的X的平均值,Y的平均值,H的平均值可以用当前框的中心点坐标,框的高度来估计。

看下代码:

代码位置:

https://gitee.com/anjiang2020_admin/deep_sort_pytorch/blob/master/deep_sort/sort/kalman_filter.pygitee.com/anjiang2020_admin/deep_sort_pytorch/blob/master/deep_sort/sort/kalman_filter.py

直接看代码中的第85行:

covariance = np.diag(np.square(std))

std是每个维度随机随机变量的标准差,1x8的向量。

np.square(std):对std中的8个元素分别求平方:

np.square使用例子


np.diag:将1x8的向量扩展成为8x8的矩阵,矩阵的对角线为std的8个值。



np.diag的作用


这就是协方差取值的方法了。

另外要注意一下

72,73,74这三行,这三行是对kalman率波中,初始均值的给值,

如果是第一帧,mean_pos就是已知道的位置,或者是目标检测模型的检测结果。

如果是第一帧以后,mean_pos就是上一帧 跟踪器和目标检测模型融合后的结果。

mean_vel初始化为0了


如果需要了解卡尔曼滤波的理论依据,想了解为什么叫滤波?卡尔曼滤波的推导过程,请转到:

https://www.toutiao.com/a7002875285347648007/?log_from=56463ae17b7ec_1631097246618

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表