智慧交通day02-车流量检测实现04:卡尔曼滤波器

简介: 卡尔曼滤波(Kalman)无论是在单目标还是多目标领域都是很常用的一种算法,我们将卡尔曼滤波看做一种运动模型,用来对目标的位置进行预测,并且利用预测结果对跟踪的目标进行修正,属于自动控制理论中的一种方法。

1、背景介绍


卡尔曼滤波(Kalman)无论是在单目标还是多目标领域都是很常用的一种算法,我们将卡尔曼滤波看做一种运动模型,用来对目标的位置进行预测,并且利用预测结果对跟踪的目标进行修正,属于自动控制理论中的一种方法。


在对视频中的目标进行跟踪时,当目标运动速度较慢时,很容易将前后两帧的目标进行关联,如下图所示:


dc55a4eabceb495083333460eb3cc324.png


如果目标运动速度比较快,或者进行隔帧检测时,在后续帧中,目标A已运动到前一帧B所在的位置,这时再进行关联就会得到错误的结果,将A‘与B关联在一起。


fdf4fa5e9192438d9ec4d493039572e7.png


那怎么才能避免这种出现关联误差呢?我们可以在进行目标关联之前,对目标在后续帧中出现的位置进行预测,然后与预测结果进行对比关联,如下图所示:


26a69b06e3814295bfe73a5073eaa57a.png


我们在对比关联之前,先预测出A和B在下一帧中的位置,然后再使用实际的检测位置与预测的位置进行对比关联,只要预测足够精确,几乎不会出现由于速度太快而存在的误差。


卡尔曼滤波就可以用来预测目标在后续帧中出现的位置,如下图所示,卡尔曼滤波器就可以根据前面五帧数据目标的位置,预测第6帧目标的位置。


07a39a7a9ed7492292265673b92c8380.png


卡尔曼滤波器最大的优点是采用递归的方法来解决线性滤波的问题,它只需要当前的测量值和前一个周期的预测值就能够进行状态估计。由于这种递归方法不需要大量的存储空间,每一步的计算量小,计算步骤清晰,非常适合计算机处理,因此卡尔曼滤波受到了普遍的欢迎,在各种领域具有广泛的应用前景。


2.原理介绍


我们假设一个简单的场景,有一辆小车在行驶,它的速度是v,可以通过观测得到它的位置p,也就是说我们可以实时的观测小车的状态。


  • 场景描述


小车在某一时刻的状态表示为一个向量:


 d92ceedba13e417298ed1e4600cddbe0.png


虽然我们比较确定小车此时的状态,无论是计算还是检测都会存在一定的误差,所以我们只能认为当前状态是其真实状态的一个最优估计。那么我们不妨认为当前状态服从一个高斯分布,如下图所示:


b5e57e2055634a779a5dee1e1ddb9742.png


高斯分布的中心835bfdc929be45faa086ba31d41c0ca7.png就是图中82ccf292c901487fb87d47c7961d8253.png

615404b95c9347f9a553bc46e687c64e.png


因为我们有两个变量,所以可以用一个协方差矩阵Pk来表示数据之间的相关性和离散程度:


 0e2511f7a56d4bdd8ab0a4152126d531.png


  • 预测下一时刻的状态


下面我们需要通过小车的当前状态,运用一些物理学的知识来预测它的下一个状态,即通过k-1时刻的位置和速度,可以推测下一个时刻的状态为:


12e0e2d81f0d47c09da1128192ce92d9.png


写成矩阵形式就是:


8c2f92b77a6a4664bb774da0c4d4a4bd.png


此处的Fk就是状态转移矩阵。


系统的不确定性和相关性可以通过协方差矩阵描述,那根据当前协方差矩阵预测下一时刻的协方差矩阵:


86b02a6af0e54b219a0334d97f35b3dd.png


在这里我们用到了协方差的性质:


fb78e4f6335641fc96f19f270587c45f.png


  • 增加系统的内部控制


我们需要对小车进行控制,比如加速和减速,假设某个时刻我们施加的加速度是\color{green}{\mathbf{a}}a,那么下一时刻的位置和速度则应该为:


20190817113318171.png


再写成矩阵的形式:


 20190817113330252.png


其中,Bk我们称为状态控制矩阵,而uk称为状态控制向量,前者表明的是加速减速如何改变小车的状态,而后者则表明控制的力度大小和方向。


  • 考虑系统的外部影响


4ac7468b2d5047dbacb82fc169fe274d.png


  • 对观测数据的预测


前面我们通过小车的上一个状态,对它的当前状态做了预测,此时我们要考虑对于小车的状态能够观测到什么呢?


小车的当前状态和观测到的数据应该具备某种特定的关系,假设这个关系通过矩阵表示为Hk,如下图所示:


344c4edc01674b16ad53c7ff682a26a2.png


在此前对小车所做的预测状态下,我们的观测值为:


2894522b24de4b409ab3892637f94a33.png


那我们就完成了对观测值的预测:


d22ddac28fb542959ba3dfb7c9ebccb7.png


  • 实际的观测结果


前面推测小车当前的状态,推测了我们的观测数据,但是现实和理想之间必然是存在差距的,我们预测的观测结果和实际的观测结果可能如下图所示:


adefbc625908435fadb974b08f83c3ac.png

9f298b9ea0574e9a96138e2129fa8214.png


卡尔曼滤波需要做的最重要的最核心的事就是融合预测和观测的结果,充分利用两者的不确定性来得到更加准确的估计。通俗来说就是怎么从上面的两个椭圆中来得到中间淡黄色部分的高斯分布,看起来这是预测和观测高斯分布的重合部分,也就是概率比较高的部分。


  • 高斯分布的乘积


一维高斯分布来分析比较简单点


1c4d8a6ec4654d268611728c6a24b865.png


两个服从高斯分布的函数相乘:


       对于任意两个高斯分布,将二者相乘之后还是高斯分布,我们利用高斯分布的两个特性进行求解,其一是均值处分布函数取极大值,其二是均值处分布曲线的曲率为其二阶导数,我们可以求出:


20190817132507870.png


重新归一化,使总概率为1,可以得到


aae3cd503fc64b6fae5efa551e01f394.png


图中蓝色和橙色两个波形的直接乘积是黄色这个波形,紫色是计算了均值和方差的记过,黄色的分布可以通过紫色的波形乘上一个系数得到。


787f48d0e7c84c23884a5e3e01b2c182.png


对于高阶的高斯分布:


7cf0e4536ef54afe99d839fc49e41064.png


  • 新的高斯分布


通过预测和观测值的高斯分布的乘积得到的即是卡尔曼滤波的最优估计


在新的均值和方差计算公式中,我们令:


254dd22ceca24099959b5fc53b858e5a.png


将式(11)中的两个式子相同的部分用 k 表示为(13),下面进一步将式(13)写成矩阵的形式:


c7f9081799fd422d8e5da84f4e72f61e.png


如果 Σ 表示高斯分布的协方差,u 表示每个维度的均值,将它们写成矩阵形式就是:


20190817113940124.png


前面我们已经得到了预测结果和观测结果服从的两个高斯分布,如下:


预测部分:


20190817114029226.png


测量部分:


20190817114058531.png


将它们放到式(15)中算出它们之间的重叠部分


20190817114125142.png


由式(14)可得卡尔曼增益为:


20190817114142974.png


所以我们可以进行如下推导,将式(16)和式(17)两边化简下,注意K可以展开得到卡尔曼滤波对当前状态(基于预测和观测的)最优估计的计算方程:


20190817114158765.png


K′就是卡尔曼增益:


23390b3bf51b4d7c94c1fe7cfc3b2ef3.png

0db450706a034b6b9a70c92ab07c3c1d.png

20190817114212747.png


  • 实际中的计算方法


在实际使用卡尔曼滤波的时候,计算的步骤一般为:


1.预测阶段


f6003cc18b7243768218396ea7eaf47e.png


2.更新阶段


4a425d829b604c119d759b2933ba574d.png


1.最重要的是,我们要时刻关注不断迭代的系统变量,分别是系统的状态:x,其误差协方差矩阵:P,和卡尔曼增益:K。


2.在实际应用时,对QR的选择要依据实际情况来定,可以不断调试来寻找一个最优解,也可以是可变的,只要最终效果能够更好。


总结


1.卡尔曼滤波器中在目标跟踪中的应用


卡尔曼滤波器通过预测目标在后续帧中的位置,避免在进行目标关联时出现误差


1.卡尔曼滤波器的原理


滤波器根据上一时刻( k -1 时刻) 的值来估计当前时刻( k 时刻) 的状态,得到 k 时刻的先验估计值; 然后使用当前时刻的测量值来更正这个估计值,得到当前时刻的估计值。


  • 目标不确定性和相关性的度量


  • 预测目标的下一时刻的状态


  • 系统内部的控制和外部的影响


  • 利用观测值进行修正


  • 实际应用中:预测和更新两个阶段
目录
相关文章
|
6天前
|
传感器 机器学习/深度学习 算法
植保机器人作物识别与监测
植保机器人作物识别与监测
46 2
|
9月前
|
传感器 安全 前端开发
井下空气质量检测预警系统学习
随着现代化煤矿深入开采,井下空气质量监测已成为重要的安全问题。煤矿通常有大量地瓦斯、煤尘等气体,如果空气质量不良,无疑会给矿工的健康和安全带来极大的威胁。因此,煤矿必须配备有效的井下空气质量检测预警系统,用来监测空气质量,预警可能的问题,为矿工提供更安全的工作环境。
井下空气质量检测预警系统学习
|
10月前
使用光流法跟踪汽车
使用光流估计在视频序列中检测和跟踪汽车。
51 0
|
10月前
|
传感器 编解码 算法
【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)
【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matlab代码实现)
|
10月前
|
算法 自动驾驶
【无人车】用于无人地面车辆的路径跟踪算法(Matlab代码实现)
【无人车】用于无人地面车辆的路径跟踪算法(Matlab代码实现)
|
数据可视化 算法 智慧交通
智慧交通day02-车流量检测实现05:卡尔曼滤波器实践(小车模型)
FilterPy是一个实现了各种滤波器的Python模块,它实现著名的卡尔曼滤波和粒子滤波器。我们可以直接调用该库完成卡尔曼滤波器实现。
216 0
|
算法 决策智能 计算机视觉
智慧交通day02-车流量检测实现07:匈牙利算法
有一种很特别的图,就做二分图,那什么是二分图呢?就是能分成两组,U,V。其中,U上的点不能相互连通,只能连去V中的点,同理,V中的点不能相互连通,只能连去U中的点。这样,就叫做二分图。
113 0
|
算法 计算机视觉 智慧交通
智慧交通day02-车流量检测实现10:多目标追踪实现
该方法实现了SORT算法,输入是当前帧中所有物体的检测框的集合,包括目标的score,输出是当前帧标的跟踪框集合,包括目标的跟踪的id要求是即使检测框为空,也必须对每一帧调用此方法,返回一个类似的输出数组,最后一列是目标对像的id。
93 0
|
机器学习/深度学习 监控 算法
智慧交通day02-车流量检测实现02:多目标追踪
多目标跟踪,即MOT(Multi-Object Tracking),也就是在一段视频中同时跟踪多个目标。MOT主要应用在安防监控和自动驾驶等领域中。
204 0
|
智慧交通
智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波
在这里我们主要完成卡尔曼滤波器进行跟踪的相关内容的实现。
71 0