【原理代码详解】DeepSORT算法:多目标跟踪的深度学习解决方案

一、引言

在视频监控和智能交通系统中,多目标跟踪是一项关键技术,它涉及检测视频中的多个目标,并在视频帧之间维持每个目标的身份。DeepSORT算法作为SORT算法的扩展,通过结合深度学习和传统的跟踪技术,提高了目标跟踪的准确性和鲁棒性。本文将深入讲解DeepSORT算法的原理和流程,并对Deepsort的代码进行介绍。

二、DeepSORT算法原理

DeepSORT算法的核心在于其对目标的外观特征和运动特征的联合使用,以及对目标匹配问题的优化处理。该算法通过融合目标检测的结果,结合匈牙利算法和卡尔曼滤波等技术,实现对多个目标的持续跟踪。

DeepSORT算法的主要步骤

  1. 目标检测:DeepSORT算法依赖于目标检测器来确定视频中每一帧的目标位置。常用的目标检测器包括YOLO、Faster R-CNN等。检测器的输出通常包括目标的边界框(bounding box)和类别。

  2. 特征提取:DeepSORT使用深度学习模型来提取目标的外观特征。这些特征对于目标的再识别(re-identification,简称Re-ID)至关重要,因为即使目标在视频中被临时遮挡或丢失,这些特征也能帮助算法重新识别和关联目标。

  3. 匹配和跟踪:DeepSORT算法中的匹配过程涉及到计算检测框和预测框之间的相似度,并使用匈牙利算法来找到最优匹配。这个过程还包括卡尔曼滤波器的使用,它根据目标的历史运动信息来预测其在下一帧中的位置。

    1. 卡尔曼滤波:用于预测目标在下一帧中的位置。

    2. 匈牙利算法:用于计算检测框和预测框之间的最优匹配。

  4. 级联匹配:DeepSORT中的级联匹配是一种特殊的机制,它首先尝试将检测结果与高置信度的轨迹进行匹配,然后再与低置信度的轨迹进行匹配。这有助于提高匹配的准确性,尤其是在目标被遮挡或短暂消失时。

  5. 轨迹管理:DeepSORT维护每个目标的轨迹,并对新检测到的目标初始化新的轨迹。它还设置了确认状态(confirmed)未确认状态(unconfirmed),以处理遮挡和临时丢失的情况。

DeepSORT算法流程

  1. 初始化Tracks:在视频的第一帧中,基于目标检测器的输出,为每个检测到的目标创建一个新的Tracks,并将其状态设为Unconfirmed。此时,由于是第一帧,所以所有的Tracks都处于unconfirmed状态

  2. 预测Tracks:使用卡尔曼滤波器预测Tracks在下一帧中的位置和速度。

  3. 目标检测(Detections):在每一帧中,目标检测器识别出该帧中所有目标的检测框。

  4. IOU匹配:计算上一帧预测的Tracks与当前帧Detections之间的IOU,并基于此构建代价矩阵。

  5. 匹配与更新

    1. 使用匈牙利算法对代价矩阵进行优化匹配,以最小化匹配的总代价。

    2. 对于匹配成功的Tracks,使用卡尔曼滤波器进行状态更新。

    3. 对于未匹配的Tracks(Unmatched Tracks),直接删除这些失配的Tracks(如果Tracks是确认态,则需要连续达到一定次数(默认30次)才能删除)。

    4. 对于未匹配的Detections(Unmatched Detections),将这些失配的Detections初始化为新的Tracks。

  6. 循环执行(2)-(5)步骤,直到出现确认态(confirmed)的Tracks或者视频帧结束。

  7. 级联匹配:对于Confirmed状态的Tracks,利用外观特征进行更精确的级联匹配。

    1. 第一种是Tracks匹配,通过卡尔曼滤波更新相应的Tracks变量。

    2. 第二种和第三种是Detections和Tracks失配,将之前的不确定态的Tracks和失配的Tracks与Unmatched Detections逐一进行IOU匹配,再根据匹配度计算代价矩阵。

  8. 线性匹配结果:将(7)中得到的所有代价矩阵作为匈牙利算法的输入,得到线性匹配的结果。

    1. 第一种是Tracks失配(Unmatched Tracks),直接删除这些失配的Tracks(如果Tracks是确认态,则需要连续达到一定次数(默认30次)才能删除)。

    2. 第二种是Detections失配(Unmatched Detections),将这些失配的Detections初始化为新的Tracks。

    3. 第三种是检测框和预测的框框成功配对,表示前一帧和后一帧的追踪成功,通过卡尔曼滤波更新相应的Tracks变量。

  9. 循环执行(7)-(8)步骤,直到视频结束。

  10. 输出结果:在整个视频帧处理过程中,维护和更新Tracks,最终输出每个目标的跟踪结果,包括目标ID、位置、速度等信息。

匈牙利算法(Hungarian Algorithm)【额外介绍】

匈牙利算法是一种用于解决分配问题的有效算法。在DeepSORT算法中,匈牙利算法被用于解决数据关联问题,即如何将当前帧中检测到的目标(detections)与上一帧中跟踪的目标(tracks)进行匹配。DeepSORT通过计算检测框和跟踪框之间的相似度,构建一个代价矩阵,然后利用匈牙利算法找到最小化代价的匹配方案。

在DeepSORT中,匈牙利算法的作用可以概括为:

  • 初始化:当视频的第一帧被检测时,每个检测到的目标初始化一个跟踪轨迹。

  • 匹配:在随后的帧中,匈牙利算法将当前帧的检测与上一帧的跟踪轨迹进行匹配,通过计算代价矩阵并应用匈牙利算法来找到最优匹配,从而更新跟踪轨迹。

卡尔曼滤波器(Kalman Filter)【额外介绍】

卡尔曼滤波器是一种线性动态系统的状态估计算法,它在DeepSORT中用于预测目标的运动状态。DeepSORT中的卡尔曼滤波器处理一个8维状态空间,其中包括目标的中心位置(x, y)、宽高比(a)、高度(h)以及这些参数的一阶导数(速度)。

卡尔曼滤波器在DeepSORT中的应用包括:

  1. 预测:在没有观测数据的情况下,卡尔曼滤波器使用目标的历史信息来预测其在下一帧中的位置和速度。

  2. 更新:当获得新的观测数据时,卡尔曼滤波器会结合预测结果和观测数据来更新目标的状态估计。

DeepSORT中的卡尔曼滤波器通过以下步骤实现:

  • 类初始化:定义基础参数,创建卡尔曼滤波模型矩阵。

  • 初始化状态:为每个新检测到的目标初始化状态和协方差矩阵。

  • 预测阶段:估计目标的状态转移,考虑运动模型和控制输入。

  • 更新阶段:根据观测值调整预测,考虑观测误差和预测误差的协方差。

通过结合匈牙利算法和卡尔曼滤波器,DeepSORT算法能够有效地处理多目标跟踪中的匹配问题,即使在目标被遮挡或快速移动的情况下也能保持较高的跟踪精度。这两种算法的结合是DeepSORT算法鲁棒性的关键。

DeepSORT算法的优势

DeepSORT算法通过结合深度学习和传统的跟踪技术,有效地提高了多目标跟踪的准确性和鲁棒性。它特别适用于目标遮挡、快速移动等复杂场景。深度学习模型能够提取出鲁棒的表观特征,有助于目标的再识别。此外,DeepSORT中的轨迹确认机制允许算法区分高置信度轨迹和低置信度轨迹,从而在匹配过程中赋予它们不同的优先级。

三、DeepSORT代码讲解

  

configs 目录

该 yaml文件主要是保存一些参数。

  1. REID_CKPT:特征提取权重的目录路径。

  2. MAX_DIST:最大余弦距离,用于级联匹配,如果大于该阈值,则忽略。

  3. MIN_CONFIDENCE:检测结果置信度阈值,大于该值就留下来。

  4. NMS_MAX_OVERLAP:非极大抑制阈值,设置为1代表不进行抑制。

  5. MAX_IOU_DISTANCE:最大IOU阈值。

  6. MAX_AGE:最大寿命,也就是经过MAX_AGE帧没有追踪到该物体,就将该轨迹变为删除态。

  7. N_INIT:最高检测次数,如果超过该次数(检测框与预测框匹配成功),就由不确定态转为确定态。

  8. NN_BUDGET:最大保存特征帧数,如果超过该帧数,将进行滚动保存。

deep_sort/deep 目录(特征提取网络)

  1. checkpoint/ckpt.t7:这是一个特征提取网络的权重文件,特征提取网络训练好了以后会生成这个权重文件,方便在目标追踪的时候提取目标框中的特征,在目标追踪的时候避免ID switch。

  2. evaluate.py:计算特征提取模型精确度。

  3. feature_extractor.py:提取对应bounding box中的特征, 得到一个固定维度的特征,作为该bounding box的代表,供计算相似度时使用。

  4. model.py:特征提取网络模型,该模型用来提取训练特征提取网络权重。

  5. original_model.py:特征提取网络模型,该模型用来提取训练特征提取网络权重。

  6. train.py:训练特征提取网络的文件

  7. test.py:测试训练好的特征提取网络的性能的文件

deep_sort/sort目录

  1. detection.py:保存通过目标检测的一个检测框框,以及该框的置信度和获取的特征;同时还提供了框框的各种格式的转化方法。

  2. iou_matching.py:计算两个框框之间的IOU。

  3. kalman_filter.py:卡尔曼滤波器的相关代码,主要是利用卡尔曼滤波来预测检测框的轨迹信息。

  4. linear_assignment.py:利用匈牙利算法匹配预测的轨迹框和检测框最佳匹配效果。

  5. nn_matching.py:通过计算欧氏距离、余弦距离等距离来计算最近领距离。

  6. preprocessing.py:非极大抑制代码,利用非极大抑制算法将最优的检测框输出。

  7. track.py:主要储存的是轨迹信息,其中包括轨迹框的位置和速度信息,轨迹框的ID和状态,其中状态包括三种,一种是确定态、不确定态、删除态三种状态。

  8. tracker.py:保存了所有的轨迹信息,负责初始化第一帧,卡尔曼滤波的预测和更新,负责级联匹配,IOU匹配。

deep_sort/deep_sort.py

deepsort的整体封装,实现一个deepsort追踪的一个整体效果。

deep_sort/utils 目录

这里最主要有一些各种各样的工具python代码,例如画框工具,日志保存工具等等。

  1. asserts.py:判断文件、运行环境是否存在。

  2. drwa.py:绘制在图片上的内容。

  3. evaluation.py:自动化地评估多目标跟踪算法的性能,通过计算如MOTA(多目标跟踪精度)、IDF1(身份匹配F1分数)、召回率和精确度等关键指标,来衡量算法在处理视频序列时的效果。

  4. io.py:保存文件的信息。

  5. json_logger.py:用于实时目标检测的自定义日志记录机制,它能够将检测结果以JSON格式保存。

  6. log.py:日志信息。

  7. parser.py:解析YAML配置文件。

  8. tools.py:用于检查文件是否为视频文件和测量和打印函数执行所需的时间。

四、结论

随着深度学习技术的不断进步,DeepSORT及其变体有望在未来的视频分析领域发挥更大的作用。DeepSORT算法的成功在于其能够有效地处理视频中目标的遮挡和快速移动,同时保持了较高的跟踪精度和鲁棒性。这使得DeepSORT成为了视频监控、自动驾驶、机器人视觉等领域中一个非常有价值的工具。

五、链接作者

欢迎关注我的公众号:@AI算法与电子竞赛

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1421782.html

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

相关文章

李飞飞团队关于2024年人工智能发展报告总结 (Artificial Intelligence Index Report)

目录 1 10大核心信息2 AI研究和发展2.1 核心要点2.2 核心对比信息2.3 模型是否会用尽数据2.4 基础模型发展2.5 训练模型成本 3 技术性能3.1 核心要点3.2 重要模型发布情况3.3 AI表现情况3.4 多学科、高难度评估集 (MMMU & GPQA & ARC)3.5 Agents3.6 RLHF & RLAIF3.…

R语言数据分析案例-股票题目分析

Value at Risk(VaR)是一种统计技术,用于量化投资组合在正常市场条件下可能遭受的最大潜在损失。它是风险管理和金融领域中一个非常重要的概念。VaR通常以货币单位表示,用于估计在给定的置信水平和特定时间范围内,投资组…

基于网络的无人海洋船舶控制

书籍:Network-Based Control of Unmanned Marine Vehicles 作者:Yu-Long Wang,Qing-Long Han,Chen Peng,Lang Ma 出版:Springer 书籍下载-《基于网络的无人海洋船舶控制》控制系统中的通信网络可能引起延…

28.6k Star!Dify:完善生态、支持Ollama与本地知识库、企业级拖放式UI构建AI Agent、API集成进业务!

原文链接(更好排版、视频播放、社群交流) 28.6k Star!Dify:完善生态、支持Ollama与本地知识库、企业级拖放式UI构建AI Agent、API集成进业务! 原创 Aitrainee [ AI进修生 ](javascript:void(0)😉 AI进修…

触摸OpenNJet,云原生世界触手可及

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 导言OpenNJet云原生引擎介绍云原生平台的介绍优化与创新 为什么选择OpenNJet云原生引擎如何在windo…

SAP 控制已转采购订单的PR不允许删除简介

SAP系统中采购申请当被转成采购订单后,在采购申请中会关联到对应已生生成的采购订单,如下图中可以看到采购申请对应的采购订单 当日常操作中用户在创建完采购申请后,当PR转成PO后仍然可以将采购申请的行项目进行删除,显然这个操作…

maven .lastUpdated文件作用

现象 有时候我在用maven管理项目时会发现有些依赖报错,这时你可以看一下本地仓库中是否有.lastUpdated文件,也许与它有关。 原因 有这个文件就表示依赖下载过程中发生了错误导致依赖没成功下载,可能是网络原因,也有可能是远程…

做国外问卷调查,一天能挣多少钱?

大家好​,我是汇舟问卷,专注于国外问卷调查项目已经五年的时间了,目前做的一直比较稳定。 这个项目说白了就是通过搭建国外的环境,登录问卷平台,通过参与国外企业发布的问卷调查来获取​美金奖励。 那么参与的问卷的…

2.数据类型与变量(java篇)

目录 数据类型与变量 数据类型 变量 整型变量 长整型变量 短整型变量 字节型变量 浮点型变量 双精度浮点型 单精度浮点型 字符型变量 布尔型变量(boolean) 类型转换 自动类型转换(隐式) 强制类型转换(显式) 类型提升 字符串类型 数据类…

中医揿针的注意事项

点击文末领取揿针的视频教程跟直播讲解 关于揿针的注意事项,我们可以从以下几个方面进行探讨: 01操作前准备 1. 确保针具的清洁和无菌状态,以避免感染。 2. 了解患者的身体状况,如是否有特殊疾病或过敏史,以便选择…

HPC高性能计算 AI人工智能计算需要50GB/s高带宽1.3M IOPS及0.3毫秒级低延迟的存储磁盘阵列,性能还能随节点增加而成倍增长

最近FSD(完全自动驾驶)成为热点话题,以自动驾驶,智慧医疗、生命科学、机器人为代表的新领域,广泛应用人工智能、机器学习(ML)、高性能计算(HPC),给存储带来前…

Apple store 静安·苹果店欣赏

官网: https://www.apple.com/today/Apple 亚洲第一大商店:Apple 静安零售店现已在上海开幕 静安苹果欣赏

从零开始学习Linux(6)----进程控制

1.环境变量 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,我们在编写C/C代码时,链接时我们不知道我们链接的动态静态库在哪里,但可以连接成功,原因是环境变量帮助编译器进行查找,环境变量通常具有…

geotrust dv通配符证书800

Geotrust是成立时间较久的正规CA认证机构,在过去的几十年间颁发了无数的SSL证书,这些SSL证书被各个开发者使用,受到大多数浏览器的信任。而Geotrust旗下的DV通配符证书因其广泛的应用范围受到了用户的青睐。今天就随SSL盾小编了解Geotrust旗下…

SpringAMQP 发布订阅-DirectExchange

DirectExchange: 路由模式模型 代码实现 直接通过注解方式绑定交换机和队列,这里边加了key也就是BingdingKey绑定key,可以看作交换机的路由规则,交换机收到消息后读取消息中指定的Routingkey发送到存有相应BingdingKey的队列中。 RabbitLis…

绝地求生PUBG新老艾伦格有什么差别 老艾伦格什么时候回归

复古风格的艾伦格原始地图携带着那些标志性的记忆符号华丽回归,邀请您沉浸于往昔的每一处细节探索中。我们不仅还原了游戏诞生的起点,还在其中巧妙融入现代游戏元素,构筑一座连接昔日与今朝的桥梁,完美融合了经典与创新的游戏体验…

Nginx内网环境开启https

文章目录 前言一、open-ssl1. 验证2. 安装3.生成ssl证书 一、nginx1. 验证支持模块2. 安装必要模块2.1 重新编译nginx2.2 替换原文件 3. 配置https 总结 前言 nginx开启https前提: 服务器支持open-sslnginx 包含--with-http_ssl_module --with-stream --with-stre…

浏览器不兼容 replaceAll 方法问题解决

问题 在一些较旧版本的浏览器中可能会出现 replaceAll 方法不兼容,提示replaceAll 方法 undefined 的问题。浏览器版本兼容情况如下图所示: 解决 可以通过 replace 正则表达式 的方法来代替 replaceAll 方法: let str "我是一段文本…

下载npm I就包错解决方案

npm i xxxx -S --legacy-peer-deps 如果包错就执行以上命令

文本分类的深度注意图扩散网络 笔记

1 Title Deep Attention Diffusion Graph Neural Networks for Text Classification(Yonghao Liu、Renchu Guan、Fausto Giunchiglia、Yanchun Liang、Xiaoyue Feng)【EMnlp 2021】 2 Conclusion Text classification is a fundamental task with broad…