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

一文轻松入门DeepSort

1.背景

Deepsort是目标检测任务的后续任务,得益于Yolo系列的大放异彩,DeepSort目标追踪任务的精度也不断提高,同时,DeepSort属于目标追踪任务中的多目标追踪,即MOT(Multiple Object Tracking,MOT),追踪多个目标的位置。

2.引言-Sort算法

sort算法是deepsort的前身,本身引入了卡尔曼预测和匈牙利匹配算法。

sort算法的匹配过程如下所示:
1.对于之前的每一个track,利用卡尔曼算法预测出下一帧的情况(包括八个部分:x,y,h/w,h,4个速度量)与detect到的每一个框进行IOU匹配。

2.基于IOU矩阵,进行匈牙利匹配,对于匹配的结果有以下三种

(1)有剩余的track未被匹配到,直接删除这些track;

(2)有检测框没和之前的track相匹配,即当前的yolo框出的先验框找不到前几帧的任一图像进行追踪,则将此框作为新的track加入到下一次的匹配当中;

(3)对于所有匹配到的track,继续加入下一次的track进行下一次的追踪

这里的匈牙利匹配,上图中是IOU Match那里,即基于IOU距离构造的成本矩阵对Detection和Track作匹配,SK-learn库的linear_assignment_和scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。

sort的缺点是,没有引入REID深度学习特征,REID是通过预训练好的模型进行特征提取,deepsort中。

3.deepsort算法

3.1卡尔曼滤波

定义:利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以这一最优估计也可看作是滤波过程。

tips:(1)线性系统,意思是卡尔曼滤波必须一帧一帧的进行检测,不能跳帧,否则无法进行估计。

(2)分predict和update两部分。predict基于先验的model(状态转移信息),如小车运动方程等,从k-1时刻根据model predict k时刻的状态和协方差;update是基于当下k时刻传感器(观测信息),对prediction进行更新。每一帧做完都要返回来更新之前的卡尔曼增益矩阵。

3.2匈牙利算法

给出代价矩阵后,借助匈牙利算法即可计算出类似于预测框与检测框之间最小距离的对应关系

具体计算过程如下

代价矩阵包括REID和运动信息构建的代价矩阵,这个代价矩阵位于级联匹配之中。

代价矩阵还包括IOU匹配,位于IOU Match中。

3.3 级联匹配

输入为:

        1、基于第k-1帧由卡尔曼滤波predict到的当前第k帧所有confirmed状态的track;

        2、当前第k帧的所有detection

输出为:

        1、match上的detection、track;

        2、没有match上的track;

        3、没有match上的detection。

大概工作流程为,deepsort在第一步会先进行级联匹配,级联匹配时,会优先使用到匹配之前已经匹配过的且按照匹配次数降序排列帧,对于连续匹配3帧的track,会将其置为confirmed状态,对于之前已经匹配的confirmed状态帧,若连续70帧未匹配,将被剔除,只有连续匹配3帧的track才会进入级联匹配,否则会直接进入IOU匹配。

REID和卡尔曼估计在级联匹配过程中生效,对于在级联匹配中未匹配的检测框将和未确认的track一起放入IOU匹配中。

级联匹配按照代价矩阵的距离进行计算(检测框与track之间的代价距离),其中设置有门单元,即对于计算出的代价矩阵中的值,若代价距离大于门限值,则不认为他们直接有关系,在代码中会对这个距离加上一个极小数,然后将大于门限值的值进行剔除。

3.4REID

行人重识别,利用预训练的模型,来提取当前yolo检测到的bbox和当前所有track的128维特征,对于每一个track,不仅检测其上一帧的特征,会保留大概前100帧中计算出的每一帧的特征,bbox的特征与这100帧的特征列表全部进行一次比较,形如[128维向量,128维向量,128维向量,...,128维向量],选择余弦相似度最大的一帧的特征。

4.追踪任务流程

对于第一帧,不会有track,也即不会有框出现

对于第二帧,还没有confirmed的track,所以不会进入级联匹配,会直接进入到IOU匹配,利用卡尔曼预测的八个值【x,y,w/h........】和检测框构建代价矩阵,然后继续更新卡尔曼参数。

注意,每一次对于匹配到的track,都要更新其卡尔曼参数

代价矩阵的构建包括两大部分:

第一大部分位于级联匹配:

1.REID构建的对于bbox的128维向量和confirmed的track的前100帧的128维向量构建的余弦距离的代价矩阵;(deepsort的核心)

2.卡尔曼估计得到的运动信息,即八个状态量【】和当前框bbox检测到的运动信息,即bbox的八个状态量之间的差异构建的代价矩阵

第二大部分为IOU 匹配

利用检测出的框detect和后验估计,即卡尔曼估计得到的框计算其iou距离,构建代价矩阵。

相关文章:

一文轻松入门DeepSort

1.背景 Deepsort是目标检测任务的后续任务,得益于Yolo系列的大放异彩,DeepSort目标追踪任务的精度也不断提高,同时,DeepSort属于目标追踪任务中的多目标追踪,即MOT(Multiple Object Tracking,M…...

关于linux openssl的自签证书认证与nginx配置

自签文档链接 重点注意这块,不能写一样的,要是一样的话登录界面锁会报不安全 域名这块跟最后发布的一致 nginx配置的话 server {listen 443 ssl; //ssl 说明为https 默认端口为443server_name www.skyys.com; //跟openssl设置的域名保持一致s…...

Mybatis--关联关系映射

目录: 1.什么是关联关系映射: 一对一和多对多的区别 2.mybaits中的一对一&一对多关联关系配置 配置generatoeConfig文件 插件自动生成 ​编辑 写sql语句 创建 Ordermapper类 编写接口类 ​编辑 编写接口实现类 编写测试类 测试结果 一对…...

Golang基本的网络编程

Go语言基本的Web服务器实现 Go 语言中的 http 包提供了创建 http 服务或者访问 http 服务所需要的能力,不需要额外的依赖。 Go语言在Web服务器中主要使用到了 “net/http” 库函数,通过分析请求的URL来实现参数的接收。 下面介绍了http 中Web应用的基本…...

Postgresql的一个bug_涉及归档和pg_wal

故障描述: 服务器ocmpgdbprod1,是流复制主节点,它的从节点是ocmpgdbprod2,两个节点的Postgresql数据库版本都是PostgreSQL 11.6,主节点ocmpgdbprod1配置了pg_wal归档,从节点ocmpgdbprod2没有配置pg_wal归档…...

轻量、便捷、高效—经纬恒润AETP助力车载以太网测试

随着自动驾驶技术和智能座舱的不断发展,高宽带、高速率的数据通信对主干网提出了稳定、高效的传输要求,CAN(FD)、LIN已无法充分满足汽车的通信需求。车载以太网作为一种快速且扩展性好的网络技术,已经逐步成为了汽车主干网的首选。 此外&…...

【跟小嘉学 Rust 编程】二十四、内联汇编(inline assembly)

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

综合实训-------成绩管理系统 V1.1

综合实训-------成绩管理系统 V1.1 1、一维数组数据double 2、我们用元素的位置来当学号。 1、录入数据 【5个数据】或【通过文件的方式取数据】 2、显示数据 3、添加一条记录 4、修改一条记录 5、删除一条记录 6、查找一条记录。【输入学号,显示成绩】 7、统计。【…...

13.108.Spark 优化、Spark优化与hive的区别、SparkSQL启动参数调优、四川任务优化实践:执行效率提升50%以上

13.108.Spark 优化 1.1.25.Spark优化与hive的区别 1.1.26.SparkSQL启动参数调优 1.1.27.四川任务优化实践:执行效率提升50%以上 13.108.Spark 优化: 1.1.25.Spark优化与hive的区别 先理解spark与mapreduce的本质区别,算子之间(…...

大模型综述论文笔记6-15

这里写自定义目录标题 KeywordsBackgroud for LLMsTechnical Evolution of GPT-series ModelsResearch of OpenAI on LLMs can be roughly divided into the following stagesEarly ExplorationsCapacity LeapCapacity EnhancementThe Milestones of Language Models Resources…...

树的介绍(C语言版)

前言 在数据结构中树是一种很重要的数据结构,很多其他的数据结构和算法都是通过树衍生出来的,比如:堆,AVL树,红黑色等本质上都是一棵树,他们只是树的一种特殊结构,还有其他比如linux系统的文件系…...

Android studio实现圆形进度条

参考博客 效果图 MainActivity import androidx.appcompat.app.AppCompatActivity; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView;import java.util.Timer; import java.util.TimerTask;public class MainActivity extends App…...

基于Halcon的喷码识别方法

具体步骤如下: 1. 读入一幅图片(彩色或黑白); 2. 将RGB图像转化为灰度图像; 3. 提取图片中的圆点特征(喷码图片中多是圆点特征),在Halcon中dots_image() 函数非常适合喷码检测; 4. 通过设定阈值,增强明显特征部分; 5. 进行一系列形态学操作(如闭运算等),将…...

【Sword系列】Vulnhub靶机HACKADEMIC: RTB1 writeup

靶机介绍 官方下载地址:https://www.vulnhub.com/entry/hackademic-rtb1,17/ 需要读取靶机的root目录下key.txt 运行环境: 虚拟机网络设置的是NAT模式 靶机:IP地址:192.168.233.131 攻击机:kali linux,IP地…...

idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决

idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决 欢迎使用Markdown编辑器1、使用maven clean install -X会提示报错日志2、在Poperties.java文件的这一行打上断点3、maven debug进行调试4、运行到断点位置后,查看报错char…...

linux深入理解多进程间通信

1.进程间通信 1.1 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件…...

使用自定义注解+aop实现公共字段的填充

问题描述:对于每个表都有cratetime,updatetime,createby,updateby字段,每次插入数据或者更改数据的时候,都需要对这几个字段进行设置。 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface AutoFill {//数据库…...

Unity 安卓(Android)端AVProVideo插件播放不了视频,屏幕一闪一闪的

编辑器运行没有问题,但是安卓就有问题,在平板上运行就会报错: vulkan graphics API is notsupported 说不支持Vulkan图形API,解决方法:把Vulkan删除掉...

无涯教程-JavaScript - DMIN函数

描述 DMIN函数返回列表或数据库中符合您指定条件的列中的最小数字。 语法 DMIN (database, field, criteria)争论 Argument描述Required/Optionaldatabase 组成列表或数据库的单元格范围。 数据库是相关数据的列表,其中相关信息的行是记录,数据的列是字段。列表的第一行包含…...

GaussDB数据库SQL系列-层次递归查询

目录 一、前言 二、GuassDB数据库层次递归查询概念 三、GaussDB数据库层次递归查询实验示例 1、创建实验表 2、sys_connect_by_path(col, separator) 3、connect_by_root(col) 4、WITH RECURSIVE 四、递归查询的优缺点 1、优点 2、缺点 五、总结 一、前言 层次递归…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时,需要使用外部低速晶振...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

简单介绍C++中 string与wstring

在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位&#xff09…...