经典重温:卡尔曼滤波器介绍与理论分析

关注公众号,发现CV技术之美

最近业余在研究物体追踪,看到传统的方法用到了卡尔曼滤波(Kalman Filter)+匈牙利算法做轨迹匹配,因而开始研究这两种算法是如何实现的。这里简单总结一下卡尔曼滤波算法探索的过程。


 卡尔曼滤波的背景

卡尔曼滤波常用于动态多变化系统中的状态估计,是一种通用性强的自回归滤波器。它的由来和NASA登月有关。其发明者鲁道夫.E.卡尔曼在一次访问NASA的时候,发现阿波罗计划中一个难点是轨道预测问题,因而提出了一种滤波器,可以帮助高效预测轨迹,辅助导航。NASA最终使用了这个滤波器,然后成功实现人类第一次登月计划。卡尔曼滤波器由此得名。

卡尔曼滤波器可以用来估计不确定信息,并给出状态量下一时刻的情况。即便在有噪声干扰的情况下,也可以较好的预测下一状态的情况,并找出多变量间不易察觉的相关性。因而卡尔曼滤波器可以很好适应不断变化的系统,并且内存占用量低,推理速度快,比较适合资源受限制的场景

 卡尔曼滤波介绍

先来看一个简单的问题。考虑一辆车在道路上行驶,他的状态和运行速度,位置信息相关,用向量表示为:

990ec6ebe01b48b829b0c11112f00eee.png

其中 p 变量对应位置 v 变量对应速度,都为随机变量且符合正态分布,每个分布都有一个均值(正太分布的中心)和对应的方差 .(衡量变量的不确定性)。

那么卡尔曼滤波是怎么工作的呢?我们还是回到刚才的例子。上面例子中的这两个变量看起来没有明显的对应关系,也就是说,给定速度,没法准确定出位置。

但是如果我们知道位置和速度的初始信息,其实是有办法将两个变量联系起来的。假设车辆一直保持匀速行驶,通过下面的公式其实就可以(要注意的是,换成其他问题,我们不一定能意识到这个公式的存在)

4d335d04c6883c5dfd892ba12190d802.png

基于上面的公式,我们可以直观的定义当前时刻和上一时刻之间的对应关系;假定系统中所有状态量为5655b1c39c644b86841a63085a6433e7.png,对应的有

e52ad0061d8729df9c4509d143917bfc.png

这里我们称b56ea22777f37fd5825faef0f76328d3.png为预测矩阵,也会用b60de208949b6896c08529a7ff439cc7.png表示,预测矩阵的目的是刻画从上一状态到当前状态对应的关系。

这也就是卡尔曼滤波的目标。我们希望从不确定的系统中,尽可能的发掘出确定的信息。那么另一个问题是,如何知道有多少确定(不确定)的信息可以发掘呢?我们需要一个指标来衡量系统的不确定性。

回到上个例子中,位置和速度的关系其实是不确定的,但是却是有相关性的,只是不能直观的看出来。那么如何衡量这种相关性呢?其中一个办法就是使用协方差矩阵,来衡量两个变量的相关程度。给定c0922330ccfdfc5e5d317495ffb2c7d7.png,对应的协方差矩阵p为

afe64b7c43572f8f94d337a154b013b1.png

考虑到预测矩阵的影响,给定上一时刻的c346fb62938f72dc143daccd13c94ead.png,对应可以更新为

9e6636d6e94f548c504df0262d94f4af.png

由此便解决了理想情况下卡尔曼滤波如何做预测的问题。但是实际情况下,系统中可能还是存在干扰或者噪声因素。比如车辆行驶过程中,遇到雨天路滑则需要减速慢行,这种情况下道路状况会作为外部因素,干扰系统行为和决策。因为针对变化量f8beea47208096dc99568ff0637c90c4.png,会额外追加一个控制变量来建模外部因素。

假设行车遇到雨天需要减速,我们考虑了运动时刻的车辆加速度a为外部影响,那么有,

645782222e9df963516e2a2ff4264ed2.png

对比之前计算状态的关系式,可以发现新引入的状态对系统产生了影响,因而记为

94319bead10e620530363796225f2efb.png

43301e7ab24ffa7487edc67e3862a54e.png

同时我们使用60d269c4e54b17e17edde477eae3175d.png表示,引入的外部因素对于协方差的影响,因而有

119ddca7f05b64da570913aab8cf9674.png

这里总结一下,新引入的外部变量使得

1)当前的最佳估计不再为系统自身的最佳估计,还考虑了外部因素影响

2)当前的不确定性不再为系统自身的不确定性,引入了外部的不确定性做参考

 卡尔曼滤波公式推导

通过预测状态量和不确定性,我们可以有较大把握预测对某一时刻下的状态。到目前为止,我们很好地完成了对系统的建模,但是有一个问题没有考虑到,那就是系统的初始值怎么得到。

对于系统中数据的收集,我们一般基于传感器来实现。但是同一传感器在同一时刻,可能因为外部原因导致收集得到的信号不完全一样。因而系统输入初始值对应结果大概率有很多噪音。这里我们把收集数据的均值记为, 方差记为884a160f3793b9dc6681b724485cd583.png

现在就有了新的问题。对于当前时刻,我们有了两组参考值,一组是预测值,一组是测量值。也许两组都对,也许其中只有一组对,也可能都不准(比如传感器测得不直接,偏差太大;预测值也偏差太大)。这种情况下,应该如何得到最终结果呢?

其中一个方案是,考虑直接融合两组结果。我们假设这两组数据都是正态分布,因而直接取pdf相乘就可以得到一个新的分布,也就是做一个联合概率分布的计算。这个联合概率分布本质上计算了前后状态转化对应分布和输入输出状态分布联合作用下的结果。

因而我们有下式

4887053a7001562af244c44e3760d975.png

这里要注意的是,两个高斯pdf的乘积不是一个pdf(概率加和明显不是1),但是正比于一个未知高斯分布,因而我们可以求得这个新分布的均值和方差,根据如下关系,

7be638c2d54ca988c07bbf7899d1fda7.png

为了使其成立,我们需要保证:

bd23c9ea66b85f4f6e8ad1b60c3d8ad4.png

联立二式并稍作变化,我们得到:

014778fab13f37aebec061db6a291ce5.png

f2694dcaeebd11a18a72bd0be74adc9a.png

为卡尔曼增益, 我们有

0fdb7f13bfb0bd8e6cf2918f46b7bfa2.png

对应的矩阵形式为:

2155d5358dbfd231185984b91282dba2.png

这里为了防止混淆,先停下来总结一下,

1)我们介绍了预测变量,下标为p,分布均值,方差dfede3583e2d363ff54ae6234d3a6c33.png分别对应于345c546383677985aa4535b1df0a61dd.pnga4591c0a3eb26c64a36a92317a7cdc60.png

2)我们介绍了观测变量,下标为ob,分布均值记为587933930dbea8dfe25e18a1f622cfec.png, 方差记为89bef9acd67766fee7c3335e7cbf7199.png

3)基于1,2,我们代入即可推导出完整的卡尔曼滤波公式

所以根据刚才列出的计算式分别代入,我们可以得到,

eb23d08d26957408a1a118279ed08cfc.png

进而可以求解得状态更新方程和卡尔曼增益求解公式:

24a5c41db187b6efbe71e3ca2edd52ae.png

注意这里的卡尔曼增益更新为1fc1a89cdc8f5c9b5b41b5c41b75f3f1.png

c4d6f055ed8b9b71193e8d9474ab8963.png

至此,便可以套公式更新卡尔曼滤波的参数了。

 总结

卡尔曼滤波是处理线性系统非常好用的工具,对于不确定性的建模取自于物理、机械模型,所以对于现实生活中的状态还是能很好把握的。对于非线性系统,拓展卡尔曼滤波(extended Kalman filter)也可以做到很好地处理。

本文通过现实场景建模引入问题,简单介绍了卡尔曼滤波算法,对于更加清楚的公式推导请见参考列出的几篇相关文章。

欢迎大家在下方留言或者将建议发到我的邮箱(lcltopismine3@163.com),以便更好地交流心得。另外感谢参考文献所列诸作者。

参考文献:

. 论智:图说卡尔曼滤波,一份通俗易懂的教程

(https://zhuanlan.zhihu.com/p/39912633)

. 涅索斯衬衫:卡尔曼滤波(Kalman Filter)原理与公式推导

(https://zhuanlan.zhihu.com/p/48876718)

. Calculate the product of two Gaussian PDF's

(https://math.stackexchange.com/questions/114420/calculate-the-product-of-two-gaussian-pdfs)

. 详解ADAS之FCW前碰撞预警系统技术原理-公司新闻-深圳前海米乐视科技有限公司

(http://mileview.cn/gongsixinwen/22-43.html)

. 如何通俗并尽可能详细地解释卡尔曼滤波?

(https://www.zhihu.com/question/23971601)

0dcd649bab72add5f6b023494145a9a6.png

END

欢迎加入「计算机视觉交流群👇备注:CV

3f1e6be60cf2f324d388c60d6ad83fe4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值