ByteTracker行人跟踪核心代码解读

byteTracker中因为目标检测和行人跟踪是解耦的,因此这里主要分析的是byteTracker中的代码。

也即是分析当给定一帧图片frame_id,给定这帧中的box列表,行人跟踪类是怎么跟踪每条轨迹的。

也就是https://github.com/ifzhang/ByteTrack中位于目录tutorials/trades/byte_tracker中的代码。

首先这个代码中最重要的两个类,一个是轨迹类STrack,一个是跟踪类BYTETracker类
前者是每条轨迹,后者管理目前视频流中的所有轨迹,并在新的一帧到来之后通过调用类方法update更新当前视频流中的轨迹状态(可能有新的轨迹,可能有旧的轨迹失去跟踪目标框,可能有目标框匹配成功,可能有之前丢失目标框的轨迹重新匹配成功)。

之所以写这个代码解读,是因为每次重新捡起来阅读的时候都被各种参数搞得晕头转向,很容易混淆不同参数的含义。索性写个详细的笔记记录一下。

一、轨迹类STrack

这里面保存的都是轨迹自身的状态。跟踪类BYTETracker类通过调用轨迹的属性和方法来进行轨迹状态的管理。

1 属性集合

属性名称 类型 含义
self._tlwh 列表 保存目标框属性
self.is_activated bool 该轨迹是否是激活状态(也就是保持追踪中),如果是视频流的第一帧,那么第一次update的时候,该属性就是True,如果不是第一帧,那么需要第二次匹配成功的时候才会设置为True(考虑一下误识别的情况,这就可以理解了,只有当连续两帧都匹配成功,才认为这个轨迹可靠)。
self.kalman_filter 类实例 在第一次调用activate()函数时,设置卡尔曼滤波器
self.mean, self.covariance ndarray 保存卡尔曼滤波对于这个轨迹的mean和convariance.其中len(mean)=8(x,y,a,h,va,vy,va,vh),v表示速度,covariance为[8,8]。在第一次调用activate()函数时进行初始化,初始化根据目标框的坐标进行估计
self.tlbr ndarray 如果self.is_activated=True,那么就是根据卡尔曼滤波预测的左上角和右下角坐标,如果self.is_activated=False,那么就是当前检测框观测值的左上角和右下角坐标
self.tlwh ndarray 如果self.is_activated=True,那么就是根据卡尔曼滤波预测的左上角和宽高,如果self.is_activated=False,那么就是当前检测框观测值的左上角和宽高
self.score float 轨迹分数,采用当前帧的目标框分数作为轨迹分数
self.tracklet_len int 轨迹追踪的帧数,初始为0,后面每追踪成功(调用update方法),则+1
self.state TrackState TrackState.New,Tracked,Lost
ByteTrack是一种基于目标检测的追踪算法。其源代码位于https://github.com/ifzhang/ByteTrack的tutorials/trades/byte_tracker目录中。ByteTrack的主要创新点在于使用了低分框进行二次匹配,以解决目标遮挡导致的id切换问题。与其他非ReID算法不同,ByteTrack仅使用目标检测得到的边界框进行追踪,而不使用外观相似度计算。算法使用了卡尔曼滤波预测边界框,并使用匈牙利算法进行目标和轨迹的匹配。以下是ByteTrack算法的步骤分析: 1. 目标检测:使用目标检测模型检测输入图像中的目标物体。检测结果为边界框和对应的置信度得分。 2. 卡尔曼滤波:对于每个检测到的边界框,使用卡尔曼滤波器对其进行预测,得到目标的预测位置。 3. 目标匹配:使用匈牙利算法将当前帧的目标与上一帧的目标进行匹配,以确定目标的id。 4. 低分框二次匹配:对于低置信度的边界框,进行二次匹配,以解决遮挡问题。通过对低置信度框的再匹配,可以避免因遮挡而导致目标id的切换。 5. 更新追踪结果:根据匹配结果更新目标的位置和id。 6. 重复步骤2-5,直到所有帧都被处理完毕。 ByteTrack算法的优点在于不需要进行ReID特征计算和训练,仅利用目标检测的结果进行追踪,并通过对低置信度框的二次匹配来解决遮挡问题。同时,使用卡尔曼滤波进行预测和匈牙利算法进行匹配,可以准确地跟踪目标物体。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ByteTracker行人跟踪核心代码解读](https://blog.csdn.net/wentinghappyday/article/details/128376299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [实时目标追踪:ByteTrack算法步骤详解和代码逐行解析](https://blog.csdn.net/weixin_43731103/article/details/123665507)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值