【深度学习|目标跟踪】DeepSort 详解

DeepSort详解

  • 1、Sort回顾
  • 2、DeepSort的状态向量
  • 3、DeepSort的外观特征
  • 4、DeepSort的track状态
  • 5、DeepSort的代价矩阵以及门控矩阵
  • 6、DeepSort的级联匹配

1、Sort回顾

查看这篇博客

2、DeepSort的状态向量

  Sort中的卡尔曼滤波使用的目标的状态向量是一个7维的向量,如下图所示:
在这里插入图片描述
其中,u,v表示目标中心的水平和垂直像素的位置;s,r表示目标边界框的面积和纵横比。
DeepSort的状态量中加入了一个纵横比的变化率,如下图所示:
在这里插入图片描述
从理论上来讲,加入了一个纵横比的变化率确实能够提高目标跟踪的准确性,比较目标一直在移动会有遮挡,显示的检测框的纵横比肯定也不是固定的。这是DeepSort的运动特征表示。下面我们看DeepSort的外观特征表示。

3、DeepSort的外观特征

  为了解决Sort跟踪算法中,对于目标遮挡或检测失效等问题带来的,id消失之后再出现时的id不断变化的问题,DeepSort加入了一个特征提取网络来进行对特征进行匹配,可以关联上长时间被遮挡但又出现的目标、。DeepSort使用了一个简单的卷积神经网络来提取检测框中的目标特征向量,这里的网络可以自己diy,也可以使用目前主流的现有的CNN,如ResNet18,ResNet50等。在跟踪的过程中,DeepSort会将目标在当前帧的特征向量进行提取,并保存在track对象的属性中。在后面的每一帧中,都会执行一次将当前帧的目标特征向量与gallery中的特征向量进行相似度的计算(比如余弦相似度)。这个相似度将会作为DeepSort匹配阶段的一个重要的判别依据。

4、DeepSort的track状态

  DeepSort源码中的track类有三种状态,Tentative(暂定状态),Confirmed(确定状态),Deleted(删除态)。在开始检测时,检测的对象都会初始化一个track对象,此时的track为Tentative暂定状态,当这个track关联的检测对象连续三帧被检测到并且关联上这个track时,那么在第四帧就会将这个track的状态升级为Confirmed状态,如果track状态为Tentative并且当前帧失配了或者track的update次数已经超过了最大age,则将track的状态降级为Deleted状态。

5、DeepSort的代价矩阵以及门控矩阵

  将当前帧的检测框与先前存在的track进行关联的方式可以依靠匈牙利匹配算法来实现。但是在这之前,我们需要解决代价矩阵的问题。Sort的代价矩阵是由当前帧的运动特征与前一帧的运动特征的卡尔曼预测值进行iou的比对来产生的,这样做会导致较大的局限性。因此,DeepSort寻找了两个适当的指标来结合运动特征和外观特征。

  • 首先我们来看运动特征:作者采用了马氏距离来衡量卡尔曼预测态和当前测量值之间的差异。关于马氏距离的解释可以查看这篇博客。下图则是DeepSort中外观特征的马氏距离计算公式:
    在这里插入图片描述
    其中yi,si表示第i个track分布到测量空间的投影,dj表示第j个目标检测框,在代码中的体现:
    在这里插入图片描述
    我们计算出外观特征的距离之后,我们还需要一个阈值来判断是否是我们想要的匹配,其中四维空间的马氏阈值为9.4877,这在代码中也有体现:
    在这里插入图片描述
    有了阈值之后,我们就可以来卡满足匹配要求的外观特征和不满足匹配要求的外观特征了:
    在这里插入图片描述
    在计算出了feature的余弦相似度之后,我们可以使用这个外观特征的门控特性来卡,大于这个马氏阈值的,我们将feature的余弦相似度设置成一个很大的固定值,小于这个马氏阈值的,我们则保留本来的余弦相似度,代码中的体现:
    在这里插入图片描述

  • 外观特征:作者在每一个track中都创建了一个gallery来存储这个track在不同帧中的外观特征,并且每个外观特征的模长为1(特征层经过了归一化),论文中用Rk表示,Rk中最多存储100个外观特征。因此,当我们获取当前帧的所有检测框时就得到了所有当前帧的外观特征,我们拿这些外观特征与不同track对象中的Rk库进行余弦相似度的计算,并得到其中的最小值:
    在这里插入图片描述
    其中rj表示当前帧的第j个检测框,rk(i)表示第i个track的gallery特征库(余弦相似度值越大,说明两个目标之间越相似),因此这里的值取最小值表示最相似的。同样,设定一个阈值来卡余弦相似度:
    在这里插入图片描述
    在源码中,这里的阈值设置为0.2,即大于0.2的都置为一个固定值:
    在这里插入图片描述
    在这里插入图片描述

  • 运动特征与外观特征的融合:运动特征与外观特征的作用是相辅相成的,试想一下,运动特征可以匹配上短期内的物体位移带来的目标位置变化,但是遮挡之后目标的位置中断导致无法匹配上,而外观特征可以搜寻过往的track的特征,来进行匹配。但是当画面中出现两个目标的外观特征十分相似而空间上的分离能让我们确定他们时两个物体时,这时使用外观特征则会导致将他们视为一个track的误判,这时就需要运动特征来提供判断依据,因此作者采用了加权的方式来综合两个代价矩阵,得到最终的代价矩阵:
    在这里插入图片描述
    最后,我们联合运动门控矩阵(马氏距离阈值得到)与外观门控矩阵(max_distance阈值得到),得到了最终的关联性门控矩阵:
    在这里插入图片描述
    然后结合最终的代价矩阵和门控矩阵来得到最终用于匈牙利匹配的矩阵并进行级联匹配。

6、DeepSort的级联匹配

  对confirmed状态下的tracks和当前的检测框进行级联匹配,这里的级联指的是不同update次数下的tracks我们都需要与当前的所有检测框进行匹配。先遍历当前的所有tracks,并将其分成confirmed和unconfirmed的两种track,记录下他们的索引在对应列表中。然后进入matching_cascade方法中,从0开始遍历到cascade_depth,源码中设置为70,即我们遍历到最多在有70帧还未更新的track,遍历当前level下的所有tracks,挑出满足的tracks,然后进入min_cost_matching函数中与当前帧的检测框进行匹配,返回的是已经配对上的track索引和检测框索引,以及还剩下的未匹配的检测框索引;这个循环一直持续,当未匹配的检测框列表为空时,提前退出循环,算法流程如下图所示:
在这里插入图片描述
min_cost_matching函数中调用了gated_metric函数来进行代价矩阵的计算:

        def gated_metric(tracks, dets, track_indices, detection_indices):
            features = np.array([dets[i].feature for i in detection_indices])
            targets = np.array([tracks[i].track_id for i in track_indices])
            
            # 通过最近邻(余弦距离)计算出成本矩阵(代价矩阵)
            cost_matrix = self.metric.distance(features, targets)
            # 计算门控后的成本矩阵(代价矩阵)
            cost_matrix = linear_assignment.gate_cost_matrix(
                self.kf, cost_matrix, tracks, dets, track_indices,
                detection_indices)

            return cost_matrix

gated_metric函数中得到了外观特征代价矩阵,并且得到了运动特征的马氏距离门控矩阵,对代价矩阵进行了第一次的门控。
在这里插入图片描述
这里的distance_metric就是我们刚才提到的gated_metric在这里的调用,然后红框内的第二行就是使用最大余弦相似度进行第二次的门控,这样一来,关于卡尔曼状态的门控和外观特征的门控我们就都用上了。

最后说一下我对公式5的理解,我一开始以为的是作者想每次都把这两者给算出来然后按照一定的权重进行相加得到代价矩阵,结果在代码中找了很久并没有发现这一个操作。然后我才发现,也许这里的lambda不是1就是0,也就是说外观的代价矩阵还是外观的,在这一阶段我们利用外观代价矩阵进行匹配,在另一个阶段我们就会利用运动代价矩阵进行匹配。因此在级联匹配之后,还有一个利用iou的运动代价矩阵来对级联匹配中还没有匹配成功的目标进行二次匹配。也就是上文中我说的相辅相成的功能。 如有理解不对的地方,还请大家多多指出~~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MetaGPT实现多动作Agent

异步编程学习链接 智能体 LLM观察思考行动记忆 多智能体 智能体环境SOP评审路由订阅经济 教程地址 多动作的agent的本质是react,这包括了think(考虑接下来该采取啥动作)act(采取行动) 在MetaGPT的examples/write_…

重学SpringBoot3-Spring Retry实践

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式3.1 注解方式基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听…

E. Counting Arrays

题意:给定一个长度为n,要求乘积为m,其中组成m的数要求是整数 思路:首先有个很显然的想法:设表示前i个点乘积为j的最小值。因为询问数很多,所以必须离线把所有的东西都处理出来。 转移:&#x…

Leetcode 生命游戏

以下是上述Java代码的算法思想及其逻辑的中文解释: 算法思想 这段代码实现了LeetCode第289题“生命游戏”的解决方案。核心思想是: 利用原地修改的方式(in-place)存储下一状态的变化: 通过引入额外的状态值&#xff0…

文件管理 IV(文件系统)

一、文件系统结构 文件系统(File system)提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。文件系统有两个不同的设计问题:第一个问题是,定义文件系统的用户接口,它涉及定义文件及其属性、所允许的…

单神经元 PID 解耦控制

单神经元 PID 解耦控制是一种将单神经元自适应控制与解耦控制相结合的方法,适用于多输入多输出(MIMO)系统。其核心是利用单神经元的自适应能力实现 PID 参数在线调整,同时通过解耦策略减少变量之间的相互影响,提高控制…

【青牛科技】电流模式PWM控制器系列--D4870

概述: D4870是用于开关电源的电流模式PWM(PWM)控制器系列产品。 该电路待机功耗低,启动电流低。在待机模式下,电路进入间歇工作模式,从而有效地降低电路的待机功耗。 电路的开关频率为 65KHz,抖动的振荡频率&…

【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测

简介:介绍 TM-16多线激光雷达 在8210A载板,TX2核心模块环境(Ubuntu18.04)下测试ROS驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX2里已经安装了ROS版本:Melodic。 大家好,…

计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)

博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

在 macOS 和 Linux 中,波浪号 `~`的区别

文章目录 1、在 macOS 和 Linux 中,波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中,波浪号 ~ 在 macO…

【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器

1.实验目的 通过实验课程与理论课的学习深入理解掌握的触发器的原理、创建、修改、删除、基本的使用方法、主要用途,并且可以在练习的基础上,熟练使用触发器来进行数据库的应用程序的设计;深入学习深刻理解与触发器相关的T-SQL语句的编写的基…

小程序24-滚动效果:scroll-view组件详解

在微信小程序中如果想实现内容滚动,需要使用 scroll-view 组件 scroll-view:可滚动视图区域,适用于需要滚动展示内容的场景,用户可以通过手指滑动或者点击滚动条滚动内容。 scroll-x允许横向滚动scroll-y允许纵向滚动 实现横向…

Leetcode 分发糖果

这段代码的算法思想是 贪心算法,通过两次遍历,分别从左到右、从右到左调整糖果分配,以满足题目中相邻评分较高的孩子必须获得更多糖果的要求,并最终计算出最少需要分配的糖果总数。 以下是代码的详细思想与执行过程: …

39页PDF | 毕马威_数据资产运营白皮书(限免下载)

一、前言 《毕马威数据资产运营白皮书》探讨了数据作为新型生产要素在企业数智化转型中的重要性,提出了数据资产运营的“三要素”(组织与意识、流程与规范、平台与工具)和“四重奏”(数据资产盘点、评估、治理、共享)…

【Redis_Day5】String类型

【Redis_Day5】String类型 String操作String的命令set和get:设置、获取键值对mset和mget:批量设置、获取键值对setnx/setex/psetexincr和incrby:对字符串进行加操作decr/decrby:对字符串进行减操作incrbyfloat:浮点数加…

linux安装mysql57——笔记

rpm -qa | grep mysql有东西就rpm -e 文件名 下载 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm安装 yum -y install mysql57-community-release-el7-10.noarch.rpm安装 yum -y install mysql-community-server如果出现Error: GPG c…

基于Java Springboot高校会议室预订管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

基于 NCD 与优化函数结合的非线性优化 PID 控制

基于 NCD 与优化函数结合的非线性优化 PID 控制 1. 引言 NCD(Normalized Coprime Factorization Distance)优化是一种用于非线性系统的先进控制方法。通过将 NCD 指标与优化算法结合,可以在动态调整控制参数的同时优化控制器性能。此方法特别…

数据库表设计范式

华子目录 MYSQL库表设计:范式第一范式(1NF)第二范式(2NF)第三范式(3NF)三范式小结巴斯-科德范式(BCNF)第四范式(4NF)第五范式(5NF&…

中国省级新质生产力发展指数数据(任宇新版本)2010-2023年

一、测算方式:参考C刊《财经理论与实践》任宇新(2024)老师的研究,新质生产力以劳动者劳动资料劳动对象及其优化组合的质变为 基本内涵,借 鉴 王 珏 和 王 荣 基 的 做 法构建新质生产力发展水平评价指标体系如下所示&a…