本文主要是介绍多目标跟踪中检测器和跟踪器如何协同工作的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
多目标跟踪中检测器和跟踪器如何协同工作的
flyfish
主要是两者 接口间的交互
假设
原始图像尺寸:1920(宽)x 1080(高)
模型输入尺寸:640(宽)x 640(高)
检测器处理流程
-
读取原始图像 :
检测器首先读取一张原始图像,大小是1920x1080。 -
预处理 :
检测器将原始图像调整大小,使其适合模型的输入尺寸640x640。
为了保持图像的比例不变,检测器会根据原始图像的宽高比进行缩放。比如,缩放后的图像可能是640x360。如果图像在某个维度没有达到640,检测器会用灰色或其他颜色填充剩余部分,形成640x640的输入图像。
预处理还包括归一化操作,将图像像素值从0-255缩放到0-1之间,并减去均值、除以标准差等操作。 -
模型推理 :
将预处理后的图像输入到检测模型中,模型会输出检测结果,这些结果包括每个检测到的目标的边界框(bbox)和置信度分数。 -
后处理 :
检测器将模型输出的边界框还原到原始图像的尺寸。比如,如果一个目标在640x640的图像中占据了某个位置,检测器会将这个位置转换回1920x1080的尺寸。
后处理还包括过滤掉置信度较低的检测结果,确保只保留较为准确的检测结果。
检测器输出
-
dets
:包含检测到的目标的边界框和置信度分数。 -
img_info
:包含原始图像的信息,比如高度、宽度和缩放比例。
跟踪器处理流程
- 初始化跟踪器 :
在整个视频或序列的处理过程中,只需要初始化一次跟踪器。初始化包括设置以下内容
track_thresh
:跟踪的阈值。track_buffer
:跟踪缓冲区大小。match_thresh
:匹配阈值。
- 更新跟踪器 :
每处理一帧图像时,跟踪器都会接收检测器的输出结果dets
和img_info
。
检测器的输出结果包括边界框(目标在图像中的位置)和置信度分数。
跟踪器输出
返回的是多目标跟踪表示 online_targets
:包含当前帧中所有跟踪目标的信息,包括:
- 边界框 :目标的当前位置。
- 置信度 :目标的置信度分数。
- 身份标识 :目标的唯一标识符。
- 跟踪状态 :目标是否被激活、丢失或移除。
- 类别标签 :目标的类别标签。
因为返回的是 单目标跟踪表示的list,所以该对象存储了有关单个轨迹的所有信息,并基于卡尔曼滤波执行状态更新和预测。
还会包括其他信息,根据需要再定是否使用
kalman_filter :用于此特定目标跟踪的卡尔曼滤波器实例。
mean :状态估计的均值向量。
covariance : 状态估计的协方差矩阵。
tracklet_len :轨迹的长度。
frame_id : 当前帧ID。
start_frame :对象首次检测到的帧。
多个单目标跟踪表示,就是多目标跟踪表示。
图像缩放
上面的检测器处理流程 预处理其中一部分是letterbox
使用letterbox处理一张原始图像时,目标是将图像缩放到指定的模型输入大小(640x640)并保持原始图像的宽高比,同时在图像的两侧或上下方添加填充(padding)以达到目标尺寸。
给定原始图像的尺寸为1920x1080(宽度*高度),我们需要将其缩放并添加填充以适应640x640的输入尺寸。
- 计算缩放比例 :需要将原始图像的尺寸调整到适合640x640的输入尺寸,保持宽高比。
宽高比为1920 / 1080 ≈ 1.78。
输入尺寸640x640的宽高比为1。
由于1920x1080的宽高比大于1,而640x640的宽高比为1,我们需要考虑缩放的限制。
-
计算缩放后的尺寸 :
由于输入尺寸为640x640,我们可以将宽度缩放到640,这样高度就需要按照相同比例进行缩放:
缩放比例 = 640 / 1920 ≈ 0.333。
缩放后的高度 = 1080 * 0.333 ≈ 360。
因此,缩放后的图像尺寸为640x360。 -
添加填充(padding) :
缩放后的图像尺寸为640x360,目标尺寸为640x640。
需要在图像的顶部和底部添加填充来达到目标尺寸:
填充的总高度 = 640 - 360 = 280。
由于填充需要对称地添加在图像的顶部和底部,每边添加的填充为280 / 2 = 140。
因此,原始图像1920x1080经过letterbox处理后,最终的图像尺寸为640x640,其中有效内容为640x360,顶部和底部各有140像素的填充。
这篇关于多目标跟踪中检测器和跟踪器如何协同工作的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!