多目标跟踪中检测器和跟踪器如何协同工作的

多目标跟踪中检测器和跟踪器如何协同工作的

flyfish

主要是两者 接口间的交互

假设

原始图像尺寸:1920(宽)x 1080(高)
模型输入尺寸:640(宽)x 640(高)

检测器处理流程

  1. 读取原始图像
    检测器首先读取一张原始图像,大小是1920x1080。

  2. 预处理
    检测器将原始图像调整大小,使其适合模型的输入尺寸640x640。
    为了保持图像的比例不变,检测器会根据原始图像的宽高比进行缩放。比如,缩放后的图像可能是640x360。如果图像在某个维度没有达到640,检测器会用灰色或其他颜色填充剩余部分,形成640x640的输入图像。
    预处理还包括归一化操作,将图像像素值从0-255缩放到0-1之间,并减去均值、除以标准差等操作。

  3. 模型推理
    将预处理后的图像输入到检测模型中,模型会输出检测结果,这些结果包括每个检测到的目标的边界框(bbox)和置信度分数。

  4. 后处理
    检测器将模型输出的边界框还原到原始图像的尺寸。比如,如果一个目标在640x640的图像中占据了某个位置,检测器会将这个位置转换回1920x1080的尺寸。
    后处理还包括过滤掉置信度较低的检测结果,确保只保留较为准确的检测结果。

检测器输出

  • dets:包含检测到的目标的边界框和置信度分数。

  • img_info:包含原始图像的信息,比如高度、宽度和缩放比例。

跟踪器处理流程

  1. 初始化跟踪器
    在整个视频或序列的处理过程中,只需要初始化一次跟踪器。初始化包括设置以下内容
  • track_thresh:跟踪的阈值。
  • track_buffer:跟踪缓冲区大小。
  • match_thresh:匹配阈值。
  1. 更新跟踪器
    每处理一帧图像时,跟踪器都会接收检测器的输出结果detsimg_info
    检测器的输出结果包括边界框(目标在图像中的位置)和置信度分数。

跟踪器输出

返回的是多目标跟踪表示 online_targets:包含当前帧中所有跟踪目标的信息,包括:

  • 边界框 :目标的当前位置。
  • 置信度 :目标的置信度分数。
  • 身份标识 :目标的唯一标识符。
  • 跟踪状态 :目标是否被激活、丢失或移除。
  • 类别标签 :目标的类别标签。

因为返回的是 单目标跟踪表示的list,所以该对象存储了有关单个轨迹的所有信息,并基于卡尔曼滤波执行状态更新和预测。

还会包括其他信息,根据需要再定是否使用
kalman_filter :用于此特定目标跟踪的卡尔曼滤波器实例。
mean :状态估计的均值向量。
covariance : 状态估计的协方差矩阵。
tracklet_len :轨迹的长度。
frame_id : 当前帧ID。
start_frame :对象首次检测到的帧。
多个单目标跟踪表示,就是多目标跟踪表示。

图像缩放

上面的检测器处理流程 预处理其中一部分是letterbox

使用letterbox处理一张原始图像时,目标是将图像缩放到指定的模型输入大小(640x640)并保持原始图像的宽高比,同时在图像的两侧或上下方添加填充(padding)以达到目标尺寸。

给定原始图像的尺寸为1920x1080(宽度*高度),我们需要将其缩放并添加填充以适应640x640的输入尺寸。

  1. 计算缩放比例 :需要将原始图像的尺寸调整到适合640x640的输入尺寸,保持宽高比。
    宽高比为1920 / 1080 ≈ 1.78。
    输入尺寸640x640的宽高比为1。

由于1920x1080的宽高比大于1,而640x640的宽高比为1,我们需要考虑缩放的限制。

  1. 计算缩放后的尺寸
    由于输入尺寸为640x640,我们可以将宽度缩放到640,这样高度就需要按照相同比例进行缩放:
    缩放比例 = 640 / 1920 ≈ 0.333。
    缩放后的高度 = 1080 * 0.333 ≈ 360。
    因此,缩放后的图像尺寸为640x360。

  2. 添加填充(padding)
    缩放后的图像尺寸为640x360,目标尺寸为640x640。
    需要在图像的顶部和底部添加填充来达到目标尺寸:
    填充的总高度 = 640 - 360 = 280。
    由于填充需要对称地添加在图像的顶部和底部,每边添加的填充为280 / 2 = 140。

因此,原始图像1920x1080经过letterbox处理后,最终的图像尺寸为640x640,其中有效内容为640x360,顶部和底部各有140像素的填充。

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

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

相关文章

中国各区域人口密度可视化图

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247674303&idx1&sn830304f80a0429406c4a5e38dc7750ec&chksmfa777682cd00ff9434e4660bb52ab2bf19913b6732083de061664401a9ac0fa46581cd9e5e86&token1445576002&langzh_CN&scene21#we…

如何在Python中使用Pip换源

在Python开发中,我们经常需要使用pip来安装各种第三方库。然而,默认的pip源(Python Package Index,简称PyPI)位于国外,有时会遇到网络不稳定或速度较慢的问题。为了解决这些问题,我们可以使用国…

为什么网络安全缺口很大,而招聘却很少?

2020年我国网络空间安全人才数量缺口超过了140万,就业人数却只有10多万,缺口高达了93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢&#xff1…

PHP 文件上传:全面指南与最佳实践

PHP 文件上传是指使用 PHP 脚本处理用户通过 HTML 表单上传到服务器的文件。这个过程涉及前端 HTML 表单的设计、后端 PHP 脚本的编写以及服务器端的配置和安全措施。文件上传功能广泛应用于各种网站和应用程序,如图片上传、文档共享、媒体管理等。实现这一功能不仅…

软件测试-unittest框架

unittest框架 文章大致内容 unittest框架的组成断言跳过(某些用列由于某些原因不想执行)参数化测试报告 UnitTest框架 什么是Unittest框架? 概念:unittest是python自带的一个单元测试框架,用他来做单元测试 unitte…

嵌入式学习记录6.17(qss练习)

一思维导图 二.练习 widget.h #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);this->setAttribute(Qt:…

五种HTTP数据传输方式

在前端开发过程中,后端主要提供 http 接口来传输数据,而这种数据传输方式主要有五种: url paramqueryform-urlencodedform-datajson 下面就让我们一起来了解一下在Nest.js中如何使用这五种HTTP数据传输方式: 一,创建项目 使用nest new 创建一个nest的项目 nest new 项目名称 …

Three.js框架的技术难点

Three.js作为一款功能强大的3D JavaScript框架,在为开发者提供丰富的功能和灵活性的同时,也带来了一些技术难点,需要开发者具备一定的知识和经验才能克服。以下是一些Three.js框架的技术难点。北京木奇移动技术有限公司,专业的软件…

微信小程序地图功能详解

引言 随着移动互联网的快速发展,地图服务已经成为我们日常生活中不可或缺的一部分。无论是查找目的地、规划路线还是探索周边环境,地图都能提供极大的便利。微信小程序作为一款轻量级的应用,也提供了丰富的地图功能,为用户提供了…

【解决】法启动此程序,因为计算机中丢失vcruntime140_1.dll,尝试重新安装此程序以解决此问题【包括安装mysql在内的】

缺少vcruntime140_1.dll解决此问题的第一步找到该文件,有些dll修复工具是收费的,因此下面介绍几种比较简单有效而且免费的解决办法 方法1:重新安装Visual C Redistributable Packages 上面的安装包解决win7,8,10,11的…

STM32HAL库--NVIC和EXTI

1. 外部中断实验 1.1 NVIC和EXTI简介 1.1.1 NVIC简介 NVIC 即嵌套向量中断控制器,全称 Nested vectored interrupt controller。是ARM Cortex-M处理器中用于管理中断的重要组件。负责处理中断请求,分配优先级,并协调中断的触发和响应。 它是…

【日记】被客户一顿输出该怎么办(431 字)

正文 上午有个客户在电话里对着我一顿输出,说他们没有发票财务账务没法处理怎么怎么的。话里话外满满一股 “全是你们的错” 的味道。 当时我很想笑,大姐,你对我输出有啥用啊。票是上级行开的,我们又没有开票权限,对…

让AI代替我写代码???——Codeium安装及使用

序 不知不觉又到了期末大作业的时间了,面对老师布置的超繁琐代码项目,竟一时有些发怵,不知道从何下手才好…… 但是,懒惰如张同学的我怎么能拘泥于老老实实完成这些毫无技术可言的作业呢? 于是乎,我便寻…

工程咨询单位乙级资信预评价条件一览

工程咨询单位乙级资信预评价条件一览: 一、基本要求 独立法人资格:申请单位必须具备独立的法人资格。 二、专业技术力量 咨询工程师数量:单位内咨询工程师(投资或相应专业领域)应不少于4人。专业人员配置&#xff…

【SQL server速成之路】函数

(3)LEFT函数 LEFT ( character_expression , integer_expression ) 功能:返回从字符串character_expression左边开始,由integer_expression指定个数的字符。参数character_expression:为字符型表达式,integ…

c#音乐播放器续(联网下载)

0.前言 书接上文,我们已经实现了一个能够播放本地音乐的音乐播放器,能够播放众多音乐格式,包括.ogg,接下来,我们将为我们的音乐播放器添加一个令人激动的新功能——联网音乐下载和播放!这个功能将使我们能…

浅谈Java23种设计模式之创建型设计模式的几种使用场景

前言: 都知道Java有23种设计模式,但实际开发中相信很多同学基本很少能利用上这些设计模式. 下面我将结合实际开发应用场景来进行简单解读一下这些设计模式在实际开发中是怎么使用的. 1.单例模式(Singleton) 确保一个类只有一个实例,并提供一…

C++中的享元模式

目录 享元模式(Flyweight Pattern) 实际应用 文字编辑器中的字符 修仙游戏中的地图瓦片 图形编辑器中的图形对象 总结 享元模式(Flyweight Pattern) 享元模式是一种结构型设计模式,用于减少对象的内存使用和提高…

Ubuntu 22.04 解决 firefox 中文界面乱码

问题复现 在为Ubuntu 22.04 Server安装完整的GNOME 42.01桌面后,将桌面语言设置为中文时,打开Firefox可能会出现中文乱码的问题。经过网上调查发现,这个问题是由Snap软件包引起的。 解决方案 为了避免在Ubuntu 22.04中文模式下的乱码问题…

Java解析Json格式数据

首先通过一定的方法得到String类型的Json数据。 然后利用fastjson中的JSON的parseObject()将String解析为JSONObject 然后通过get方法得到某个键对应的值&#xff1a; private String getOpenid(String code) {Map<String, String> map new HashMap<>();map.put(&…