ByteTracker跟踪代码和原理详解,一看就懂!

整体步骤

  1. 初始化ByteTrack跟踪器

    • 初始化frame_id =0、max_time_lost =30
  2. 获取视觉检测结果,使用std::vector<Object> objects

代表
在这里插入图片描述

  1. 对检测结果进行推理

    • 参数与设置

      • 跟踪器记录帧数,帧数:第X帧图片,X为帧数

      • 默认参数设置:跟踪阈值:0.5;高阈值:0.6;匹配阈值:0.8

    • 对于初始帧的推理跟踪(第一帧检测到目标)

      1. 对每个检测结果计算对应的一个跟踪状态STrack ,该跟踪状态包含label、rect框、置信度

      2. 跟踪结果滤波:将检测结果中置信度小于跟踪阈值的,舍弃;置信度大于跟踪阈值的,保留,记录在detections

      3. detections 中置信度大于高阈值的检测目标作为跟踪目标,进行激活

        1. 按照detections 中检测目标的数量,进行track_id 的赋值。例如,detections 中有3个目标,则track_id 分别赋值1,2,3

        2. uuid 进行赋值,uuid 为随机生成的数字,也是跟踪目标的身份信息

        3. 当前目标的跟踪状态设置为**Tracked**** 状态**

        4. 该目标的状态设置为**activateed**** 状态**

        5. 计算该跟踪目标在卡尔曼滤波中的均值和协方差

      4. 将所有的跟踪目标直接进行发布

      5. PS:如果出现一直没有输出的情况,绝大部分都是因为检测的置信度小于高阈值,在如下部分修改
        在这里插入图片描述

    • 之后检测到目标(第二帧极其以后检测到目标)

      1. 跟踪结果滤波:将检测结果中置信度小于跟踪阈值的,添加到低置信度detections_low ;置信度大于跟踪阈值的,添加到高置信度目标detections

      2. 对上一时刻跟踪目标进行卡尔曼预测,获得当前时刻跟踪目标位置的预测值,之后一系列的操作都使用的是跟踪目标的预测值信息

      3. 计算跟踪目标track与检测目标detection之间的IOU代价矩阵,代价矩阵中的每个元素为[1 - IOU(track, detection)],如下所示,IOU越大,代价元素越小
        在这里插入图片描述

      4. 应用lapjv算法实现跟踪目标与检测目标的最佳匹配,获得三个矩阵:匹配成功的矩阵matchs,未匹配成功的跟踪目标u_track,未匹配成功的检测目标u_detection

        1. 匹配阈值设置为0.8
      5. 对匹配成功的目标

        1. 如果之前一直跟踪的话,进行跟踪目标更新

          1. 跟踪目标的跟踪长度+1

          2. 更新卡尔曼的参数、目标状态改为activated

          3. 与上述跟踪目标激活操作基本一致,只是跟踪目标的跟踪长度+1

        2. 如果之前跟踪出现丢失的话,进行跟踪目标的重新激活

          1. 与上述操作基本一样,只不过跟踪目标的跟踪长度重置
      6. 对未匹配成功的跟踪目标u_track而言,需要将它与低置信度目标**detections_low**** **重新进行关联(关联操作与第3、4步相同),此时的匹配参数设置为0.5

        1. 如果匹配成功,对跟踪目标进行更新

        2. 对于未匹配成功的跟踪目标,保留该跟踪目标,但是将目标的跟踪状态设置为**Lost**** 状态**

      7. 对未匹配成功的检测目标u_detection(高置信度检测目标),激活该检测目标对应的跟踪目标

      8. 当未匹配成功的跟踪目标有**30帧没有匹配成功(max_lost_time)**的话,则删除该跟踪目标

总结:

步骤总结

  1. 准备条件:取某一时刻的跟踪目标,则跟踪目标中分为两种状态:TrackedLost 状态。检测结果根据置信度的高低,分为高置信度和低置信度目标。

  2. 第一次关联:将高置信度检测目标与跟踪目标进行匹配

    • 如果匹配成功,则依据匹配成功的检测目标对跟踪目标进行状态更新

      • 目标跟踪状态为Tracked 时,进行目标数据更新

      • 目标跟踪状态为Lost 时,进行目标的重新激活

    • 对未匹配的高置信度检测目标,生成新的跟踪目标,进行跟踪目标激活

    • 对未匹配的跟踪目标进行第二次关联

  3. 第二次关联:将未匹配成功的跟踪目标与低置信度检测目标进行匹配

    • 如果匹配成功,则依据匹配成功的检测目标对跟踪目标进行状态更新

      • 目标跟踪状态为Tracked 时,进行目标数据更新

      • 目标跟踪状态为Lost 时,进行目标的重新激活

    • 对未匹配的低置信度检测目标,舍弃

    • 对未匹配的跟踪目标进行保留,最多保留30帧,即30帧内一直没有匹配,则删除该跟踪目标

PS:

代码中目标状态始终为activated ,不存在由非激活到激活状态的切换

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值