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

news2024/10/11 5:05:19

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux搭建Hadoop集群(详细步骤)

前言 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 说白了就是实现一个任务可以在多个电脑上计算的过程。 一:准备工具 1.1 VMware 1.2L…

利用内部知识库优化SOP与HR培训效果评估

在当今快速变化的商业环境中,企业运营的高效性和员工的综合能力成为决定竞争力的关键因素。SOP作为确保业务一致性和质量的基础,其有效执行至关重要。同时,HR培训作为提升员工技能和知识的重要手段,其效果直接影响到企业的整体绩效…

【顶刊核心变量】中国地级市绿色金融试点改革试验区名单数据(2010-2023年)

一、测算方式: 参考《中国工业经济》崔惠玉(2023)老师的研究,2017 年,国务院决定将浙江、广东、江西、贵州和新疆的部分地区作为绿色金融改革创新试验 区的首批试点地区。试点地区在顶层设计、组织体系、产品创新、配…

Docker容器简介及部署方法

1.1 Docker简介 Docker之父Solomon Hykes:Docker就好比传统的货运集装箱 2008 年LXC(LinuX Contiainer)发布,但是没有行业标准,兼容性非常差 docker2013年首次发布,由Docker, Inc开发 1.1.1什么是Docker Docker是管理容器的引…

java脚手架系列4--测试用例、拦截器

异常处理、拦截器、数据库连接 1 测试用例 单元测试是一个老生常谈的问题,无论是后端对自己的代码质量把的第一道关也好,也是对测试减缓压力。这里就不过多讲述测试用例的重要性,但是有2个框架我们必须了解一下。 1.1 JUnit和mockito 我们…

【gRPC】4—gRPC与Netty

gRPC与Netty ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 📖RPC专栏:https://…

TadTR(TIP 2022)视频动作检测方法详解

前言 论文:End-to-end Temporal Action Detection with Transformer 代码:TadTR 从论文题目可以看出 TadTR 是基于 Transformer 的端到端的方法,TAD 在视频动作分类任务上更进一步,不仅对动作分类,还要检测动作发生的…

力扣21~30题

21题(简单): 分析: 按要求照做就好了,这种链表基本操作适合用c写,python用起来真的很奇怪 python代码: # Definition for singly-linked list. # class ListNode: # def __init__(self, v…

每日一题:单例模式

每日一题:单例模式 ❝ 单例模式是确保一个类只有一个实例,并提供一个全局访问点 1.饿汉式(静态常量) 特点:在类加载时就创建了实例。优点:简单易懂,线程安全。缺点:无论是否使用&…

uni-app如何搭建项目(一步一步教程)

来来来,看这里 uni-app新建项目教程uni-app项目结构 首先我们要有一个HBuilder这个软件,然后我们来搭建uni-app项目 uni-app新建项目教程 首先我们打开这个HBuilder软件,好我们就出现这个界面,我们点击新建项目   然后我们选择…

Github优质项目推荐 - 第六期

文章目录 Github优质项目推荐 - 第六期一、【WiFiAnalyzer】,3.4k stars - WiFi 网络分析工具二、【penpot】,33k stars - UI 设计与原型制作平台三、【Inpaint-Anything】,6.4k stars - 修复图像、视频和3D 场景中的任何内容四、【Malware-P…

小猿口算APP脚本(协议版)

小猿口算是一款专注于数学学习的教育应用,主要面向小学阶段的学生。它提供多种数学练习和测试,包括口算、速算、应用题等。通过智能化的题目生成和实时批改功能,帮助学生提高数学计算能力。此外,它还提供详细的学习报告和分析,帮助家长和教师了解学生的学习进度和薄弱环节…

批量处理vue2中文硬编码转i18n国际化(保姆级)

文章目录 背景技术选型使用软件与插件插件使用补充 背景 公司的项目需要适应国际化的需求,但是因为代码是一个成品的项目,也就导致,代码量巨大,连带着需要转国际化的硬编码中文也很多,如果一点点纯手工改动&#xff0…

RelationGraph实现工单进度图——js技能提升

直接上图: 从上图中可以看到整个工单的进度是从【开始】指向【PCB判责】【完善客诉】【PCBA列表】,同时【完善客诉】又可以同时指向【PCB判责】【PCBA列表】,后续各自指向自己的进度。 直接上代码: 1.安装 1.1 Npm 方式 npm …

“探索端智能,加速大模型应用” 火山引擎边缘智能x扣子技术沙龙圆满落幕!

9月21日,火山引擎边缘智能扣子技术沙龙在上海圆满落地,沙龙以“探索端智能,加速大模型应用”为主题,边缘智能、扣子、地瓜机器人以及上海交通大学等多位重磅嘉宾出席,从多维视角探讨 AI、 AIoT、端侧大模型等技术与发展…

嵌入式数据结构中线性表的具体实现

大家好,今天主要给大家分享一下,如何使用数据结构中的线性表以及具体的实现。 第一:线性表的定义和表示方法 线性表的定义 – 线性表就是零个或多个相同数据元素的有限序列。 • 线性表的表示方法 – 线性表记为: L=(a0,∙∙∙∙∙∙∙∙ai-1aiai+1 ∙∙∙∙∙∙an-1) •…

HTTP的工作原理

HTTP(Hypertext Transfer Protocol)是一种用于在计算机网络上传输超文本数据的应用层协议。它是构成万维网的基础之一,被广泛用于万维网上的数据通信。(超文本(Hypertext)是用超链接的方法,将各种不同空间的文字信息组…

数据交换的金钟罩:合理利用安全数据交换系统,确保信息安全

政府单位为了保护网络不受外部威胁和内部误操作的影响,通常会进行网络隔离,隔离成内网和外网。安全数据交换系统是专门设计用于在不同的网络环境(如内部不同网络,内部网络和外部网络)之间安全传输数据的解决方案。 使用…

Redis 其他类型 渐进式遍历

我们之前已经学过了Redis最常用的五个类型了,然而Redis还有一些在特定场景下比较好用的类型 Redis最关键的五个数据类型: 上面的类型是非常常用,很重要的类型。 除此之外的其他类型不常用,只是在特定的场景能够发挥用处&#…

澳鹏干货 | 大语言模型的上下文窗口 (Context Windows)

大语言模型(LLMs)极大地提升了人工智能在理解和生成文本方面的能力。其中一个影响其效用的重要方面是“上下文窗口”(Context Windows)—— 这个概念直接影响着模型接收和生成语言的有效性。 本期澳鹏干货将深入探讨上下文窗口对…