ByteTrack多目标跟踪(一)—理论基础

2024-09-05 18:28

本文主要是介绍ByteTrack多目标跟踪(一)—理论基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ByteTrack多目标跟踪

算法概述

github: https://github.com/ifzhang/ByteTrack

ByteTrack是一种基于Tracking-by-Detection范式的多目标跟踪算法。

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

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

整个算法的代码实现包括了两个最重要的类,来控制整个算法的流程。

STrack class

BYTETrack class

ByteTrack原理

ByteTrack解决了多目标跟踪中的一个重要问题,即低分检测框的处理

  • 传统的跟踪方法通常只关联高分检测框,而低分检测框通常被忽略,这会导致一些真实的目标被漏检或者
    跟踪轨迹被碎片化
  • ByteTrack通过关联几乎每个检测框,包括低分检测框,利用它们与轨迹片段的相似性来恢复真实目标并
    过滤掉背景检测,从而提高了检测器的性能。

在这里插入图片描述

对论文中的原理图进行说明:

  1. a:第一部分是使用目标检测器对不同帧中的人进行检测和识别,在不同的帧中会出现 由于互相的遮挡导致行人检测的置信度降低,若置信度小于0.5时则不会对其进行跟踪(跟踪的忽略)从而导致跟踪的失败。也就是图b出现的情况。
  2. 若在跟踪的过程中也考虑到目标检测时的低分框,则通过算法的改进之后则可以预测出 遮挡人物的位置信息,从而完成对目标的跟踪。
  3. 通过对低分框的处理提高了目标跟踪算法的性能指标。

在这里插入图片描述

根据论文中的实验:整个算法包括了两次数据关联,第一次的数据关联可以采用IOU关联或者采用Re-ID特征进行关联。第二次的数据关联(也就是对低分框进行数据的关联)根据实验的结果更推荐使用IOU的方式来进行关联。

关联方法

  1. 根据目标框的置信度把检测分为高置信度目标框和低置信度目标框。

  2. 第一次把高置信度目标框与之前的跟踪轨迹进行匹配

  3. 第二次使用低置信度目标框与第一次没有匹配上高置信度目标框的跟踪轨迹进行匹配

  4. 对于没有匹配上跟踪轨迹而置信度又足够高的目标框,为其新建一个跟踪轨迹。对于没有匹配上目标框的跟踪轨迹会保留30帧,可以再次进行匹配。

工作机理:

遮挡常导致检测得分由高到低缓慢变化,被遮挡物体在被遮挡之前是可视物体,检测分数较高,可以建立跟踪ID;当物体被遮挡时,通过检测框与轨迹的位置重合度把被遮挡的物体从低分框中挖掘出来,从而保持跟踪ID的连贯性。

ByteTrack论文解析

论文中提到了跟踪方法的思想:在跟踪方法中每一个检测框相当于是在计算机程序中的字节一样是一个核心的基本单位。

we present a simple and effective association method BYTE, named for each detection box is a basic unit of the tracklet, as byte in computer program

整个算法和DeepSort算法一样也是依据Tracking-by-Detection(基于检测的方法)的步骤来进行跟踪算法的实现的

在这里插入图片描述

  • 视频序列输入
  • 目标检测器
  • 特征提取
  • 数据关联
  • 轨迹管理

等一系列的步骤构成了Tracking-by-Detection算法的实现流程。

状态转移图

当一个track初始化的时候,当前的状态处于new状态,当该track没有任何的detection匹配成功之后转变为removed状态,匹配成功时则会位于tracked(匹配状态)。

依据连续帧的匹配状态在tracked(匹配状态)和Lost(失配状态)之间进行转换。

lost状态连续超过30次之后则会转变为Removed状态。

在这里插入图片描述

根据论文中的介绍,我们在考虑低得分框从而提升了整个跟踪算法性能的同时,这种考虑低得分框的方法其实也会出现一些问题。

例如在论文的图a中出现的置信度为0.1的得分框并不是真实的人物而是出现的 误判框将其参与到跟踪的算法中则会产生一些问题。(错误的跟踪)

论文中介绍了处理低得分检测框的一些方法:对于低得分的检测框使用轨迹相似度的方法来提供了一种强有力的与背景信息区分的方法。使得背景框被去除(没有匹配的轨迹)

高得分的检测框同样采用的时之前使用到的使用 运动特征和外观相似度的方法来进行匹配。

论文创新点

The innovation of BYTE lies in the junction area of detection and association, where low score detection boxes are bridges to boost both of them.

在检测和数据关联之间考虑到了junction area的问题。

ByteTrack算法流程

在这里插入图片描述

一阶段匹配

高分检测框的匹配

byteTrack算法在匹配的时候主要分为两步 第一:对高得分的检测框,通过卡尔曼滤波器更新对应的状态,同时使用匈牙利算法将其与跟踪器进行匹配。对于已经匹配到的跟踪器将该追踪器的状态设置为激活状态。

第二:对于没有匹配到的检测目标,为其设置新的追踪器(并将追踪器的状态设置为new状态)

第三:将剩余的没有匹配到的追踪器—定义为remain状态 与小于某一个阈值低分检测框,进行第二次的匹配的操作。

二阶段匹配

低分检测框的匹配

第一:将低分检测框,与还没有匹配的追踪器之间(Remain Track)之间采用相同的方式进行匹配操作。

第二:对于第二次中匹配的候选框,将其状态改为激活态(update)跟踪器变为激活态。

第三:第二次匹配中还是没有匹配成功的追踪器(Track)将其状态从(Remain Track)转变状态为(Re-remain状态)

第四:若追踪器保持(Re-remain状态)超过30帧之后,将其状态变为Lost状态,跟踪算法失去对该检测框的跟踪。

这篇关于ByteTrack多目标跟踪(一)—理论基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139725

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

c++基础版

c++基础版 Windows环境搭建第一个C++程序c++程序运行原理注释常亮字面常亮符号常亮 变量数据类型整型实型常量类型确定char类型字符串布尔类型 控制台输入随机数产生枚举定义数组数组便利 指针基础野指针空指针指针运算动态内存分配 结构体结构体默认值结构体数组结构体指针结构体指针数组函数无返回值函数和void类型地址传递函数传递数组 引用函数引用传参返回指针的正确写法函数返回数组

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是