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

1、背景介绍

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

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

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

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

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

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

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

2.原理介绍

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

  • 场景描述

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

  

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

 高斯分布的中心就是图中

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

  

  • 预测下一时刻的状态

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

 写成矩阵形式就是:

 ​​​​此处的F​k​​就是状态转移矩阵。

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

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

  • 增加系统的内部控制

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

 再写成矩阵的形式:

   

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

  • 考虑系统的外部影响

  • 对观测数据的预测

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

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

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

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

  • 实际的观测结果

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

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

  • 高斯分布的乘积

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

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

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

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

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

对于高阶的高斯分布:

  • 新的高斯分布

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

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

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

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

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

预测部分:

测量部分:

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

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

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

​​K​′​​就是卡尔曼增益

 

  • 实际中的计算方法

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

  1. 预测阶段

  2. 更新阶段

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

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


总结

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

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

  1. 卡尔曼滤波器的原理

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

  • 目标不确定性和相关性的度量
  • 预测目标的下一时刻的状态
  • 系统内部的控制和外部的影响
  • 利用观测值进行修正
  • 实际应用中:预测和更新两个阶段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 简单类继承

class Person {String name;int age;public String talk(){return "我是:"this.name",今年:"this.age"岁";}public Person()/* 无参数的构造函数*/{System.out.println("1.public Person(){}");} } class Stude…

成功解决 ProxyError: Conda cannot proceed due to an error in your proxy configuration

给win10的ubuntu1804安装anaconda, 执行conda create -n daily python3.7创建虚拟环境时报错 Collecting package metadata (current_repodata.json): failedProxyError: Conda cannot proceed due to an error in your proxy configuration. Check for typos and other confi…

android 4.2修改设置菜单的背景颜色

设置中的背景主要来主题的设置, 在4.X后, android添加了新的主题: Holo 从Settings/AndroidManifest.xml中找到: Xml代码 <application android:label"string/settings_label" android:icon"mipmap/ic_launcher_settings" android…

智慧交通day02-车流量检测实现05:卡尔曼滤波器实践(小车模型)

1.filterpy FilterPy是一个实现了各种滤波器的Python模块&#xff0c;它实现著名的卡尔曼滤波和粒子滤波器。我们可以直接调用该库完成卡尔曼滤波器实现。其中的主要模块包括&#xff1a; filterpy.kalman 该模块主要实现了各种卡尔曼滤波器&#xff0c;包括常见的线性卡尔曼滤…

Linux多线程——使用互斥量同步线程

前文再续&#xff0c;书接上一回&#xff0c;在上一篇文章&#xff1a;Linux多线程——使用信号量同步线程中&#xff0c;我们留下了一个如何使用互斥量来进行线程同步的问题&#xff0c;本文将会给出互斥量的详细解说&#xff0c;并用一个互斥量解决上一篇文章中&#xff0c;要…

智慧交通day02-车流量检测实现05:小车匀速案例

""" 现在利用卡尔曼滤波对小车的运动状态进行预测。主要流程如下所示&#xff1a;导入相应的工具包小车运动数据生成参数初始化利用卡尔曼滤波进行小车状态预测可视化&#xff1a;观察参数的变化与结果 """#导入包 from matplotlib import pyplo…

排座椅

题目描述 上课的时候总会有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的一件事情。不过&#xff0c;班主任小雪发现了一些有趣的现象&#xff0c;当同学们的座次确定下来之后&#xff0c;只有有限的D对同学上课时会交头接耳。同学们在教室中坐成了M行…

智慧交通day02-车流量检测实现05:小车匀加速案例

""" 现在利用卡尔曼滤波对小车的运动状态进行预测。主要流程如下所示&#xff1a;导入相应的工具包小车运动数据生成参数初始化利用卡尔曼滤波进行小车状态预测可视化&#xff1a;观察参数的变化与结果 """#导入包 from matplotlib import pyplo…

智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波

在这里我们主要完成卡尔曼滤波器进行跟踪的相关内容的实现。 初始化&#xff1a;卡尔曼滤波器的状态变量和观测输入更新状态变量根据状态变量预测目标的边界框初始化&#xff1a; 状态量x的设定是一个七维向量&#xff1a; 分别表示目标中心位置的x,y坐标&#xff0c;面积s和当…

python或anaconda下安装opencv提示Error:No matching distribution found for opencv

python或anaconda下安装opencv提示Error&#xff1a;No matching distribution found for opencv 错误提示&#xff1a; ERROR: Could not find a version that satisfies the requirement python-opencv (from versions: none) ERROR: No matching distribution found for p…

iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”(转)

转载自&#xff1a;文&#xff0f;戴仓薯&#xff08;简书作者&#xff09;原文链接&#xff1a;http://www.jianshu.com/p/6cbde1b8b922症状 iOS 10 之后&#xff0c;陆陆续续地有用户联系我们&#xff0c;说新机第一次安装、第一次启动的时候&#xff0c;app 首屏一片空白&am…

智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波(汇总)

from __future__ import print_function from numba import jit import numpy as np from scipy.optimize import linear_sum_assignment from filterpy.kalman import KalmanFilter#计算IOU&#xff08;交并比&#xff09; jit def iou(bb_test,bb_gt):"""在两…

Redis入门指南(第2版) Redis设计思路学习与总结

https://www.qcloud.com/community/article/222 宋增宽&#xff0c;腾讯工程师&#xff0c;16年毕业加入腾讯&#xff0c;从事海量服务后台设计与研发工作&#xff0c;现在负责QQ群后台等项目&#xff0c;喜欢研究技术&#xff0c;并思考技术演变&#xff0c;专注于高并发业务架…

智慧交通day02-车流量检测实现07:匈牙利算法

匈牙利算法&#xff08;Hungarian Algorithm&#xff09;与KM算法&#xff08;Kuhn-Munkres Algorithm&#xff09;是用来解决多目标跟踪中的数据关联问题&#xff0c;匈牙利算法与KM算法都是为了求解二分图的最大匹配问题。 有一种很特别的图&#xff0c;就做二分图&#xff0…

非线性回归(Non-linear Regression)学习笔记

非线性回归&#xff08;Non-linear Regression&#xff09; 1.概率: 1.1定义概率Probability:对一件事情发生的可能性的衡量 1.2范围 0<P<1 1.3计算方法: 1.3.1根据个人置信 1.3.2根据历史数据 1.3.3根据模拟数据 1.4条件概率:&#xff08;A发生的条件下B发生的概率&…

智慧交通day02-车流量检测实现08:目标跟踪中的数据关联(将检测框bbox与卡尔曼滤波器的跟踪框进行关联匹配)

# 将YOLO模型的检测框和卡尔曼滤波的跟踪框进行匹配 def associate_detection_to_tracker(detections,trackers,iou_threshold0.3):"""将检测框bbox与卡尔曼滤波器的跟踪框进行关联匹配:param detections:检测框:param trackers:跟踪框&#xff0c;即跟踪目标:p…

回归中的相关度和R平方值 学习笔记

回归中的相关度和R平方值 自变量x和因变量y的相关度 1.皮尔逊相关系数(Pearson Correlation Coefficient): 1.1衡量两个值线性相关强度的量 1.2取值范围[-1,1]: 正向相关: >0,负向相关: <0,无相关性: 0 公式&#xff1a;correlation&#xff0c; correlationvariance(Co…

智慧交通day02-车流量检测实现09:SORT/deepSORT

SORT和DeepSORT是多目标跟踪中两个知名度比较高的算法。DeepSORT是原团队对SORT的改进版本。现在来解析一下SORT和DeepSORT的基本思路。 1.SORT SORT核心是卡尔曼滤波和匈牙利匹配两个算法。流程图如下所示&#xff0c;可以看到整体可以拆分为两个部分&#xff0c;分别是匹配…

素数环 与 算法 全排列

在说起全排列前&#xff0c;先说一下昨天碰到的一个题目&#xff08;答案不是我做出来的&#xff0c;但是我感觉有好多个亮点&#xff0c;贴出来方便日后的学习&#xff09;&#xff1a; 素数环 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;…

简单线性回归(Simple Linear Regression)和多元线性回归(Multiple Regression)学习笔记

简单线性回归(Simple Linear Regression) 0.前提介绍: 为什么需要统计量? 统计量:描述数据特征 0.1集中趋势衡量 0.1.1均值(平均数&#xff0c;平均值) (mean)&#xff1a;&#xff08;求和除以个数&#xff0c;Ex也可以表示x求均值&#xff09; 0.1.2中位数(median) : 将数…