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

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

在多目标跟踪任务中,如何将检测框与已有轨迹进行关联,进而维持目标的连续跟踪,是一个关键问题。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.kler.cn/news/342422.html

相关文章:

  • QFontComboBox Class
  • 初识Linux操作系统与Shell命令
  • ARM base instruction -- umull
  • [vscode]格式化C#代码
  • 鸿蒙开发(NEXT/API 12)【HTTP数据请求】网络篇
  • oracle set命令
  • 澳鹏干货 | 大语言模型的上下文窗口 (Context Windows)
  • 使用 Go 语言与 Redis 构建高效缓存与消息队列系统
  • 六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询
  • LangChain从模型中提取json输出
  • [含文档+PPT+源码等]精品基于Python实现的Django高校职业通的设计与实现
  • python sqlite3 工具函数
  • 【OpenCV】基础操作学习--实现原理理解
  • 论文阅读:OpenSTL: A Comprehensive Benchmark of Spatio-Temporal Predictive Learning
  • 如何提高LabVIEW编程效率
  • GitHub Copilot 使用手册(一)--配置
  • 雨晨 24H2 正式版 Windows 11 iot ltsc 2024 适度 26100.2033 VIP2IN1
  • Leetcode 135-分发糖果
  • 软件工程pipeline梳理
  • C++之LIST模拟实现(代码纯享版)