图像多目标跟踪

news2025/2/13 15:39:26

目标跟踪(Object Tracking)是自动驾驶中常见的任务,根据跟踪目标数量的不同,目标跟踪可分为:

  • 单目标跟踪(Single Object Tracking,SOT)
  • 多目标跟踪(Multi-Objects Tracking,MOT)

目标跟踪所要做的是根据传感器量测序列确定真实目标的数量以及每个目标的对应状态(位置、速度、航向等)

多目标跟踪常用的两个算法为:卡尔曼滤波和匈牙利匹配两个算法

        匈牙利匹配算法用于匹配前后帧目标,因为目标检测器的不稳定(垃圾)往往容易丢失目标或目标框的位置偏移,影像匈牙利匹配的结果。

        卡尔曼滤波可以基于t时刻的历史状态信息(目标框的位置x,y,w,h)预计t+1时刻的状态信息,出现丢失目标的时候,比匹配丢失前一帧目标位置,目标的运动轨迹要平滑的多,也不会存在匹配不到目标的情况。

        也可以根据观测量(例如:位置、检测目标给的信息)和在历史观测信息上基于状态转换矩阵(例:变化速度)估计出来的预测量。观测量和预测量都是服从正态分布,利用高斯计算公式将他们叠加起来,计算一个比较好的结果。

 

卡尔曼滤波算法

        在多目标跟踪中,使用的是最基础的 Kalman filter 算法,卡尔曼的过程如下所示,主要是预测和更新的过程:

 预测过程方程:N(均值,方差)

        这个过程类似根据小车左侧位置,估计下一时刻的右侧的位置和方差,不过在目标跟踪中是预测的目标框的位置

 公式①预测t时刻的x,也就是高斯分布的均值变化

x:track在t−1时刻的均值(t时刻的目标检测框), F:状态转移矩阵(线性变化)

在上图中

cx,cy: 边界框的中心点

w, h: 边界框的宽和高

vx, vy, vw, vh: 变化速度

dt:前后帧之间的差cx'=cx+dtvx

公式②预测t时刻的P,高斯分布的方差(误差)变化,

        我们获取的观测值(目标检测框)和预测值(通过状态转移矩阵推测出来的),都会存在一定的误差。

        P:track在t−1时刻的协方差,Q:系统噪声矩阵

         Q:初始值比较小 F:初始为对角线为1的矩阵

        这个方差P(随机举例如下图)就是我们在估计中的不确定矩阵,而这个矩阵需要我们自己进行微调,越大的值代表误差越大,这个方差在迭代更新过程中会逐渐减小。

 

 更新过程

        基于 t 时刻的检测结果(测量值)和根据跟踪轨迹预测目标在 t 时刻的状态(预测值),得到一个在 t 时刻更精确的结果(状态),通过高斯公式计算类似于下图中绿色的部分。

 在目标跟踪过程中就是将两个框叠加在一起!!!!

更新公式如下所示:

 

        公式③中 z 为 detection 的均值向量,不包含速度变化值,即 z=[x, y, a, h]称为转移矩阵如下所示,它将 track 的均值向量 x’ 映射到检测空间,该公式计算 detection 和 track 的均值误差 y

        公式 ④中,R 为检测器的 噪声矩阵(随机举例如下图),它是一个 4x4 的对角矩阵,对角线上的值分别为中心点两个坐标以及宽高的噪声,以任意值初始化,一般设置宽高的噪声大于中心点的噪声。该公式先将协方差矩阵 P’ 映射到检测空间,然后再加上噪声矩阵 R。

         (上面的矩阵的值代表,对于cx和cy的误差没有那么大,而长和宽的预测的误差比较大)

        公式 ⑤中,计算 卡尔曼增益 K, 卡尔曼增益用于估计误差的重要程度;

        公式 ⑥ 和公式 ⑦中,计算更新后的均值向量 x 和协方差矩阵 P

 匈牙利匹配:

        在目标跟踪中,不同时刻的物体位置会发生变化,但我们需要让它保持同一个目标。

      建立一个二分图,有当前帧t=1 和前一帧t=0 的节点,通过计算优化两帧各个目标的互相的距,构建的混合线性整型,使用匈牙利或者求解器进行计算,得到两帧目标之间的匹配关系。

 

公式如下:

优化代价f可以是两个框体的欧式距离矩阵

 

          可以是两物体之间iou距离矩阵(在iou距离时,不是求最小而是求最大,可以使用1-iou转换为最最小值)

        也可以是两个框体中图像特征中的相似度距离矩阵

 有的算法中使用iou和特征相似度结合构建新的约束矩阵。

 

 这篇文章挺好可以看一下:

图说卡尔曼滤波,一份通俗易懂的教程 - 知乎 (zhihu.com)

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

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

相关文章

推特群推王构建你的流量池

随着社交媒体的兴起,推特已成为了一个信息传播、交流、互动的重要平台。在这个充满了各种声音和观点的数字世界里,如何有效地将自己的声音传达出去,吸引更多的关注和互动,已经成为了一个备受关注的话题。而在这个过程中&#xff0…

浏览器渲染进程的线程有哪些

浏览器的渲染进程的线程 GUI 渲染线程 GUI 渲染线程是在 GUI 应用程序中负责界面渲染的线程。负责渲染浏览器页面,解析 HTML、CSS,构建DOM 树、构建CSSOM树、构建渲染树和绘制页面;当界面需要重绘或由于某种操作引发回流时,该线程…

Scratch 之 如何矢量图中去除矢量刺

如果您曾经在“矢量编辑器”中使用过轮廓,那么您一定已经看到了这一点... 这被称为矢量刺,只有当你正在绘制的形状中有尖锐的点或角时才会发生这种情况,这真的很烦人😡 所以在这个视频中,我将向你展示如何摆脱这些令人…

Byzer-LLM环境安装

1.Byzer-LLM简介 Byzer-LLM 是基于 Byzer 的一个扩展,让用户可以端到端的完成业务数据获取,处理,finetune大模型,多场景部署大模型等全流程。 该扩展的目标也是为了让企业更好的将业务数据注入到私有大模型(开源或者商…

9.2.1Socket(UDP)

一.传输层: 1.UDP:无连接,不可靠,面向数据报,全双工. 2.TCP:有连接,可靠,面向字节流,全双工. 注意:这里的可不可靠是相对的,并且和安不安全无关. 二.UDP数据报套接字编程: 1.socket文件:表示网卡的这类文件. 2.DatagramPacket:表示一个UDP数据报. 三.代码实现: 1.回显服务…

渠道失灵?新零售迎来数据大屏新“大脑”

前言 **“新零售”**是以消费者需求为中心的数据驱动的泛零售形态,其核心是“人”、 “货”、“场”三者的重新定义与关系重构,而重构背后最根本的驱动因素是数据。新零售时代,数字技术不断进步、消费不断升级,零售业需要借助数据中台,发掘数…

CH348 USB转8串口芯片资料下载(合集)

1、产品手册 CH348DS1.PDF - 南京沁恒微电子股份有限公司CH348技术手册,USB转8串口芯片,支持最高6M波特率与硬件流控,支持USB配置功能,提供RS485方向控制与GPIO等信号引脚,可实现PC等平台扩展多串口或多个串口设备升级…

Tomcat的动静分离以及多实例部署

一、动静分离 Nginx实现负载均衡的原理: Nginx实现负载均衡是通过反向代理实现Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。 但不是把所有的web请求转发,而是将静态页面请求Ncinx服务器自己来处…

高压放大器怎么设计(高压放大器设计方案)

高压放大器是一种用于将低电压信号转换成高电压信号的电子设备,广泛应用于通信、雷达、医疗设备等领域。在设计高压放大器时,需要考虑多种因素,如输入输出信号的特性、电路结构的选择、电源和负载匹配等。本文将介绍高压放大器的设计方法和注…

1、Java简介+DOS命令+编译运行+一个简单的Java程序

Java类型: JavaSE 标准版:以前称为J2SE JavaEE 企业版:包括技术有:Servlet、Jsp,以前称为J2EE JavaME 微型版:以前称为J2ME Java应用: Android平台应用。 大数据平台开发:Hadoo…

关于电商API接口对接流程,简单讲解!

电商API接口对接流程一般包括以下几个步骤: 1. 确定需求:首先确定您的电商平台需要与哪些其他系统或服务进行对接,以及需要传递哪些数据。 2. 寻找合适的API:根据您的需求,在开放平台或者第三方API市场中选择适合的A…

滚珠螺杆在包装机械中的应用

近年来在传动元件领域出现了重大的技术突破,主要体现在采用了滚珠的滚动摩擦代替了传统的机械摩擦传动方式。传统的机械摩擦虽说结构简单,价格低廉,但摩擦系数很大,会造成传动阻力大和工作效率低等缺陷。 为了克服较大的运行阻碍力…

day5 STM32中断系统

中断的基本概念 在处理器中,中断是一个过程,即CPU正常执行程序的过程中,遇到外部或者内部的紧急时间需要处理,暂时终止当前程序的执行,转而去为处理紧急的时间,待处理完毕后再返回被打断的程序出继续往下执…

腾讯云服务器地域怎么选?可用区是什么?

腾讯云服务器地域有什么区别?怎么选择比较好?地域选择就近原则,距离地域越近网络延迟越低,速度越快。关于地域的选择还有很多因素,地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域价格因素…

日期切换

组件&#xff1a;<template><div class"time-picker"><el-radio-group size"small" v-model"timeType" change"changePickerType"><el-radio-button label"hour" v-if"isShow">时</el…

通过控制ros节点的启停,软实现人工控制和紧急停止功能的图示

通过控制ros节点的启停&#xff0c;软实现人工控制和紧急停止功能的图示 实现原理简介&#xff1a; 人工控制的节点&#xff1a; 键盘节点 方向盘节点 自动控制的节点&#xff1a; movebase 导航 autoware 等 底盘节点&#xff1a; 差速底盘 阿克曼底盘 控制节点&#xff1…

tomcat多实例与动静分离

多实例&#xff1a; 在一台服务器上配置多台tomcat服务 配置 tomcat 环境变量 修改 tomcat2 中的 server.xml 文件&#xff0c;要求各 tomcat 实例配置不能有重复的端口号 vim /usr/local/tomcat/tomcat2/conf/server.xml<Server port"8006" shutdown"SHUT…

过去为什么在编写程序时需要在语句前面加上行号?

在过去的编程语言中&#xff0c;如FORTRAN和早期的BASIC&#xff0c;每条语句都占据一行&#xff0c;因此需要在语句前面加上行号。然而&#xff0c;行号并不仅仅表示行的序号&#xff0c;它实际上是一种数字标记&#xff0c;类似于C语言中的标签&#xff08;label&#xff09;…

VMware Workstation下载不同的版本

1&#xff1a;访问下载链接 https://customerconnect.vmware.com/cn/downloads/#all_products 2&#xff1a;拉倒下面去选择对应的下载内容 3&#xff1a;先选择大版本 4&#xff1a;大版本选择之后&#xff0c;就可以选择对应的小版本 各位再根据自己的选择进行下载就好了

JavaSE 【类和对象】(3)(重点:内部类)

一、内部类 将一个类定义在另一个类或者一个方法的内部&#xff0c; 前者称为内部类&#xff0c;后者称为外部类 。内部类也是封装的一种体现 在外部类中&#xff0c;内部类定义位置与外部类成员所处的位置相同&#xff0c;因此称为成员内部类。 public class OutClass { c…