最近一直在准备学习目标跟踪,也了解了一些传统的跟踪算法,然后再继续深入学习的时候,碰到了卡尔曼滤波这个东西,这是一种非常经典的算法,即便现在的深度学习中,也常常与之相结合。最早接触卡尔曼滤波应该是我大二的时候了,这么多年已经忘了,而且那时候也不是那么的理解,现在准备进一步理解,这篇文章将尽可能的用通俗的话来说一下个人的理解。
首先这里感谢b站up:421施公队,文中主要内容参考了他对卡尔曼的理解,文中的一些例子也是从他这里引用的。【或者大家可以看matlab官方提供的例子,也讲的很好】
--------------------------------------------------------------------------------------------------------------------------------
作用:比如我现在有一个用来测距离的系统,我的预测距离会受到其他因素的影响,这些因素被视为噪声,导致预测与实际距离产生偏移,而通过滤波可以将部分噪声进行滤除,使我们预测的距离和实际距离尽可能的小,即减小误差,这就有些像目标检测中对预测的bbox进行修正,让其与真实框尽可能的匹配的过程。即卡尔曼滤波是可以预测目标下一次出现的位置或状态的一个东西,并且可以对我们预测的距离进行修正。
再举一个例子,比如你要测发射器内部的温度,但又不会直接去测内部温度,因为内部温度太高了,传感器不能在这样的高温下持续工作。因此,我们可在发射器外面装一个温度传感器测量外面的温度,同时,我们还可以用我们的先验知识,比如一些温度的公式等预测一个温度值【这个靠先验知识预测的值,就好比打英雄联盟你预测对方英雄的走位一样,依赖自己的个人经验】。那么我们可将内部的视为真实值,由传感器测得的称为观测数据【不要和真实值混淆,观测数据不是真实值,他还受到其他因素的影响】,靠我们列的模型或者公式推导等先验知识得到的预测温度,被称为先验估计,那么我最终为了得到更准确的数据,需要对观测数据和先验估计做一个修正,得到最终的值被称为最优先验估计,也就是我们最终想要的结果。
适用的系统为:线性系统,线性系统需要满足齐次性和可加性,这个部分很容易理解,在大学信号处理课就有学过,这里我不再赘述。
高斯噪声:主要是指系统的噪声符合正态分布
而卡尔曼主要应用系统为:线性高斯系统
我们在学习理想低通滤波器的时候知道,低频部分赋予的权重会大,权值为1,高频部分是我们需要滤除的部分,所以权重为0,那么相应的,对于卡尔曼滤波器来说,我们需要给估计值和观测值赋予不同的权重然后得到我们想要的最优估计值。
--------------------------------------------------------------------------------------------------------------------------------
我们再借用一幅图来说明一下【图里的过程我已经进行了标注】
图片来源:b站up主421施公队
图中的左半部分是系统上一次的状态最优估计值,然后通过这个值推导出下一次的先验估计值,yk就是观测值【比如传感器或者GPS直接给的测定值】,但这两个值都是有误差的,所以需要进行修正,修正后的结果就是
---------------------------------------------------------------------------------------------------------------------------------
以上主要是对卡尔曼滤波是干什么的,大体流程是怎么样的进行了一个了解,下面就是对公式进行了解。
先看一下这两个方程:
状态方程: (1)
观测方程: (2)
上式中和都是系统中的噪声,且都符合正态分布。是控制输入,是作用在上面的一个反馈。然后A是一个状态转移矩阵,B是控制矩阵。
再进一步,
①先验估计:(3)
是当前先验估计,是上一次得到的最优估计值
对于这个公式的理解,我们可以类比成一个小车的运动,假设这个小车是匀加速直线运动,那么我们可以预测车下一时刻的路程P和速度V,比如有:
然后我们将上式再写成矩阵的形式,那么有:
和先验估计公式做下对比 ⬇ ⬇ ⬇ ⬇ ⬇
= F · + B ·
---------------------------------------------------------------------------------------------------------------------------------
②先验估计协方差:(即计算一下先验估计值的协方差)
(4)
在计算协方差的时候我们知道公式:
即自身的协方差等于他的方差
那么如果在变量前面乘一个系数A,则有:
对上式再加一个常数:
所以当我们把(3)式的先验估计带入协方差公式内:
其中wk是引入的噪声,那么我们就可以达到最终的先验协方差公式。致于为什么要算这个协方差,我是这样理解的,协方差,他本身是可以体现两个变量X,Y的相关性,比如要给一个公司借贷,那么银行需要对这个公司评估,比如公司高管的学历是变量X,还款能力是Y,那么就需要计算学历和还款能力是相关性,比如判断是不是学历越高,还款能力也越强。所以这里计算协方差,应该也是判断当前系统的状态和上一次系统状态的相关性的大小,数值越大说明越相关。
-------------------------------------------------------------------------------------------------------------------------------
然后我们再来看一下测量方程,就是观测方程,还是以小车为例子,比如我们最终要得到的是距离,所以我们只测距离,那么则有:
上面的Zv=0不是速度为0,只是我们不测他,只测的位置。
那么上式就再可以简写为:
这个就可以得到观测的数据,接下来我们需要进行最重要的一步,对数据进行修正:
其中是我们最终要得到的最优估计值, 是当前得到的先验估计值,Kt是增益,可以理解为权重,后面一项就是观测式,可以理解为,在得到修正的最优估计值的时候,我们应该更相信先验知识,还是测得的数据,然后调整K值,调整权重进行一个分配。
-----------------------------------------------------------------------------------------------------------------------------
对于上面的过程,我们重要的是调整K值,就像深度学习我们需要训练得到权重一样,这里对于增益K,或者权重K,也是有自己的更新公式:
R是引入的观测噪声的方差。
那么可以得到最优估计值协方差:
-----------------------------------------------------------------------------------------------------------------------------
所以整个的过程就是下面的过程,然后不停的迭代,最终得到我们想要的结果。
图片来源:b站up主421施公队
上面就是对关于卡尔曼的一些理解了,也算学习笔记进行总结,再次感谢b站up主421施公队 。