【bytetrack模型笔记】

介绍ByteTrack算法原理,解决目标检测中低置信度框问题,通过卡尔曼滤波预测和匈牙利算法匹配,实现多目标跟踪。

Byte算法是用来解决如何充分利用,由于遮挡导致置信度变低的得分框问题(在目标检测中得分低的框也留下来)

Byte中将得分框按照一定阈值划分为高分框和低分框,对于高分框来说按照正常方法送入跟踪器,并使用IOU计算代价矩阵,后利用匈牙利算法分配;对于低分框,利用未匹配上的框和低分的框进行iou匹配,然后同样利用匈牙利算法进行分配

对于视频或者图片流来说,未匹配上的框,大概率是这帧这个物体被遮挡或者走出画面了导致的

ByteTrack: Multi-Object Tracking by Associating Every Detection Box

卡尔曼滤波用于变化的动态系统中,由当前状态和观测值相融合估计下一状态,是数据融合过程,迭代过程。

tracking-by-detection是MOT中一个经典高效流派,通过相似度(位置、外观、运动信息)来关联检测框得到跟踪轨迹,目前大部分MOT方法会选择一个阈值,只保留高于这个阈值的检测结果来做关联到跟踪结果,低于阈值检测结果直接丢弃。

在low score detection boxes中计算和tracklets相似性来识别object和background,具体实现方法:

1.基于tracklets相似性(motion similarity)将高置信度detection boxes匹配到tracklets上,用kalman滤波器预测当前轨迹在下一帧的位置。motion similarity计算方式是通过计算kalman预测的boxes和low confidence boxes之间iou表示

2.在unmatched tracklets中进行二次匹配,通过预测和低置信度box之间的iou进行二次匹配

引用概念:trajectory轨迹:为MOT输出量,一个Trajectory对应一个目标在一段时间内的位置序列

tracklet轨迹片段:trajectory组成部分,完整的trajectory是由属于同一个目标的tracklets组成

mot问题中常常使用数据关联方法,利用detection关联成一个个tracklets,后将tracklets组合成完整trajectory

byte输入为一个视频序列V,对象检测器Det,检测分数阈值,输出视频轨迹为T,每个轨迹包含边界框和每帧中对象的标识。

对于视频中每一帧,使用Det预测检测框和分数,根据检测得分阈值,将所有检测分为高分和低分两部分,对于分数高于阈值,放于高分检测,对于分数低于阈值,放入低分检测。

采用卡尔曼滤波来预测T中每个轨迹当前帧中新位置,第一次关联是在高分检测框与所有tracks之间执行的,相似性可以通过在高分检测框与跟踪轨迹的预测框之间的iou和reid特征距离来计算。利用匈牙利算法来完成相似新的匹配,保留未匹配的检测结果Dremain,保留未匹配的轨迹Tremian

第二次关联在低分检测框和第一次关联后的余下轨迹Tremain之间执行,保留着未被匹配的轨迹和删除所有未被匹配的低分检测框,视为背景。发现在第二个关联中单独使用iou作为相似性很重要,低分数检测框通常包含严重遮挡和运动模糊。

最后,在第一次关联后,从未匹配的高分检测框中初始化新轨迹。每个帧的输出是当前帧中轨迹的边界框和标识,不会输出Tlost的框和标识

### ByteTrack 的安装 为了成功安装并使用 ByteTrack,需先准备合适的环境。通常建议创建一个新的 Python 虚拟环境来管理依赖项: ```bash conda create -n bytetrack python=3.8 conda activate bytetrack pip install --upgrade pip ``` 接着下载 ByteTrack 项目源码,并进入该项目目录执行安装命令: ```bash git clone https://github.com/ifzhang/ByteTrack.git cd ByteTrack pip install -r requirements.txt ``` 对于 CUDA 用户来说,还需要确保 PyTorch 和 torchvision 版本匹配当前系统的 CUDA 版本。 ### ByteTrack 使用教程 完成上述准备工作之后,在测试图像或视频上运行目标追踪变得非常简单。通过调整 `demo.py` 中的参数可以改变输入文件路径以及模型权重等设置[^2]: ```python python demo.py --path your_video_path.mp4 --save_result ``` 此命令将会读取指定路径下的视频文件进行实时多对象跟踪并将结果保存下来。 ### ByteTrack 工作原理 ByteTrack 提出了 BYTE 数据关联算法用于解决传统方法中存在的问题——即过早地抛弃分数较低但是可能代表真实物体的边界框。具体而言,BYTE 将所有预测出来的检测框分为两类:高质量(high-quality)和低质量(low-quality),其中只有前者会被立即用来建立新的轨迹;而后者则暂时存放在缓冲区里等待进一步验证。当某个时刻存在未被分配给任何已知轨迹的新高质检测框时,则尝试将其与历史记录中的低质候选者做对比分析,从而决定是否应该更新现有轨迹或是开启新一条独立轨迹。 这种方法不仅提高了对遮挡情况下的鲁棒性,同时也减少了误报率。 ### ByteTrack 代码实现片段 以下是简化版的核心逻辑伪代码展示如何区分高低品质检测框并实施数据关联过程的一部分: ```python def update(self, dets): """Update state vector with observed bbox.""" # 高分检测框集合初始化为空列表 matches, unmatched_tracks, unmatched_detections = [], list(range(len(self.tracks))), [] # 对于每一个传入的detection... for i in range(len(dets)): det = dets[i] if det.score >= self.high_thresh: matched, cost_matrix = linear_assignment.min_cost_matching( iou_distance, self.max_age, self.tracks, [det]) matches.extend(matched) unmatched_detections.append(i) # 处理剩余未配对的tracklets... ... # 探索低分区域寻找潜在的真实object... detections_low = [d for d in dets if d.score < self.high_thresh and d.score > self.low_thresh] ... return tracks ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值