详解多目标跟踪(MOT)算法中的Kalman滤波

Kalman滤波算法的原理可以参考: 卡尔曼滤波理解

以sort算法为例, 算法中使用到了卡尔曼滤波。 其作用是:通过t-1帧的结果, 通过卡尔曼滤波的predict过程得到目标在t帧的先验估计, 同时在t帧通过检测模型得到检测结果, 对先验估计值和检测结果进行匈牙利算法匹配,匹配的结果作为t帧的测量值,执行卡尔曼滤波的update过程, 得到目标的后验估计。

在使用卡尔曼滤波时, 有以下几个变量需要确定:

1 状态变量

在sort中, 使用了7维的状态变量, 它们是
( u , v , s , r , u ˙ , v ˙ , s ˙ ) (u,v, s, r, \dot{u}, \dot{v}, \dot{s} ) (u,v,s,r,u˙,v˙,s˙)
前4项分别是检测框的中心坐标, 检测框的尺度(s=w*h), 检测框的宽高比(r=w/h)。后3项表示它们的速度, 这里作者把 r r r当成常数, 所以没有对应的速度。

2 观测变量

直接能测量得到的结果, 也就是检测得到的结果。 是一个4维向量。
( u , v , s , r ) (u,v, s,r) (u,v,s,r)

3 状态转移矩阵

状态转移矩阵表征了如何把当前帧的状态变量, 转移到下一帧 , 表示的是运行模型。
sort中假设了匀速运动, 因此状态转移关系如下:

{ u t = u t − 1 + u t − 1 ˙ v t = v t − 1 + v t − 1 ˙ s t = s t − 1 + s t − 1 ˙ r t = r t − 1 u t ˙ = u t − 1 ˙ v t ˙ = v t − 1 ˙ s t ˙ = s t − 1 ˙ \left\{ \begin{matrix} u_t= u_{t-1}+\dot{u_{t-1}} \\ v_t= v_{t-1}+\dot{v_{t-1}} \\ s_t= s_{t-1}+\dot{s_{t-1}} \\ r_t = r_{t-1}\\ \dot{u_{t}} =\dot{u_{t-1}}\\ \dot{v_{t}} =\dot{v_{t-1}}\\ \dot{s_{t}} =\dot{s_{t-1}}\\ \end{matrix} \right. ut=ut1+ut1˙vt=vt1+vt1˙st=st1+st1˙rt=rt1ut˙=ut1˙vt˙=vt1˙st˙=st1˙

所以状态转移矩阵为:
[ 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 ] (1) \begin{bmatrix} 1 & 0 & 0 &0 &1&0&0 \\ 0 & 1 & 0 &0 &0&1&0 \\ 0& 0 & 1 &0 &0&0&1 \\ 0 & 0 & 0 &1 &0&0&0 \\ 0 & 0 & 0 &0 &1&0&0 \\ 0 & 0 & 0 &0 &0&1&0 \\ 0 & 0 & 0 &0 &0&0&1 \\ \end{bmatrix} \tag{1} 1000000010000000100000001000100010001000100010001 (1)

4 测量矩阵

测量矩阵是用于将状态空间的变量映射到观测空间。
在sort中直接取观测空间的值等于状态空间中相应的值。
所以测量矩阵为:
[ 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 ] (2) \begin{bmatrix} 1 & 0 & 0 &0 &0&0&0 \\ 0 & 1 & 0 &0 &0&0&0 \\ 0& 0 & 1 &0 &0&0&0 \\ 0 & 0 & 0 &1 &0&0&0 \\ \end{bmatrix} \tag{2} 1000010000100001000000000000 (2)

5 状态变量协方差矩阵P

P的初始值需要手动设定, 卡尔曼滤波过程中P会自动更新。 初始值其实也没那么敏感 ,随着卡尔曼滤波的进行,P会很快收敛。 所以不用担心P值设置的不好。 P值可以根据经验设定, 不确定性越大, 或者认为偏差越大, 就给更高的值就可以了。
P的初始值是一个对角矩阵。 sort中作者设置为:
[ 10 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 10000 0 0 0 0 0 0 0 10000 0 0 0 0 0 0 0 10000 ] (3) \begin{bmatrix} 1 0& 0 & 0 &0 &0&0&0 \\ 0 & 10 & 0 &0 &0&0&0 \\ 0& 0 & 10 &0 &0&0&0 \\ 0 & 0 & 0 &1 0&0&0&0 \\ 0 & 0 & 0 &0 &10000&0&0 \\ 0 & 0 & 0 &0 &0&10000&0 \\ 0 & 0 & 0 &0 &0&0&10000 \\ \end{bmatrix} \tag{3} 10000000010000000010000000010000000010000000000010000000000010000 (3)
由于后3个值初始的时候没有, 所以给予了很高的方差。

6 观测噪声协方差矩阵R

测量噪声协方差矩阵也是一个对角矩阵,衡量的是对观测结果的不确定性。 维度为观测变量的大小, 如sort中观测变量大小是4, 所以R是维度为4的方阵。
这个也需要根据经验设置,并且这个值是恒定的, 设定好了就不会变了,整个卡尔曼滤波过程都不会再变。
sort中设定的是:
[ 1 0 0 0 0 1 0 0 0 0 10 0 0 0 0 10 ] (4) \begin{bmatrix} 1 & 0 & 0 &0 & \\ 0 & 1 & 0 &0 \\ 0& 0 & 10 &0 \\ 0 & 0 & 0 &10 \\ \end{bmatrix} \tag{4} 100001000010000010 (4)
后2个观测变量给予了更大的不确定性。

7 处理噪声协方差矩阵Q

处理噪声协方差矩阵是一个对角帧, 衡量的是状态转移过程的不确定性。维度为状态变量的大小, 如sort中观测变量大小是7, 所以R是维度为7的方阵。
这个也需要根据经验设置,并且这个值是恒定的, 设定好了就不会变了,整个卡尔曼滤波过程都不会再变。
sort中设定的是:
[ 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0.01 0 0 0 0 0 0 0 0.01 0 0 0 0 0 0 0 0.0001 ] (5) \begin{bmatrix} 1 & 0 & 0 &0 &0&0&0 \\ 0 & 1 & 0 &0 &0&0&0 \\ 0& 0 & 1&0 &0&0&0 \\ 0 & 0 & 0 &1 &0&0&0 \\ 0 & 0 & 0 &0 &0.01&0&0 \\ 0 & 0 & 0 &0 &0&0.01&0 \\ 0 & 0 & 0 &0 &0&0&0.0001\\ \end{bmatrix} \tag{5} 100000001000000010000000100000000.0100000000.0100000000.0001 (5)
后3个状态变量给予了更小的不确定性。

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

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

相关文章

【Linux网络】TCP UDP socket HTTP webSocket之间的区别

目录 一、OSI & TCP/IP模型 二、几者之间的关系 三、HTTP 四、Socket 五、WebSocket 5.1、WebSocket 优点 一、OSI & TCP/IP模型 首先我们要了解OSI七层模型,和预支对应的TCP/IP 四层的模型。 用下面的图可以看出,TCP UDP 工作在传输层&…

前端面试:【新技术与趋势】WebAssembly、Serverless、GraphQL

在不断演进的技术领域中,WebAssembly、Serverless和GraphQL都是备受关注的新技术和趋势。它们改变了软件开发、部署和数据传输的方式,为开发者提供了更多的选择和灵活性。 1. WebAssembly(Wasm): 简介: Web…

Word导出创建Adobe PDF其中emf图片公式马赛克化及文字缺失

软件版本 Word 2021 Visio 2019 Adobe Acrobat Pro 2020 问题描述 公式马赛克化,是指在Word中使用MathType编辑的公式,然后在Visio中使用图片(增强型图元文件)形式得到的粘贴对象,效果如下 文字缺失,是指Word导出→创建Adobe P…

一文学会lua脚本

文章目录 0.前言背景应用 1. 学习大纲1. 学习基本语法:2. 理解函数和模块:3. 深入数据结构:4. 高级特性和技巧:5. 实践项目: 2. Lua脚本2.1 学习基本语法2.2 理解函数和模块2.3 深入数据结构2.4 高级特性和技巧 3. 高级…

Hbase分布式安装

一、环境准备 启动zookeeper 启动hdfs 二、安装 上传安装包 1、解压 tar -zxf hbase-2.2.2-bin.tar.gz -C /opt/installs/2、更名 mv hbase-2.2.2/ hbase3、配置环境变量 [roothadoop11 conf]# vim /etc/profile export HBASE_HOME/opt/installs/hbase export PATH$PATH:$…

如何使用Linux文件系统?

为了让你更好地理解Linux文件系统,我要告诉你一些非常非常重要的知识点,确保你能够顺利地在这个庞大的世界中游走。 首先,你需要了解Linux中的基本概念。这个系统不像你的手机或者电脑,它是一个“文本”驱动的操作系统。这里的所…

Spring Boot中如何编写优雅的单元测试

单元测试是指对软件中的最小可测试单元进行检查和验证。在Java中,单元测试的最小单元是类。通过编写针对类或方法的小段代码,来检验被测代码是否符合预期结果或行为。执行单元测试可以帮助开发者验证代码是否正确实现了功能需求,以及是否能够…

vr内容编辑软件降低了虚拟现实项目开发门槛

VR虚拟场景编辑器是一种专门用于创建、修改和设计虚拟场景的工具。它利用vr虚拟现实技术,让用户可以在三维空间中直接对场景进行操作和编辑。这种编辑器的出现,使得用户可以更加直观、自由地进行场景设计和制作,为诸多领域带来了新的可能性。…

深入解析 Lambda 表达式

系列文章目录 文章目录 系列文章目录前言一、Lambda 表达式的基本概念二、Lambda 表达式的应用1.集合操作2.函数式接口3.线程操作三、Lambda 表达式 vs. 匿名类四、Lambda 表达式的局限性总结前言 Lambda表达式是Java 8引入的一项重要特性,它允许我们以更简洁、更紧凑的方式编…

Kafka生产者原理 kafka生产者发送流程 kafka消息发送到集群步骤 kafka如何发送消息 kafka详解

kafka尚硅谷视频: 10_尚硅谷_Kafka_生产者_原理_哔哩哔哩_bilibili ​ 1. producer初始化:加载默认配置,以及配置的参数,开启网络线程 2. 拦截器拦截 3. 序列化器进行消息key, value序列化 4. 进行分区 5. kafka broker集群 获取…

Linux常用命令——dhclient命令

在线Linux命令查询工具 dhclient 动态获取或释放IP地址 补充说明 dhclient命令使用动态主机配置协议动态的配置网络接口的网络参数。 语法 dhclient(选项)(参数)选项 0:指定dhcp客户端监听的端口号; -d:总是以前台方式运行程序&#x…

SpringBoot案例-文件上传

目录 简介 文件上传前端页面三要素 服务端接收文件 小结 本地储存 实现 代码优化 小结 阿里云OSS 阿里云 阿里云OSS 使用第三方服务--通用思路 准备工作 参照官方SDK代码,编写入门程序 集成使用 阿里云OSS-使用步骤 阿里云OSS使用步骤 参照SDK编写入…

深层次分析字符数组和字符串的区别是什么?

前言 (1)休闲时刻刷B站,看到一个卖课的,发视频问,char arr1[]{‘H’,‘E’,‘L’,‘L’,‘O’};和char arr2[]“HELLO”;区别是什么。 (2)看那个卖课博主一顿分析,最后成功得出&…

IT运维:使用数据分析平台监控DELL服务器

概述 在企业日常运维中,我们有着大量的服务器设备,设备故障一般可以通过常用的监控软件实现自动告警,但如果在管理运维中我们要做的不仅仅是发现故障,处理硬件故障,我们还需要进一步的了解,今年一共出现了多…

nodejs+vue+elementui农业产品信息网上商城管理系统_9927h

语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 前端nodejsvueelementui,系统使用权限分别包括管理员、种植户和用户,其中管理员拥有着最大的权限,同时管理员的…

MySQL数据库 索引、事务、储存引擎

索引 索引的概念 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找…

【智算中心】GPU是如何改变世界的

现在有市场消息表示,NVIDIA正计划减少A800 GPU的产量,以促进其更高端的H800 GPU 的销售。很显然NVIDIA是希望从H800 GPU上获得更多销售量,从中国市场获得更多利益。而且最近一段时间有传闻美国要彻底封杀AI芯片的出口,让国内甚至连…

【java】LinkedList 和 ArrayList的简介与对比

Java LinkedList和 ArrayList 在使用上,几乎是一样的。由于LinkedList是基于双向链表的,会多出list.getFirst();获取头部元素等方法 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按…

掌握指针和数组:经典笔试题攻略(万字详解)

🍁博客主页:江池俊的博客 💫收录专栏:C语言刷题专栏 💡代码仓库:江池俊的代码仓库 🎪我的社区:GeekHub 🎉欢迎大家点赞👍评论📝收藏⭐ 文章目录 前…

电脑显示“Operating System not found”该怎么办?

“Operating System not found”是一种常见的电脑错误提示,这类错误会导致你无法成功启动Windows。那么电脑显示“Operating System not found”该怎么办呢? 方法1. 检查硬盘 首先,您可以测试硬盘是否存在问题。为此,您可以采取以…