图像多目标跟踪

目标跟踪(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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

餐馆包厢隔断装修该怎么去设计

餐馆包厢隔断装修设计需要综合考虑以下几个方面: 1. 功能布局:根据包厢的面积和形状来确定餐桌、椅子、电视等家具的摆放方式,保证客人的用餐舒适度和便利性。 2. 音响设备:安装合适的音响设备,提供一定的音乐背景&…

SQL 相关子查询 和 不相关子查询、Exists 、Not Exists、 多表连接(包含自连接)

不相关子查询 子查询的查询条件不依赖于父查询,称不相关子查询。子查询可以单独运行的 select stu_id,sex,age from student t where sex(select sexfrom studentwhere stu_id10023 )相关子查询 关联子查询 子查询的查询条件依赖于父查询,称为 相关子…

【c语言】 -- 指针进阶

📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。 c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。 本章来学习指针进阶。 让我们开启c语言学习…

家电用PCM板:市场现状研究分析与发展前景预测

家电PCM板属于一种兴起不久的功能性复合材料。属于家电复合外观材料中占比较大的一种。家电复合外观材料主要分为覆膜板(VCM)系列和有机涂层板(PCM)系列两大类:VCM系列表面复合各类功能性薄膜,可根据需要实…

与传统IT开发相比,低代码开发具备哪些优势?

目录 一、低代码来源 二、低代码开发的特征 1、可视化建模 2、组件丰富 3、完整应用生命周期支持 4、私有化部署 三、对比传统系统开发,低代码开发具备哪些优势? 01.使需求方参与开发过程 02.助力开发人员节省更多时间 03.跨平台部署多端应用 04.助力企业…

c刷题(二)

目录 加减混合运算 计算n的k次方 计算非负整数各位之和 字符串逆序 双指针 递归 矩阵计算 矩阵转置 加减混合运算 题目:计算1 / 1 - 1 / 2 1 / 3 - 1 / 4 1 / 5 …… 1 / 99 - 1 / 100 的值,打印出结果。 一般情况我们可以写个循环然后在用条…

win10 安装ubuntu子系统并安装宝塔

1、安装子系统 2、ubuntu 中安装宝塔 这里需要注意的: 大部分文章上写的是“面板账户登录信息”不能直接访问,要改成127.0.0.1:8888去访问。 这种情况适合“面板账户登录信息”端口就是8888。 想我的就是32757 这时你就要用 http://127.0.0…

开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用

开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用 TextGen: Implementation of Text Generation models 1.介绍 TextGen实现了多种文本生成模型,包括&a…

Leetcode 977. 有序数组的平方

题目: Leetcode 977. 有序数组的平方 描述: 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序 思路: 双指针法 数组其实是有序的, 只不过负数平方之…

Unity使用C# Protobuf源码

目录 第一步:下载源码 第二步:运行C#构建文件 第三步:处理报错(如果你已安装对应的SDK则不会报错) 第四步:复制库文件到你的工程 第一步:下载源码 protobuf github源码https://github.com/p…

pom文件---maven

027-Maven 命令行-实验四-生成 Web 工程-执行生成_ev_哔哩哔哩_bilibili 27节.后续补充 一.maven下载安装及配置 1)maven下载 2) settings文件配置本地仓库 3)settings配置远程仓库地址 4)配置maven工程的基础JDK版本 5)确认JDK环境变量配置没问题,配置maven的环境变量 验证…

React Native连接Zebra斑马打印机通过发送CPCL指令打印(Android 和 iOS通用)

自 2015 年发布以来,React Native 已成为用于构建数千个移动应用程序的流行跨平台移动开发框架之一。通常,我们有开发人员询问如何将 Link-OS SDK 与 React Native 应用程序集成,以便在 Zebra 打印机上打印标签。在本教程中,我们将…

Linux基础与应用开发系列九:各类系统函数

open_close函数 OPEN函数 头文件&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 函数原型&#xff1a; 当文件存在时 int open(const char* pathname,int flags) 当文件不存在时 int open (const char* pathname,int f…

使用 React Native CLI 创建项目

React Native 安装的先决条件和设置 需要掌握的知识点 掌握 JavaScript 基础知识掌握 React 相关基础知识掌握 TypeScript 相关基础知识 安装软件前需要首先安装Chocolatey。Chocolatey 是一种流行的 Windows 包管理器。 安装 nodejs 和 JDK choco install -y nodejs-lts …

【Docker】Docker中network的概要、常用命令、网络模式以及底层ip和容器映射变化的详细讲解

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

Centos7.9编写分布式集群大数据系统_自启动脚本---Linux工作笔记058

由于为了方便,系统在启动的时候,设置成系统所有的,集群软件都自动启动,这样,可以减少,运维成本,要不然,这么多,工具,有的还不知道放到什么位置了,一个个去启动,非常麻烦. 首先编辑: 编辑这个文件: 然后编辑这个文件,写上自己,自启动脚本的位置,然后保存 :wq 然后再给这个文件…

VSCode-Python传参数进行Debug

新建demo.py import argparse def parse_args():description "debug example" parser argparse.ArgumentParser(descriptiondescription) help "The path of address"parser.add_argument(--host,help help) parser.add_ar…

火车头采集伪原创插件【php源码】

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python代码大全和用法&#xff0c;python代码大全简单&#xff0c;现在让我们一起来看看吧&#xff01; 火车头采集ai伪原创插件截图&#xff1a; 1、题目&#xff1a;列表转换为字典。 程序源代码&#xff1a; 1 #!/us…

灵眸:2023年上半年中国主要消费领域宏观数据概览报告(附下载)

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 2023年上半年中国社会消费品零售总额22.8万化元。2023年上半年中国电商实体商品消费总额达6.1万亿元&#xff0c;同比增长10.8%。2023年上半年中国餐饮、汽车消费均超2万化元&#xff0c;餐饮、金银珠…

C#,数值计算——用于从连续的数据值流估计任意分位数的计算方法与源程序

1 分位数Quantile 分位数&#xff08;Quantile&#xff09;&#xff0c;亦称分位点&#xff0c;是指将一个随机变量的概率分布范围分为几个等份的数值点&#xff0c;常用的有中位数&#xff08;即二分位数&#xff09;、四分位数、百分位数等。 2 常见各类分位数 2.1 二分位…