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的部署代码。
- Motivation
Tracking-by-detection是MOT中的一个经典高效的流派,
通过相似度(位置、外观、运动等信息)
来关联检测框得到跟踪轨迹。
由于视频中场景的复杂性,
检测器无法得到完美的检测结果。
为了处理true positive/false positive的trade-off,
目前大部分MOT方法会选择一个阈值,
只保留高于这个阈值的检测结果来做关联得到跟踪结果,
低于这个阈值的检测结果直接丢弃。
但是这样做合理吗?答案是否定的。
黑格尔说过:“存在即合理。”
低分检测框往往预示着物体的存在(例如遮挡严重的物体)。
简单地把这些物体丢弃会给MOT带来不可逆转的错误,
包括大量的漏检和轨迹中断,降低整体跟踪性能。
- 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算法的核心。
- 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的主要流程:
- 检测(Detection):首先,SORT依赖于一个外部目标检测模型(
例如YOLO、Faster R-CNN等)
来检测图像中的目标位置。
这些检测器会在每一帧中返回一个或多个目标的边界框。
- 预测(Prediction):
对于每个已经跟踪的目标,
SORT使用卡尔曼滤波器来
预测其在下一帧的位置。
这一步是根据目标在先前帧中的
运动轨迹预测其当前帧的位置。
- 关联(Data Association):
通过匈牙利算法进行检测框与跟踪目标的匹配。
SORT采用IoU(交并比)作为距离度量,
将检测结果与已有轨迹进行关联,
使得检测框与相对应的跟踪轨迹对齐。
- 更新(Update):
根据卡尔曼滤波器更新跟踪目标的状态,
包括位置、速度等信息。
此步骤帮助跟踪器实时更新目标的最新状态。
- 管理轨迹(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