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

人工智能之目标追踪DeepSort源码解读(yolov5目标检测,代价矩阵,余弦相似度,马氏距离,匹配与预测更新)

要想做好目标追踪,须做好目标检测,所以这里就是基于yolov5检测基础上进行DeepSort,叫它为Yolov5_DeepSort。整体思路是先检测再追踪,基于检测结果进行预测与匹配。

一.参数与演示

这里用到的是coco预训练人的数据集:

二.针对检测结果初始化track

对每一帧数据都输出yolo5的检测结果(主要是四个坐标值)

上图是说在第一帧时检测到8个框,它们每个框的4个坐标值如上图。

置信度是指每个框是人的可能性是多少。

下面就看它取特征的网络结构:

最终输出的特征结果是每个框(一共8个框)对应的128维的向量。

上图是按置信度过滤掉分值低的,然后再从detections对象出取出过滤后的boxes与置信度值(得分)。

三.对track执行预测操作

 

对上二个张图中写的卡曼滤波更正为卡尔曼滤波。按上图所示下面就实例化Track了,如下图:

一个track只会保存100个特征,也就保存100帧结果。到此第一帧的追踪就完成(其实第一帧也只是初始化track,没做核心内容,从第二帧开始才执行核心内容),

上面二个方法也是卡尔曼滤波的预测与更新两个核心操作。

下面开始第二帧追踪了,这里track已经有值了:

四.状态量预测结果

上图中mean[3]就是指h的值,因为对人进行跟踪时,随着运动,距离越远h值变得越小,越近h值就会变得越大,其它的x,y值是固定的,a这个长宽比也是固定的,所以说h变化比较大,那么就用基于h来做噪声矩阵。

按h初始化得到一个噪声矩阵P:

得到状态转移矩阵A:

 

上图中写的FX中的F改成A,表示状态转移矩阵。

其实上图中写的F实际上是A来的,表示状态转移矩阵。

做8次后tracker.predict()就结束了,下面将进行tracker.update(detections)方法了。tracker.update(detections)不但完成更新还要完成匹配,是最核心的方法。

五.IOU代价矩阵计算

tracker.update(detections)流程是先匹配再更新操作的。匹配包括级联匹配,当未匹配上就做IOU。

因为3次确认上才会做级联匹配,那现在第2帧进来时不会做级联匹配,就会做IOU匹配:

IOU核心就是把代价矩阵做出来,使它的损失最小(距离最小),其实就是计算track与detection之间的IOU距离值出来。

初始化出一个全是0的8*8的代价矩阵cost_matrix出来。

六.参数更新操作

匈牙利匹配只需要一个代价矩阵cost_matrix参数,输入代价矩阵返回回来最合适的匹配。上面已经得到这个参数了,所以下面就直接调用这方法:

linear_assignment是scipy中已经实现好的,直接调用返回对应的ID值:

调用的结果如下图:

有返回ID后就对detection与track中的值进行匹配过滤,如下图:

返回后得到匹配后的结果,完成IOU代价矩阵计算:

由上图可见到匹配到8个对,那接下来就要做更新操作:

取前4个值:

将协方差矩阵映射到检测空间:

上图最后把均值向量映射到检测空间的4个值(mean),协方差映射到检测空间+初始化的噪声矩阵都返回回去。映射完后就计算卡尔曼增益了,如下图:

至此卡尔曼增益已算出,预测值与协方差距阵都做了更新。

七.级联匹配模块

上图中假设8个人都连续命中3次那也就是要进行级联匹配,

为什么先做级联匹配呢?因为级联匹配是对确定状态(连续3帧都匹配上,即比较有把握的匹配了)的匹配。IOU匹配主要是对新的detection的匹配。

八.ReID特征代价矩阵计算

进入级联匹配方法中,它主要做外观信息与运动信息的匹配:

它也一样要构建代价矩阵出来

求上面所说的代价矩阵用到的是余弦相似度计算

这里运用到二个特征向量之间做余弦相似度,取出距离最近的(相似度最大的)出来,值得其它地方运用。

九.匹配结果与总结

返回级联的代价矩阵后,也要做过滤:

IOU匹配都是每一帧都会去匹配的。追踪的核心思想是当前帧track是否与检测值bbox匹配上,其中核心是代价矩阵的求解。

总结:目标检测得到bbox,第一帧得到track(iou匹配),连续3帧确定的就进行级联匹配(包括iou匹配)。

本例是对人的目标做追踪,而如果换成其它物体追踪就要把ckpt.t7换一下。

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

人工智能之目标追踪DeepSort源码解读(yolov5目标检测,代价矩阵,余弦相似度,马氏距离,匹配与预测更新)

要想做好目标追踪,须做好目标检测,所以这里就是基于yolov5检测基础上进行DeepSort,叫它为Yolov5_DeepSort。整体思路是先检测再追踪,基于检测结果进行预测与匹配。 一.参数与演示 这里用到的是coco预训练人的数据集: 二.针对检测结果初始化track 对每一帧数据都输出…...

Copilot基于企业PPT模板生成演示文稿

关于copilot创建PPT,咱们写过较多文章了: Copilot for PowerPoint通过文件创建PPT Copilot如何将word文稿一键转为PPT Copilot一键将PDF转为PPT,治好了我的精神内耗 测评Copilot和ChatGPT-4o从PDF创建PPT功能 Copilot for PPT全新功能&a…...

使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF

代码写了两个小时&#xff0c;速度太慢&#xff08;包括学习文档的时间&#xff09; #include <stdio.h> #include <Windows.h> #include <gdiplus.h> #include <string.h> using namespace Gdiplus; #pragma comment(lib, "Gdiplus.lib") …...

【Linux】【网络】Libevent基础

【Linux】【网络】Libevent基础 libevent 是轻量级 c语言实现的 网络io库 能够跨平台 且线程安全 是单线程的 libevent 的使用过程通常包括几个主要步骤&#xff1a; 1.创建Libevent实例2.注册事件、添加事件、设置处理事件回调函数3.启动事件循环4.清理资源 1. 创建Libeven…...

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理 MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器&#xff08;主服务器&#xff0c;Master&#xff09;复制到一个或多个 MySQL 数据库服务器&#xff08;从服务器&#xff0c;Slave&#xff09;的技术。以下简述其原理&#xff0c;主要包含三个核…...

nginx负载均衡, 解决iphash不均衡的问题之consistent

原因分析 客户端IP分布不均&#xff1a;部分IP段请求集中&#xff0c;导致哈希到同一后端。 服务器数量变动&#xff1a;增删节点时&#xff0c;传统ip_hash未使用一致性哈希&#xff0c;导致分布重置。 哈希键范围过小&#xff1a;例如仅使用IPv4前24位&#xff0c;不同IP可…...

MySQL远程连接配置

一、配置TCP服务地址绑定 配置文件路径 /etc/mysql/mysql.cnf /etc/mysql/mysql.conf.d/mysqld.cnf具体文件可以通过 mysql --help查看 配置项 # 只接受本地连接 bind-address 127.0.0.1 mysqlx-bind-address 127.0.0.1改为 # 接受任意IP地址连接 bind-address …...

Langchain vs. LlamaIndex:哪个在集成MongoDB并分析资产负债表时效果更好?

Langchain vs. LlamaIndex&#xff1a;哪个在集成MongoDB并分析资产负债表时效果更好&#xff1f; 随着大语言模型&#xff08;LLM&#xff09;在实际应用中的普及&#xff0c;许多开发者开始寻求能够帮助他们更高效地开发基于语言模型的应用框架。在众多框架中&#xff0c;La…...

iOS开发书籍推荐 - 《高性能 iOS应用开发》(附带链接)

引言 在 iOS 开发的过程中&#xff0c;随着应用功能的增加和用户需求的提升&#xff0c;性能优化成为了不可忽视的一环。尤其是面对复杂的界面、庞大的数据处理以及不断增加的后台操作&#xff0c;如何确保应用的流畅性和响应速度&#xff0c;成为开发者的一大挑战。《高性能 …...

Excel核心函数VLOOKUP全解析:从入门到精通

一、函数概述 VLOOKUP是Excel中最重要且使用频率最高的查找函数之一&#xff0c;全称为Vertical Lookup&#xff08;垂直查找&#xff09;。该函数主要用于在数据表的首列查找特定值&#xff0c;并返回该行中指定列的对应值。根据微软官方统计&#xff0c;超过80%的Excel用户在…...

leetcode1047-删除字符串中的所有相邻重复项

leetcode 1047 思路 因为要删除字符串中的所有相邻重复项&#xff0c;那么在删除完成后&#xff0c;最后返回的元素中是不应该存在任何相邻重复项的&#xff0c;如果是普通的遍历&#xff0c;假设str ‘abbaca’&#xff0c;遍历出来只发现中间的bb是相邻重复的删除了以后a…...

解决DeepSeek服务器繁忙问题的实用指南

目录 简述 1. 关于服务器繁忙 1.1 服务器负载与资源限制 1.2 会话管理与连接机制 1.3 客户端配置与网络问题 2. 关于DeepSeek服务的备用选项 2.1 纳米AI搜索 2.2 硅基流动 2.3 秘塔AI搜索 2.4 字节跳动火山引擎 2.5 百度云千帆 2.6 英伟达NIM 2.7 Groq 2.8 Firew…...

软件工程之软件需求SWE.1

物有本末&#xff0c;事有终始。知所先后&#xff0c;则近道矣。对软件开发而言&#xff0c;软件需求乃重中之重。必先之事重千钧&#xff0c;不可或缺如日辰。 汽车行业由于有方法论和各种标准约束&#xff0c;对软件开发有严苛的要求。ASPICE指导如何审核软件开发&#xff0…...

【面试题】redis大key问题怎么解决?(key访问的次数比较多,key存的数据比较大)

针对 Redis 中大 Key&#xff08;数据量大且访问频繁&#xff09;的问题&#xff0c;需从 数据拆分、访问优化、架构设计 等多维度综合解决。以下是具体方案及实施步骤&#xff1a; 一、大 Key 的定义与危害 定义&#xff1a; Value 过大&#xff1a;如 String 类型 Value >…...

web入侵实战分析-常见web攻击类应急处置实验1

场景说明&#xff1a; 某天运维人员发现在/opt/tomcat8/webapps/test/目录下&#xff0c;多出了一个index_bak.jsp这个文件&#xff0c; 并告诉你如下信息 操作系统&#xff1a;ubuntu-16.04业务&#xff1a;测试站点中间件&#xff1a;tomcat开放端口&#xff1a;22&#x…...

【Kubernetes】k8s 部署指南

1. k8s 入门 1.1 k8s 简介 需要最需要明确的就是&#xff1a;kubernetes&#xff08;简称 k8s &#xff09; 是一个 容器编排平台 &#xff0c;换句话说就是用来管理容器的&#xff0c;相信学过 Docker 的小伙伴对于容器这个概念并不陌生&#xff0c;打个比方&#xff1a;容器…...

深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作

一、问题背景&#xff08;传统爬虫的痛点&#xff09; 数据采集是现代网络爬虫技术的核心任务之一。然而&#xff0c;传统爬虫面临多重挑战&#xff0c;主要包括&#xff1a; 反爬机制&#xff1a;许多网站通过检测请求头、IP地址、Cookie等信息识别爬虫&#xff0c;进而限制…...

iOS事件传递和响应

背景 对于身处中小公司且业务不怎么复杂的程序员来说&#xff0c;很多技术不常用&#xff0c;你可能看过很多遍也都大致了解&#xff0c;但是实际让你讲&#xff0c;不一定讲的清楚。你可能说&#xff0c;我以独当一面&#xff0c;应对自如了&#xff0c;但是技术的知识甚多&a…...

JDK最详细安装教程,零基础入门到精通,收藏这篇就够了

目录 一、下载与安装二、配置环境三、验证是否配置成功 一、下载与安装 1、下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html 2、选择自己想要的版本下载&#xff0c;并且选择自己电脑对应的版本下载 3、下载完成之后&#xff0c;双击打开然后…...

深研究:与Dify建立研究自动化应用

许多个人和团队面临筛选各种网页或内部文档的挑战,以全面概述一个主题。那么在这里我推荐大家使用Dify,它是一个用于LLM应用程序开发的低代码,开源平台,它通过自动化工作流程的多步搜索和有效汇总来解决此问题,仅需要最小的编码。 在本文中,我们将创建“ Deepresearch”…...

新手向:SpringBoot后端查询到数据,前端404?(附联调时各传参方式注解总结-带你一文搞定联调参数)

前言&#xff1a; 在 Spring Boot 项目开发中&#xff0c;后端小伙伴可能经常遇到这样诡异的场景&#xff1a; 后台日志显示查询到了数据&#xff0c;但前端却一脸懵逼地告诉你 404 Not Found&#xff1f;接口明明写好了&#xff0c;Postman 直接访问却提示找不到&#xff1f…...

Mysql各操作系统安装全详情

" 至高无上的命运啊~ " MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Mana…...

RadASM环境,win32汇编入门教程之七

;运行效果 ;RadASM环境&#xff0c;win32汇编入门教程之七 ;在上一个教程里面&#xff0c;我们学习如何把数据显示出来。但是感觉太丑了&#xff0c;在这一教程里&#xff0c;我们来学习一下怎样让它们变漂亮点。 ;主要的内容是如何创建字体&#xff0c;设置字体的大小&#xf…...

STL之string类的模拟实现

目录 1. string的成员变量 2. string的成员函数 2.1 string类的c_str()和swap()函数 2.2 string类的构造 2.3 string类的拷贝构造 2.3.1传统写法&#xff1a; 2.3.2现代写法&#xff1a; 2.4string类的运算符重载 2.4.1传统写法&#xff1a; 2.4.2现代写法 2. 5 …...

定期自动统计大表执行情况

一、创建用户并赋权 create user dbtj identified by oracle default tablespace OGGTBS;grant connect,resource to dbtj;grant select any dictionary to dbtj;grant create job to dbtj;grant manage scheduler to dbtj; 二、创建存储表 1、连接到新建用户 conn dbtj/or…...

学习next.js的同时的一些英语单词记录

skip &#xff1a;跳过 optional&#xff1a;可选的 previous&#xff1a;以前的 lesson&#xff1a;课程 directory&#xff1a;目录 identical&#xff1a;相同的 instruction&#xff1a;说明 development server&#xff1a;开发服务器 client-side&#xff1a;客户…...

ok113i平台——qt+tslib支持usb触摸屏热插拔功能实现

问题&#xff1a;重新插拔设备&#xff0c;需要软件重启才能接收到触摸事件 愿因&#xff1a;是因为qt程序的tslib库的操作逻辑是在构造函数里面连接一次usb触摸设备&#xff0c;具体看如下文件内容&#xff1a; /home/forlinx/OK113i-linux-sdk/buildroot/buildroot-201902/dl…...

游戏引擎学习第112天

黑板&#xff1a;优化 今天的内容是关于优化的&#xff0c;主要讨论了如何在开发中提高代码的效率&#xff0c;尤其是当游戏的帧率出现问题时。优化并不总是要将代码做到最快&#xff0c;而是要确保代码足够高效&#xff0c;以避免性能问题。优化的过程是一个反复迭代的过程&a…...

深度学习笔记——LSTM

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的LSTM知识点。 文章目录 LSTM&#xff08;Long Short-Term Memory&#xff09;LSTM 的核心部件LSTM 的公式和工作原理(1) 遗忘门&a…...

基于SpringBoot的“食物营养分析与推荐网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“食物营养分析与推荐网站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面 系统注册…...