当前位置: 首页 > news >正文

目标跟踪算法:ByteTrack、卡尔曼滤波、匈牙利算法、高置信度检测目标、低置信度检测目标

目录

 1  ByteTrack特点        

2 ByteTrack和SORT区别----个人通俗理解

3 ByteTrack算法原理

4 ByteTrack整体流程图


    上一篇博客我复习了下SORT跟踪算法,这一篇博客我再复习下ByteTrack跟踪算法,ByteTrack里面也是用了卡尔曼滤波和匈牙利算法,关于卡尔曼滤波和匈牙利算法可以看我的上一篇博客:目标跟踪算法:SORT、卡尔曼滤波、匈牙利算法-CSDN博客

 1  ByteTrack特点        

    多目标追踪算法一般在完成当前帧的目标检测后只会保留置信度比较大的检测框用于进行目标跟踪,而在ByteTrack中,作者保留了所有的检测框并且通过阈值将它们分成了高置信度检测框和低置信度检测框。ByteTrack 可以有效解决一些遮挡,且能够保持较低的 ID Switch。因为目标会因为被遮挡检测置信度有所降低,当重新出现时,置信度会有所升高。算法特点在于:

  • 当目标逐渐被遮挡时,跟踪目标与低置信度检测目标匹配。
  • 当目标遮挡逐渐重现时,跟踪目标与高置信度检测目标匹配。

2 ByteTrack和SORT区别----个人通俗理解

        那其实bytetrack和sort相比,bytetrack也是用到了卡尔曼滤波和匈牙利算法,不同的就是bytetrack他利用了检测得到的高得分框和低得分框,然后他的匹配逻辑更复杂一点,而sort只用了最高得分的检测框去和历史轨迹做匹配,他的匹配逻辑简单点,但是不管是bytetrack还是sort他们都是用了匈牙利算法做匹配,只不过匹配的逻辑不太一样,并且他们两者都是用了卡尔曼滤波做预测以及更新最优值。

        为什么ByteTrack对于遮挡目标效果更好:如果目标被遮挡那么得分会低,对于sort算法,由于只保留大于阈值的检测框,所以可能根本就没有这个检测框了,因为可能这个检测框得分就小于阈值,而对于bytetrack他会要求检测算法保留所有的检测框,这样bytetrack会利用低得分的去和预测框进行匹配,所以这样bytetrack就能解决一些遮挡问题,所以要优于sort算法。

3 ByteTrack算法原理

追踪算法的详细步骤:

  1. 在开始追踪之前给每一目标创建追踪轨迹;
  2. 通过卡尔曼滤波预测每一个追踪轨迹的下一帧边界框;
  3. 通过检测器获得目标的检测框,根据置信度将检测框分为高分框和低分框;
  4. 首先针对高分框,计算高分框和预测框的IOU ,使用匈牙利算法匹配IOU,获得3个结果:已匹配的轨迹与高分框,未成功匹配的轨迹,未成功匹配的高分框。匹配成功后,通过卡尔曼滤波算法利用高分检测框和预测框计算得到最优框,然后将追踪轨迹中的框更新为计算得到的最优框;
  5. 然后针对低分框,计算低分框和上一步未匹配上的预测框的IOU,使用匈牙利算法匹配IOU,获得3个结果:已匹配的轨迹与低分框,未成功匹配的轨迹,未成功匹配的低分框。匹配成功后将通过卡尔曼滤波算法利用低分检测框和预测框计算得到最优框,然后将追踪轨迹中的框更新为计算得到的最优框; 
  6. 最后针对未匹配上的高分检测框,将其和状态未激活的轨迹匹配,获得3个结果:匹配、未匹配轨迹、未匹配检测框。对于匹配更新状态,对于未匹配轨迹标记为删除,对于未匹配检测框,置信度大于高阈值+0.1新建一个跟踪轨迹,小于则丢弃。

4 ByteTrack整体流程图

整体的流程图如下

参考文献:

目标追踪 ByteTrack 算法详细流程分析 - 金色旭光 - 博客园

ByteTrack流程剖析(C++版本)_bytetrack c++-CSDN博客 

 实时目标追踪:ByteTrack算法步骤详解和代码逐行解析_bytetrack 源码分析-CSDN博客

ultralytics框架实现ByteTrack目标追踪算法_51CTO博客_目标检测追踪

【目标跟踪】ByteTrack详解与代码细节-CSDN博客 

 【目标跟踪】ByteTrack详解与代码细节_目标跟踪_神仙罗辑-开放原子开发者工作坊

http://www.lryc.cn/news/500537.html

相关文章:

  • [定昌linux系统]如何安装jdk8
  • 【Cadence32】PCB多层板电源、地平面层创建心得➕CM约束管理器Analyze分析显示设置➕“DP”报错DRC
  • 基于SpringBoot+Vue的新闻管理系统
  • 图的割点、割边(Tarjan算法)
  • 算法学习(十四)—— 二叉树的深度搜索(DFS)
  • 【vue2】封装自定义的日历组件(三)之基础添加月份的加减定位到最新月份的第一天
  • LabVIEW偏心圆筒流变仪测控系统
  • Runloop
  • SpringBoot的Bean类三种注入方式(附带LomBok注入)
  • 开源向量数据库介绍说明
  • 【前端】深度解析 JavaScript 中的 new 关键字与构造函数
  • 2024年华中杯数学建模C题基于光纤传感器的平面曲线重建算法建模解题全过程文档及程序
  • 使用 `typing_extensions.TypeAlias` 简化类型定义:初学者指南
  • 如何快速批量把 PDF 转为 JPG 或其它常见图像格式?
  • 如何在组织中塑造和强化绩效文化?
  • OllyDbg、CE简单介绍
  • Python函数——函数的返回值定义语法
  • 【Pandas】pandas isna
  • mysql 数据库表的大小
  • (6)JS-Clipper2之ClipperOffset
  • 如何在Ubuntu中利用repo和git地址下载获取imx6ull的BSP
  • Ruby On Rails 笔记5——常用验证下
  • JS听到了因果的回响
  • 【高中生讲机器学习】28. 集成学习之 Bagging 随机森林!
  • 硬件设计 | Altium Designer软件PCB规则设置
  • 【Elasticsearch】实现用户行为分析
  • python字符串处理基础操作总结
  • 电子商务人工智能指南 6/6 - 人工智能生成的产品图像
  • 【论文阅读】相似误差订正方法在风电短期风速预报中的应用研究
  • 贪心算法 - 学习笔记 【C++】