当前位置: 首页 > news >正文

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

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

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.lryc.cn/news/376469.html

相关文章:

  • kali系统几个开机启动项的区别
  • 【自撰写】【国际象棋入门】第5课 常见开局战术组合(一)
  • 高考志愿填报选专业,女孩就业率最好的专业有哪些?
  • yolov5模型训练早停模型变大
  • next是什么???
  • K8s的资源对象
  • OpenStack快速入门
  • STM32CubeIDE对STM32F072进行ADC配置及使用
  • Leetcode Hot 100 刷题记录 - Day 1
  • k8s学习--Kruise Rollouts 基本使用
  • PHP框架详解 - CakePHP框架
  • el-cascader 支持多层级,多选(可自定义限制数量),保留最后一级
  • leetcode498 对角线遍历
  • 北京活动会议通常会邀约哪些媒体参会报道?
  • 随心笔记,第六更
  • zustand 状态管理库的使用 结合TS
  • Maven 的生命周期详解
  • 【稳定检索/投稿优惠】2024年生物技术与食品科学国际会议(ICBFS 2024)
  • iOS Category
  • 5.Sentinel入门与使用
  • 上位机图像处理和嵌入式模块部署(h750 mcu和图像处理)
  • 信创服务器操作系统的适配迁移分析
  • 在Ubuntu 20.04上安装和配置MySQL 8:详细指南和远程访问设置
  • Vue43-单文件组件
  • 如何快速使用向量检索服务DashVector?
  • Linux 用户和用户组 创建用户 创建组
  • Character Animator 2024 mac/win版:赋予角色生命,动画更传神
  • 短剧app广告变现模式开发
  • 如何选择适合的编程语言入门?
  • Spring Boot入门教程