基于IOU匹配的DeepSort目标跟踪与匈牙利算法解析

devtools/2024/10/19 3:25:10/

在多目标跟踪任务中,如何将检测框与已有轨迹进行关联,进而维持目标的连续跟踪,是一个关键问题。DeepSort(Deep Simple Online and Realtime Tracking)是一种常用的多目标跟踪算法,它结合了IOU(交并比)与匈牙利算法进行目标检测与轨迹匹配,从而实现高效准确的目标跟踪。本文将详细解释基于IOU匹配的检测-轨迹关联原理,并介绍匈牙利算法在该过程中的应用。

一、IOU匹配原理

1. IOU简介

IOU,全称为 Intersection over Union,是评估两个边界框重叠度的度量标准。在目标跟踪中,检测到的边界框与已有轨迹的预测框之间,IOU是衡量它们是否属于同一目标的重要指标。

IOU的计算公式如下:

[ IOU = \frac{Area(Bbox_{det} \cap Bbox_{track})}{Area(Bbox_{det} \cup Bbox_{track})} ]

其中,( Bbox_{det} )是检测到的边界框,( Bbox_{track} )是预测的轨迹边界框,(\cap)表示两个框的交集,(\cup)表示它们的并集。IOU值越大,表示两个边界框的重叠度越高,可能来自同一目标。

2. 将`detections`与`tracks`进行IOU匹配

DeepSort中,追踪器会为每一帧的检测(`detections`)和已有的轨迹(`tracks`)构造一个IOU矩阵。矩阵中的每个元素代表某一检测与某一轨迹之间的IOU值。例如,如果有`m`个检测和`n`个轨迹,则会形成一个`m x n`的IOU矩阵。

根据IOU值大小,将`detections`和`tracks`进行匹配。一般来说,IOU值大于某个阈值的检测和轨迹被视为同一目标。DeepSort在IOU的基础上还结合了外观特征信息,通过计算检测框和轨迹框的相似度,进一步提高匹配精度。

对于每一个检测框 `detections` 和每一个预测轨迹框 `tracks`,计算它们的 IOU,得到一个 IOU 矩阵。假设有 N 个 detections 和 M 个 tracks,则得到一个 N×M 的矩阵。

        track_1    track_2   ...  track_M
det_1     0.85       0.2         0.3
det_2     0.3        0.6         0.1
...
det_N     0.1        0.4         0.9

这个矩阵表示每一个 detection 和 track 之间的匹配程度。通常,会设定一个 IOU 阈值(例如 0.5),只有 IOU 高于这个阈值的才会被认为是可能的匹配。

匹配过程分为以下三类结果:

Matched tracks:表示在当前帧中的 detections 和之前的 tracks 成功匹配了。即通过 IOU 匹配找到了可能是同一个目标的 detection 和 track。这些 tracks 将更新其状态(如位置、速度等),并继续跟踪。
Unmatched detections:表示当前帧中有新的 detections,但是无法匹配到任何已有的 tracks。这些可能是新出现的目标,需要为它们初始化新的 track。
Unmatched tracks:表示某些已有的 tracks 在当前帧中没有找到匹配的 detections,可能是因为目标消失、被遮挡、或检测器漏检了。这些轨迹通常会短暂保留,并等待后续帧中是否能继续匹配。如果在若干帧中仍无法匹配,track 会被删除。

通过这三类匹配结果,跟踪器可以更新已有的轨迹、初始化新的轨迹,或终止某些轨迹的跟踪。


二、匈牙利算法DeepSort中的应用

为了在匹配过程中找到最优的目标-轨迹关联方案,DeepSort采用了匈牙利算法(Hungarian Algorithm)。匈牙利算法通过解决一个最优化问题,确保在关联`detections`和`tracks`时,匹配的总成本最低(这里的成本可以是IOU值的负值,代表IOU越大,成本越小)。

1. 匈牙利算法的基本思想

匈牙利算法是一个经典的二分图匹配算法,常用于解决分配问题。假设我们有一组检测和轨迹的IOU矩阵,通过匈牙利算法,我们能够找到一种最优匹配,使得检测与轨迹的关联方案能带来整体IOU最大的匹配。

匈牙利算法的具体步骤如下:

1. 构造代价矩阵:将检测与轨迹之间的IOU矩阵视作一个代价矩阵,矩阵中的每个元素代表某一检测与某一轨迹的匹配成本(IOU值的负值)。
   
2. 减操作:对代价矩阵的每一行减去该行的最小值,接着对每一列进行同样的操作。这样可以确保代价矩阵中的最小值为0,并保留了原始矩阵中的相对关系。

3. 独立0的寻找:在调整后的代价矩阵中,寻找一组独立的0,即这些0不在同一行或同一列。独立0的数量等于所需的最优匹配数。

4. 矩阵调整:如果独立0的数量不够,算法将对矩阵进行调整,直到找到足够的独立0。具体的调整方法是:标记未被覆盖的最小元素,并将其加入到已有0的行或列中,直到找到完整的匹配。

5. 匹配结果:通过独立0的位置,可以确定检测与轨迹的匹配关系。

2. 在DeepSort中的应用

DeepSort中,匈牙利算法的输入是`detections`和`tracks`之间的IOU矩阵。算法根据IOU值找到代价最低的匹配方案,从而实现检测框与轨迹框的最优匹配。最终,DeepSort会结合匈牙利算法的输出,将匹配的`detections`更新到对应的轨迹上,保持目标的连续跟踪。


三、总结

DeepSort目标跟踪算法中,IOU匹配和匈牙利算法共同作用,实现了高效、准确的检测-轨迹关联。IOU作为评估检测框与轨迹框重叠度的重要指标,帮助筛选出潜在的匹配对,而匈牙利算法则通过求解最优化问题,确保匹配方案的最优性。结合这两种方法,DeepSort不仅能够准确跟踪已有目标,还能有效处理目标的新增和丢失,广泛应用于视频监控、自动驾驶等多目标跟踪场景。


http://www.ppmy.cn/devtools/125643.html

相关文章

【Kubernets】容器网络基础二:通讲CNI(Container Network Interface)容器网络接口实现方案

文章目录 背景知识Underlay网络Overlay网络一、基本概念二、工作原理三、实现方案四、应用场景 两者对比示意图 CNI实现有哪些?FlannelFlannel 的工作原理Flannel 的主要组件数据传输机制总结 Calico一、架构基础二、核心组件与功能三、路由与数据包转发四、安全策略…

【Linux 从基础到进阶】数据加密与安全传输

数据加密与安全传输 1. 引言 在当今数字化时代,数据已经成为最重要的资产之一,而数据泄露和攻击则可能对个人、企业甚至国家带来严重后果。为了保护敏感信息免受非法访问和窃取,数据加密与安全传输显得尤为重要。无论是存储在服务器上的数据…

分布式 ID

背景 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。随着数据日渐增长,对数据分库分表后也需要有一个唯一ID来标识一条数据或消息,数据库的自增 ID 显然不能满足需求;此时一个能够生成全局唯一 ID 的系统是非常必…

linux(ubuntu22.04) 设置网络通信相关-配置指令

一. 右上角菜单缺失网络设置的页面 sudo apt update sudo apt install network-managersudo systemctl restart NetworkManagersudo apt install gnome-control-center gnome-shell-extension-prefs二. 通过编辑文件手动设置Netplan sudo nano /etc/netplan/01-netcfg.yaml保…

redux

Redux是一个状态管理库,它通过Actions(操作)、Reducer(纯函数)和Store(单体数据容器)来组织应用的状态。Action是用于改变应用程序状态的对象,包含一个type(动作类型&…

ES 入门 -http-条件查询分页查询查询排序

第一种方法的url 地址: http://192.168.1.108:9200/shopping/_search?qcategory:小米 上述url地址的情况,对应的后面的参数信息包含中文,有些时候也会出现乱码导致无法查询到数据, 第二种方式进行body的row -json的传参方式. { "que…

ubuntu 内核更新

1. 在https://kernel.ubuntu.com/mainline/ 上下载目标内核的文件,安装之后,在/boot目录下拿到cfg文件 2.从The Linux Kernel Archives 上下载内核代码 3. 把cfg文件拷贝到内核代码的目录下 4.安装tool sudo apt install build-essential libncurses…

【Linux 从基础到进阶】Linux系统安全扫描与漏洞修复

Linux系统安全扫描与漏洞修复 1. 引言 随着企业信息化和云计算的发展,Linux系统被广泛应用于各种服务器和云平台中。然而,Linux系统作为一款开源操作系统,其安全问题也逐渐受到关注。面对日益严峻的网络攻击和漏洞威胁,管理员需要定期对系统进行安全扫描和漏洞修复,确保…