ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ByteTrack 集成指南:在 TraDeS 追踪框架中替换关联器(Tracker)与 TraDeS_BYTE 两阶段追踪方案

ByteTrack 集成指南:在 TraDeS 追踪框架中替换关联器(Tracker)与 TraDeS_BYTE 两阶段追踪方案 计算机视觉深度学习人工智能【免费下载链接】ByteTrack[ECCV 2022] ByteTrack: Multi-Object Tracking by Associating Every Detection Box项目地址https://gitcode.com/GitHub_Trending/by/ByteTrack点击查看免费下载本篇技术指南以本仓库 tutorials/trades/README.md 为核心完整讲解如何把 ByteTrack 的多目标追踪关联器集成进 TraDeS 代码库包括直接替换 tracker.py 与 opts.py的原始方案以及用 byte_tracker.py mot_online 模块替换的 TraDeS_BYTE 方案并给出可直接复制的 MOT17 推理命令与关键阈值参数详解。读完本文你将掌握两类追踪器motion reid 与 motion Kalman Filter的关联策略差异以及如何结合 byte_tracker.py、tracker.py、opts.py 源码定位和调优每一个追踪参数。集成背景为什么要在 TraDeS 中替换追踪器TraDeSTrack to Detect and Segment是一个基于 CenterTrack 思想、通过成本量cost volume传播目标嵌入embedding来辅助检测的在线多目标追踪框架其默认追踪器 tracker.py 采用运动 重识别特征motion reid联合关联策略。而 ByteTrack本仓库核心项目的核心思想是关联每一个检测框——不仅关联高置信度检测框还利用低置信度检测框通常是遮挡目标进行二次关联从而显著降低漏检导致的轨迹断裂。因此把 ByteTrack 的关联器嵌入 TraDeS可以让 TraDeS 的检测结果直接受益于 ByteTrack 的两阶段关联策略这是本教程要解决的核心问题。原文档将集成分为两条路线TraDeS原始方案替换tracker.py与opts.py仍使用 TraDeS 自己的 motion reid 追踪器TraDeS_BYTEByteTrack 方案用本仓库的byte_tracker.py替换tracker.py并新增mot_online模块包含basetrack.py、kalman_filter.py、matching.py采用运动 卡尔曼滤波的纯几何关联。两条路线共用同一套 MOT17 半数据集half推理命令框架区别仅在于参数取值与关联机制下面逐一展开。Step 1获取 TraDeS 代码库两条路线都以 TraDeS 官方仓库为基础。第一步均为克隆 TraDeS 代码原文档指向JialianW/TraDeS仓库git clone https://github.com/JialianW/TraDeS.git克隆完成后后续所有替换与新增文件操作都在该仓库的src/lib/utils目录下进行。本文以下命令均假定已在 TraDeS 仓库根目录下执行且模型权重../models/mot_half.pth已按 TraDeS 的说明放置就绪。方案一TraDeS 原始追踪器motion reidStep 2替换 tracker.py 与 opts.py将 TraDeS 仓库src/lib/utils/tracker.py替换为本仓库提供的 tutorials/trades/tracker.py与 TraDeS 默认 tracker 行为等价同时将src/lib/opts.py替换为本仓库的 tutorials/trades/opts.py。opts.py是 CenterTrack/TraDeS 风格的参数解析器负责把命令行参数整理成opt对象替换它的目的是让追踪相关参数track_thresh、new_thresh、pre_thresh等与 byte_tracker 兼容的默认值和解析逻辑保持一致。需要特别注意的是 opts.py 中的解析逻辑当task包含tracking时opt.tracking被置为True同时opt.pre_img默认为开启除非指定--no_pre_img并对 MOT 类数据集自动设置overlap_thresh 0.05。这意味着追踪阈值tracking threshold会参与后续关联距离的判定而非仅由检测分数决定。Step 3运行原始 TraDeS 推理在 TraDeS 仓库根目录执行python3 test.py tracking --exp_id mot17_half --dataset mot --dataset_version 17halfval --pre_hm --ltrb_amodal --inference --load_model ../models/mot_half.pth --gpus 0 --clip_len 3 --trades --track_thresh 0.4 --new_thresh 0.4 --out_thresh 0.2 --pre_thresh 0.5各参数含义如下括号内为 opts.py 中定义的默认值命令中均为显式覆盖参数命令取值默认值作用tracking位置参数—声明任务为多目标追踪触发opt.tracking True--exp_idmot17_halfdefault实验标识决定输出目录exp/task/exp_id--dataset/--dataset_versionmot/17halfvalcoco/ 空使用 MOT 数据集及 half-val 版本--pre_hm开启—使用前一帧热图pre heatmap作为追踪线索--ltrb_amodal开启—使用 ltrb_amodal 输出头4 通道见 opts.py 的heads注册--inference开启—推理模式--load_model../models/mot_half.pth空加载训练好的半数据集模型权重--gpus00使用的 GPU 编号--clip_len31TraDeS 使用的帧数含当前帧成本量聚合的时序窗口长度--trades开启—启用 TraDeS 模型结构见 opts.py--track_thresh0.40.3第一轮关联的高分检测置信度阈值--new_thresh0.40.0新建轨迹的检测置信度阈值仅高于该分数的检测可开新轨迹--out_thresh0.2-1参与关联的最低检测置信度下限--pre_thresh0.5-1前一帧检测结果的置信度阈值在原始 TraDeS 追踪器中tracker.py 的step()首先只保留score track_thresh的检测进入第一轮关联第一轮用检测中心 运动偏移量与已有轨迹的距离叠加 IoU、类别等 invalid 惩罚见 tracker.py做贪心匹配第二轮tracker.py再把score track_thresh的低分检测与仍未匹配上的轨迹进行二次关联。这正是关联每一个检测框思想在 TraDeS 代码库中的体现——即便使用原始 tracker两轮关联的骨架也已具备区别在于关联度量依赖 reid embedding 与运动偏移而非纯几何。方案二TraDeS_BYTEByteTrack 关联器Step 2替换为 byte_tracker.py 并新增 mot_online 模块在方案一的基础上TraDeS_BYTE 进一步把追踪器本体替换为 ByteTrack 的实现用本仓库的 tutorials/trades/byte_tracker.py 替换 TraDeS 仓库src/lib/utils/tracker.py用 tutorials/trades/opts.py 替换src/lib/opts.py将 tutorials/trades/mot_online 整个目录basetrack.py、kalman_filter.py、matching.py复制到 TraDeS 仓库src/lib/utils下作为mot_online包。mot_online是 ByteTrack 追踪器的运行时依赖basetrack.py定义TrackStateNew / Tracked / Lost / Removed与BaseTrack基类提供track_id全局自增、mark_lost()、mark_removed()等状态管理接口kalman_filter.py8 维状态空间x, y, a, h, vx, vy, va, vh的常速度卡尔曼滤波器提供initiate / predict / multi_predict / update / gating_distance其中multi_predict是向量化批量预测版本用于step()中对整池轨迹一次性前向预测matching.py提供iou_distanceIoU 代价矩阵cost 1 - IoU、linear_assignment基于lap.lapjv的匈牙利匹配支持cost_limit门限与fuse_motion运动 外观融合本方案中未启用。Step 3运行 TraDeS_BYTE 推理python3 test.py tracking --exp_id mot17_half --dataset mot --dataset_version 17halfval --pre_hm --ltrb_amodal --inference --load_model ../models/mot_half.pth --gpus 0 --clip_len 3 --trades --track_thresh 0.4 --new_thresh 0.5 --out_thresh 0.1 --pre_thresh 0.5与方案一的命令相比阈值配置发生了变化--new_thresh从0.4提升到0.5--out_thresh从0.2降低到0.1。这两个值直接决定 byte_tracker.py 中两阶段关联的检测划分track_thresh 0.4score 0.4的检测进入第一轮关联高置信度检测out_thresh 0.1out_thresh score track_thresh即0.1 ~ 0.4区间的检测进入第二轮关联低置信度检测用于找回遮挡目标new_thresh 0.5新建轨迹的门槛只有第一轮关联结束后仍未匹配、且score 0.5的检测才有资格激活新轨迹见 byte_tracker.py。注意当task含tracking时opts.py 会把tracking任务强制opt.pre_img True除非--no_pre_img因此 TraDeS_BYTE 同样会利用前一帧热图ByteTrack 只替换关联器部分检测头与热图传播仍由 TraDeS 负责。源码解析byte_tracker.py 的两阶段关联流程byte_tracker.py 是本方案的核心其BYTETracker.step()第 179 行起按以下五步执行检测分层按track_thresh与out_thresh把检测分为高分池dets进入detections与低分池dets_second进入detections_second见 byte_tracker.py第一轮关联Kalman IoU把 tracked 与 lost 轨迹合并为strack_pool调用STrack.multi_predict用卡尔曼滤波批量预测当前位置然后matching.iou_distance计算代价矩阵、linear_assignment阈值为0.9求解匹配见 byte_tracker.py。代码中fuse_motion一行被注释掉说明本方案刻意只使用纯几何关联不混入外观特征第二轮关联低分检测纯 IoU对第一轮未匹配的 tracked 轨迹r_tracked_stracks与低分检测detections_second再次做 IoU 匹配门限放宽到0.4从而把被遮挡、低置信度的目标续上轨迹见 byte_tracker.py未确认轨迹处理对只出现一帧的unconfirmed轨迹与剩余高分检测做阈值为0.7的 IoU 匹配仍未匹配的未确认轨迹直接mark_removed()见 byte_tracker.py状态更新与轨迹维护超过max_time_lost由track_buffer换算而来的 lost 轨迹被移除最终输出所有已激活轨迹含tracking_id、bbox、ct、score等字段见 byte_tracker.py。其中STrack是轨迹的最小单元它把检测框从tlbr转成tlwh存储通过tlwh_to_xyah转成卡尔曼滤波所需的(center x, center y, aspect ratio, height)表示activate / re_activate / update分别对应开新轨迹、重新找回与逐帧更新byte_tracker.py。remove_duplicate_stracksbyte_tracker.py还会按轨迹存活时长清理 IoU 小于0.15的重复轨迹对避免同一目标产生双 ID。值得留意的是BYTETracker.__init__中buffer_size int(frame_rate / 30.0 * args.track_buffer)byte_tracker.py即轨迹丢失后的保留帧数会按帧率自适应缩放而init_track/reset中的id_count等字段在注释中明确标注对最终输出无影响仅为兼容原代码库接口byte_tracker.py——这意味着byte_tracker.py被设计成可直接嵌入 TraDeS 的test.py调用流程而不需要改动检测结果的输出格式。核心对比motion reid 与 motion Kalman Filter原文档 Notes 部分给出了一行高度凝练的结论这正是理解两种方案差异的关键tracker.py: motion reid byte_tracker.py: motion with kalman filter对照两份源码可以进一步展开原始 TraDeS 追踪器motion reidtracker.py 的关联度量同时使用检测中心 运动偏移ct tracking与轨迹中心的欧氏距离并叠加 IoU、类别一致性惩罚匹配阶段使用greedy_assignment默认或linear_assignment--hungarian时并维护 128 维的embedding_bank做 reid 特征相似度查询get_similarity见 tracker.py与滑动平均更新alpha 0.1。代价是依赖训练好的 embedding 输出头且存在 reid 特征退化风险。TraDeS_BYTEmotion with Kalman filterbyte_tracker.py 完全不使用 embedding轨迹的运动由 8 维常速度卡尔曼滤波mot_online/kalman_filter.py预测匹配只依赖 IoU第一轮0.9、第二轮0.4。由于 TraDeS 的检测头本身已具备运动偏移能力替换关联器后整条链路不增加 reid 分支的参数量与计算开销。简言之原始方案用外观 运动做关联鲁棒但依赖重识别特征质量TraDeS_BYTE 用纯运动 几何做两阶段关联结构更轻、部署更简单代价是完全放弃外观信息极端外观剧变场景下的 ID 保持能力取决于卡尔曼预测与 IoU 的重叠质量。参数调优要点与使用前提两阶段阈值关系务必保持track_thresh out_thresh否则低分池为空、二次关联失效。原方案取值0.4 / 0.2与 BYTE 方案0.4 / 0.1均可直接复现new_thresh建议不低于track_thresh避免第一轮已匹配的检测又被重复开新轨迹。--clip_len 3与--trades二者必须同时出现。--clip_len决定成本量聚合的时序窗口--trades才在 opts.py 中决定不注册tracking输出头TraDeS 结构下检测头的运动偏移由成本量隐式承担。--pre_thresh 0.5控制前一帧检测结果进入热图传播的门槛值过高会丢失历史线索、过低会引入噪声一般保持0.5附近。依赖环境byte_tracker.py的matching.py依赖lap、cython_bbox、scipymot_online/kalman_filter.py依赖scipy.linalg原始 tracker 依赖scikit-learn的linear_assignment_。运行前请确认 TraDeS 环境已安装这些包。适用范围本文命令面向 MOT17 half-val17halfval评测模型为mot_half.pth。若改用 MOT20 或全量 MOT17需同步调整数据集版本参数与对应权重阈值也建议重新扫描。小结在 TraDeS 中集成 ByteTrack 本质上是换关联器而非换模型检测、热图传播、成本量等 TraDeS 组件原样保留仅把关联策略从 motion reid 换成 ByteTrack 的 motion Kalman Filter 两阶段关联。对照本仓库的 byte_tracker.py 与 tracker.py 源码你可以清晰看到两种策略在代价矩阵构造、匹配门限与轨迹生命周期管理上的全部差异并据此针对自己的场景如遮挡密集的 MOT20、低帧率视频重新调整track_thresh / out_thresh / new_thresh / track_buffer四元组。更多 ByteTrack 本体用法可参考本仓库 tools/track.py 与 yolox/tracker/byte_tracker.py 的对应实现。赞分享计算机视觉深度学习人工智能【免费下载链接】ByteTrack[ECCV 2022] ByteTrack: Multi-Object Tracking by Associating Every Detection Box项目地址https://gitcode.com/GitHub_Trending/by/ByteTrack点击查看免费下载相关推荐Ultralytics ByteTrack 跟踪器源码级解析STrack 单目标轨迹与 BYTETracker 两阶段关联机制Ultralytics ByteTrack 跟踪器源码级解析STrack 单目标轨迹与 BYTETracker 两阶段关联机制 ByteTrack 是 Ult人工智能深度学习计算机视觉预训练Falcon分布式追踪集成监控与追踪联动分析在大规模分布式系统中传统监控往往局限于孤立指标告警难以定位跨服务问题根因。Falcon main.go https://link.gitcode.com运维观测指标监控告警kinit追踪系统分布式追踪集成方案kinit追踪系统分布式追踪集成方案 痛点微服务架构下的监控盲区 在现代化微服务架构中系统复杂度呈指数级增长。传统的单体应用监控方式已无法满足分布式系统的后端前端任务调度认证鉴权移动开发上一篇NumJs安装与配置指南下一篇开源项目 free-font 使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表