目标跟踪 - 学习

10月27日

1.目标跟踪了解[1][2]

ByteTrack: Multi-Object Tracking by Associating Every Detection Box

ByteTrack:通过关联每个检测框实现多目标跟踪

沿着多目标跟踪(MOT)

中tracking-by-detection的范式,

我们提出了一种简单高效的数据关联方法BYTE。

利用检测框和跟踪轨迹之间的相似性,

在保留高分检测结果的同时,

从低分检测结果中去除背景,

挖掘出真正的物体

(遮挡、模糊等困难样本),

从而降低漏检并提高轨迹的连贯性。

BYTE能轻松应用到9种state-of-the-art的MOT方法中,

并取得1-10个点不等的IDF1指标的提升。

基于BYTE我们提出了一个跟踪方法ByteTrack,

首次以30 FPS的运行速度在MOT17上取得80.3 MOTA,77.3 IDF1和63.1 HOTA,

目前位居MOTChallenge榜单第一。

我们还在开源代码中加入了将BYTE应用到不同MOT方法中的教程以及ByteTrack的部署代码。

  1. Motivation

Tracking-by-detection是MOT中的一个经典高效的流派,

通过相似度(位置、外观、运动等信息)

来关联检测框得到跟踪轨迹。

由于视频中场景的复杂性,

检测器无法得到完美的检测结果。

为了处理true positive/false positive的trade-off,

目前大部分MOT方法会选择一个阈值,

只保留高于这个阈值的检测结果来做关联得到跟踪结果,

低于这个阈值的检测结果直接丢弃。

但是这样做合理吗?答案是否定的。

黑格尔说过:“存在即合理。”

低分检测框往往预示着物体的存在(例如遮挡严重的物体)。

简单地把这些物体丢弃会给MOT带来不可逆转的错误,

包括大量的漏检和轨迹中断,降低整体跟踪性能。

  1. BYTE

为了解决之前方法丢弃低分检测框的不合理性,

我们提出了一种简单、高效、通用的数据关联方法

BYTE (each detection box is a basic unit of the tracklet, as byte in computer program)。

直接地将低分框和高分框放在一起与轨迹关联显然是不可取的,

会带来很多的背景(false positive)。

BYTE将高分框和低分框分开处理,

利用

低分检测框和跟踪轨迹之间的相似性

从低分框中挖掘出真正的物体,

过滤掉背景。整个流程如下图所示:

(1)BYTE会将每个检测框根据得分分成两类,

高分框和低分框

总共进行

两次匹配

(2)第一次使用

高分框

和之前的跟踪轨迹进行

匹配。

(3)第二次使用

低分框

第一次

没有匹配上高分框的

跟踪轨迹

(例如在当前帧受到严重遮挡导致得分下降的物体)

进行匹配。

(4)对于没有匹配上跟踪轨迹,

得分又足够高的检测框,

我们对其新建一个跟踪轨迹。

对于没有匹配上检测框的跟踪轨迹,

我们会保留30帧,

在其再次出现时再进行匹配。

我们认为,

BYTE能work的原因

是遮挡往往伴随着检测得分由高到低的缓慢降低:

被遮挡物体在被遮挡之前是可视物体,

检测分数较高,建立轨迹;

当物体被遮挡时,

通过检测框与轨迹的位置重合度

就能把遮挡的物体从低分框中挖掘出来,

保持轨迹的连贯性。
在这里插入图片描述如图 t1 中所示,我们初始化三个不同的tracklet,

因为它们的分数高于0.5。

但在 t2 和 t3 中,分数从 0.8 下降到 0.4,然后再下降到 0.1。

这些检测框将通过阈值机制被消除,

红色轨迹随之消失,如图 b 所示。

但如果我们考虑所有的检测框,

将引入更多的假阳性,

例如图 a 中最右侧的框。

这带来了第二个问题:

假阳性边框的考虑:

在这里识别到与tracklets相似性

提供了在低分检测框中区分对象和背景的强关联。

例如,如图 c 所示,

通过运动预测的框(虚线)将两个低分检测框与tracklets匹配,从而正确恢复了对象。

由于背景框没有匹配的tracklet,因此将其移除。

因此,为了在匹配过程中使用高分到低分的检测框,

这种简单而有效的关联方法被称为BYTE,

因为每个检测框是tracklet的基本单元。

首先,它根据运动或外观相似性将高分检测框与tracklets匹配。

然后,它采用卡尔曼滤波器来预测tracklets在下一帧的位置。

然后,可以使用IoU或Re-ID特征距离计算预测框与检测框之间的相似性。

在第二个匹配步骤中,

使用相同的运动相似性匹配低分检测和未匹配的tracklets,即红框中的tracklets。

让我们尝试理解数据关联,这是MOT算法的核心。

  1. ByteTrack

ByteTrack

使用当前性能非常优秀的检测器YOLOX得到检测结果

数据关联的过程中,

SORT一样,

只使用卡尔曼滤波来预测当前帧的跟踪轨迹在下一帧的位置,

预测的框和实际的检测框之间的IoU作为两次匹配时的相似度,

通过匈牙利算法完成匹配。

这里值得注意的是我们没有使用ReID特征来计算外观相似度:

(1)第一点是为了尽可能做到简单高速,

第二点是我们发现在检测结果足够好的情况下,

卡尔曼滤波的预测准确性非常高,

能够代替ReID进行物体间的长时刻关联。

实验中也发现加入ReID对跟踪结果没有提升。

(2)如果需要引入ReID特征来计算外观相似度,

可以参考我们开源代码中将BYTE应用到JDE,

FairMOT等joint-detection-and-embedding方法中的教程。

(3)ByteTrack

只使用运动模型

没有使用外观相似度

能在MOT17,20取得高性能的本质原因

是MOT数据集的运动模式比较单一

2.SORT(Simple Online and Realtime Tracking)[3]

是一种基于

卡尔曼滤波器

匈牙利算法

的多目标跟踪算法,

主要用于跟踪视频或序列图像中的多个目标。

它的优点在于实时性和易于实现,

特别适合在计算资源有限的环境下进行多目标跟踪。

SORT的主要流程:

  1. 检测(Detection):首先,SORT依赖于一个外部目标检测模型(

例如YOLO、Faster R-CNN等)

来检测图像中的目标位置。

这些检测器会在每一帧中返回一个或多个目标的边界框。

  1. 预测(Prediction)

对于每个已经跟踪的目标,

SORT使用卡尔曼滤波器来

预测其在下一帧的位置

这一步是根据目标在先前帧中的

运动轨迹预测其当前帧的位置。

  1. 关联(Data Association)

通过匈牙利算法进行检测框与跟踪目标的匹配。

SORT采用IoU(交并比)作为距离度量,

将检测结果与已有轨迹进行关联,

使得检测框与相对应的跟踪轨迹对齐。

  1. 更新(Update)

根据卡尔曼滤波器更新跟踪目标的状态,

包括位置、速度等信息。

此步骤帮助跟踪器实时更新目标的最新状态。

  1. 管理轨迹(Track Management)

SORT对新出现的目标进行初始化,

并对长时间没有匹配到检测结果的轨迹进行删除,

以此来保持追踪目标的精简和高效。

SORT的优缺点:

  • 优点

    • 轻量且实时,适合在有限计算资源的情况下使用。
    • 仅需基本的线性预测,减少了复杂的模型训练过程。
    • 易于实现和理解,开源库可直接使用。
  • 缺点

    • 对快速运动和遮挡较为敏感,难以处理遮挡、重叠和复杂的运动行为。
    • 不适合长时间跟踪,因为模型缺少对目标外观特征的跟踪。

SORT的应用场景:

SORT广泛应用于各种视频分析任务,例如监控视频中的多目标跟踪、自动驾驶中的物体跟踪、体育视频分析等。

3.卡尔曼滤波器(Kalman Filter)[3]

是一种递归最小均方差估计算法

用于在噪声存在的情况下

估计动态系统的状态。

它在控制理论、信号处理和机器学习中有广泛应用,

特别适合处理线性系统的状态估计问题。

卡尔曼滤波器的基本原理

卡尔曼滤波器的目标是

估计一个动态系统的状态(例如位置和速度),

即使这些状态带有一定的噪声或不确定性。

卡尔曼滤波器假设系统遵循线性动态方程,

并且噪声是高斯分布的,

因此它能够在噪声影响下给出状态的最佳估计。

系统状态的估计过程分为两步:

预测(Prediction):利用系统的运动模型预测系统状态的下一个时刻值。

更新(Update):利用传感器的观测值对预测进行修正,从而得到更准确的估计。

在这里插入图片描述

4.匈牙利算法[3]

假设有 3 名工人(A、B、C)和 3 项任务(1、2、3)。

每个工人完成每项任务的成本不同,我们想要分配任务给工人,使得总成本最小

5.实践[6]

发现还是没有解决

bbox会出现不稳定的情况,时有时无,

可以参考这篇文章结合LSTM 减少这种chattering现象闪烁问题

参考论文

Convolutional_Neural_Network-Based_Robot_Control_for_an_Eye-in-Hand_Camera.pdf

Reference

[1] 杀疯啦!yolov11+bytetrack的目标跟踪实现
https://blog.csdn.net/m0_56175815/article/details/142671906

[2]ByteTrack: Multi-Object Tracking by Associating Every Detection Box
ByteTrack:通过关联每个检测框进行多对象跟踪
https://arxiv.org/abs/2110.06864

[3] SORT
https://chatgpt.com

[4] 用 YOLO v5+DeepSORT,打造实时多目标跟踪模型
https://cloud.tencent.com/developer/article/2249308

[5]目标追踪:使用ByteTrack进行目标检测和跟踪
https://mp.weixin.qq.com/s?__biz=MzU0NjgzMDIxMQ==&mid=2247621084&idx=4&sn=57a674e6e7948288f216efc6d8b1b226&chksm=fa3e0d451456ed418a2cc8f57e1685e7267e733e0ca8139ebdb99403416007498cf6b585bf30&scene=27

[6]ByteTrack 字节跟踪
https://github.com/ifzhang/ByteTrack

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值