DeepSort:基于检测的目标跟踪的经典

本文来自公众号“AI大道理”


DeepSORT在SORT的基础上引入了深度学习的特征表示和更强大的目标关联方式,有效地减少了身份切换的数量,缓解了重识别问题。

1、DeepSORT简介

DeepSORT的主要思想是将目标检测和目标跟踪两个任务相结合。

首先使用目标检测算法(Faster R-CNN等)在每一帧中检测出目标物体的位置和边界框。然后,通过深度学习模型(如CNN)提取目标的特征表示,将每个目标与先前帧中已跟踪的目标进行匹配。

匹配过程中会考虑目标的特征相似度、运动一致性等因素,以确定目标的身份和轨迹。

DeepSORT的关键贡献之一是使用了一个强大的外观特征描述符,可以准确地区分不同目标之间的相似度。

DeepSORT还通过处理目标的消失和重新出现等复杂情况,实现了对长期跟踪的支持。

主要技术特点:

  • 级联匹配

  • ReID 网络

  • 马氏距离

  • 余弦距离

2、级联匹配

原因:

当一个目标长时间被遮挡之后,kalman滤波预测的不确定性就会大大增加,状态空间内的可观察性就会大大降低。

假如此时两个追踪器竞争同一个检测结果的匹配权,往往遮挡时间较长的那条轨迹的马氏距离更小,使得检测结果更可能和遮挡时间较长的那条轨迹相关联,这种不理想的效果往往会破坏追踪的持续性。

这么理解吧,假设本来协方差矩阵是一个正态分布,那么连续的预测不更新就会导致这个正态分布的方差越来越大,那么离均值欧氏距离远的点可能和之前分布中离得较近的点获得同样的马氏距离值。所以,作者使用了级联匹配来对更加频繁出现的目标赋予优先权。

匹配:

为什么叫级联匹配,主要是它的匹配过程是一个循环。

即从missing age=0的轨迹,每一帧都匹配上,没有丢失过的轨迹到missing age=30的轨迹,丢失轨迹的最大时间30帧的轨迹,挨个的和检测结果进行匹配。

也就是说,对于没有丢失过的轨迹赋予优先匹配的权利,而丢失的最久的轨迹最后匹配。

这里丢失30帧了还给机会匹配,就是对遮挡目标的再跟踪。

级联匹配的距离度量是马氏距离和余弦距离的融合,设置了两个距离的阈值,先过滤一遍。

然后利用这个融合的距离进行匈牙利算法的匹配,匹配是对检测框和预测框的匹配。

而且匹配有优先级的,那些历史上一直有匹配上的轨迹优先匹配,而历史上已经已经很久没有匹配上的轨迹则最后匹配。

也就是说遮挡的可能性比较小,大部分没有匹配上的轨迹可能就是目标消失了。

匹配流程图:

(蓝字只对蓝线有效)

情况1:确定的轨迹,一级匹配成功

流程:

(1)轨迹(上一时刻的检测框)经过kalman滤波预测后,会对当前帧预测出一组检测框。

(2)目标检测算法对当前帧进行目标检测,产生检测框。

(3)对于确定的轨迹来说与目标检测的检测框进行级联匹配,也就是利用马氏距离和图像特征相似度余弦距离进行匈牙利算法的数据关联。

(4)轨迹(上一时刻的检测框)成功与检测框匹配。

(5)进行卡尔曼滤波的融合,是检测框与预测框的融合,融合完后更新到轨迹中。

情况2:确定的轨迹,一级匹配失败,二级匹配成功

匹配失败分为轨迹匹配失败和检测框匹配失败两种。

轨迹匹配失败:

有些轨迹没有检测框与之匹配,原因是检测可能发生了漏检,某时刻,预测的轨迹tracks还在,但是检测器没有检测到与之对应的目标;也可能是这个目标消失不见了,或者被遮挡了,没有检测框了。

检测框匹配失败:

有些检测框匹配不上轨迹,原因可能是某一时刻有一个物体是新进入的镜头,就会发生检测框匹配不到tracks的情况,因为这个物体是新来的,在这之前并没有它的轨迹;也可能是物体长时间被遮挡后的检测,导致检测到的物体没有可以与之匹配的轨迹(长时间遮挡超过阈值轨迹被删除)。

流程:

(1)对于确定的轨迹来说与目标检测的检测框进行级联匹配,也就是利用马氏距离和图像特征相似度余弦距离进行匈牙利算法的数据关联。

(2)轨迹没有与检测框匹配,则对这些轨迹进行与检测框的IOU匹配,匹配成功。

(IOU匹配可以有效匹配静态场景几何体的部分遮挡的情况,提高匹配成功率。这里相当于进行多次匹配,第一次匹配成功那就成功,匹配不上再给一次机会,进行IOU匹配,这次匹配上也算匹配上。)

(3)检测框没有与轨迹匹配上,则对这些检测框进行与轨迹的IOU匹配,匹配成功。

(4)进行卡尔曼滤波的融合,是检测框与预测框的融合,融合完后更新到轨迹中。

情况3:确定的轨迹,一级匹配失败,二级匹配也失败。

流程:

(1)对于二级匹配失败的检测框,建立一个新的不确定的轨迹。因为匹配失败可能是视野中出现新目标了,也可能就是检测器的误检测,对这个检测框要不要建立真实轨迹是不一定的,也就是unconfirmed轨迹。

(2)这个新不确定的轨迹要经过一个考验才能成为真实轨迹,那就是要连续三帧都要有检测框对其进行成功匹配,那就确定是一个真实轨迹了。

(3)对于考核期的轨迹(3帧考核,unconfirmed轨迹),直接进行IOU匹配,匹配成功,计数加1,连续三次匹配成功,则变更为确定的轨迹。确认的轨迹接下来就会保存外观特征100帧。考察期间的轨迹在3帧内匹配失败,则直接删除,判定为偶然的误报。

(4)对于再次匹配失败的轨迹来说,如果这个轨迹是待确定的轨迹,则删除,如果是确定的轨迹,则判断接下来几帧(max age帧,30帧)是否还能匹配上,超过30帧了还不能匹配上,放弃了,这个轨迹终止了。可能是真的终止了,也可能是长时间遮挡,这个就是这个阈值max age的容忍程度了,遮挡太久就没办法了,只能认为是新目标了,也就是跟丢了。

如果在30帧内,那继续给你机会进行IOU匹配,这时候即使匹配成功了,也要进行三帧考察。

3、ReID 网络

DeepSORT中采用了一个简单的CNN来提取被检测物体的外观特征,在每次检测追踪后,进行一次物体外观特征的提取并保存,最多保存100帧。

后面每执行一步时,都要执行一次当前帧被检测物体外观特征与之前存储的外观特征的相似度计算,这个相似度将作为一个重要的判别依据。

Deep Sort 采用了经过大规模人员重新识别数据集训练的 Cosine 深度特征网络,该数据集包含 1,261 位行人的 1,100,000 多张图像,使其非常适合在人员跟踪环境中进行深度度量学习。

Cosine 深度特征网络使用了宽残差网络,该网络具有 2 个卷积层和 6 个残差块,L2 归一化层能够计算不同行人间的相似性,以与余弦外观度量兼容。通过计算行人间的余弦距离,余弦距离越小,两行人图像越相似。Cosine 深度特征网络结构如下图所示。

使用 Cosine 深度特征网络参数,将每个检测框内图片压缩为最能表征图片特异信息的128维向量,并归一化后得到外观描述向量。

4、马氏距离

DeepSort使用马氏距离表示检测框到轨迹的距离,马氏距离就是“加强版的欧氏距离”。

马氏距离规避了欧氏距离中对于数据特征方差不同的风险,在计算中添加了协方差矩阵,其目的就是进行方差归一化,从而使所谓的“距离”更加符合数据特征以及实际意义。

马氏距离是旋转变换缩放后的欧氏距离,它将样本的协方差矩阵纳入距离度量计算,相当于对欧式距离的修正。

马氏距离完成正交,解决了特征间相关性的问题,内含标准化,解决了特征间尺度不一致的问题。

马氏距离可用于判断点到某个分布的距离。

马氏距离是表示数据的协方差距离,计算两个未知样本集的相似度的方法。

公式:

马氏距离是旋转变换缩放后的欧氏距离,所以马氏距离的计算公式可以由欧式距离推导而来。

如果协方差矩阵为单位矩阵,马氏距离就简化为欧式距离。

欧式距离两个分量的权值都是1,而马氏距离可以是其他值。

等距线:  

旋转椭圆

马氏距离,将变量按照主成分进行旋转,让维度间相互独立,然后进行标准化,让维度同分布。

5、余弦距离

由于马氏距离在遮挡后的度量有些问题,因此DeepSort加入了图像特征相似度度来进行综合判断。

余弦距离则是一种相似度度量方式。

马氏距离是针对于位置进行区分,而余弦距离则是针对于方向和特征。

余弦相似度是一种常用的衡量向量之间相似度的方法,它可以用于计算两个向量之间的夹角的余弦值。

在图像相似度计算中,可以将图像转换为特征向量,在DeepSort中就是使用了ReID网络,然后使用余弦相似度来比较这些特征向量的相似程度。

余弦相似度的计算公式如下:

其中,A和B分别表示两个向量,·表示向量的点积,||A||和||B||表示向量的范数(即向量的长度)。

余弦相似度的取值范围在 -1 到 1 之间,值越接近 1 表示两个向量越相似,越接近 -1 表示两个向量越不相似,接近 0 表示两个向量之间没有明显的相似性或差异。

在图像相似度计算中,可以将图像转换为特征向量(如使用卷积神经网络提取的特征向量),然后计算这些特征向量之间的余弦相似度来衡量图像的相似性。

6、总结

DeepSort着重要解决的一个问题就是遮挡后的ID切换的问题,在遮挡一段时间后不管是IOU距离还是马氏距离,其实效果都不是很理想。

因此要想建立这种远程联系就要进行特征比对。

这个很像孪生网络的思想,建立一个历史目标库,检测框与目标库一一比对,相似度高的就是同一个目标,进行轨迹关联。

因此这里的ReID网络自然也可以用孪生网络来做。

孪生网络的应用有两种思路,一种就是当做ReID网络来用,下一帧使用检测器检测出来,然后对框内的目标进行相似度比对,这是判别式的思想。

另一种是当做生成式来用,对上一帧的检测框里面的目标进行特征提取,然后下一帧就不用检测器了,而是直接去所搜区域,逐一进行相似度比对找到目标。

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

—————————————————————

 

—————————————————————

投稿吧   | 留言吧

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

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

相关文章

Docker环境安装elasticsearch和kibana

一、安装elasticsearch 创建es-network,让es、kibana在同一个网段: docker network create --driverbridge --subnet192.168.1.10/24 es-network运行elasticsearch docker run -d \ --name elasticsearch \ # 容器名 --hostname elasticsearch # 主机…

综述:计算机视觉中的图像分割

一、说明 这篇文章是关于图像分割的探索,这是解决计算机视觉问题(如对象检测、对象识别、图像编辑、医学图像分析、自动驾驶汽车等)的重要步骤之一。让我们从介绍开始。 二、图像分割介绍 图像分割是计算机视觉中的一项基本任务,涉…

Maven基础之仓库、命令、插件机制

文章目录 Maven 仓库中央仓库和本地仓库中央仓库本地仓库 Maven 命令generate 命令compile 命令clean 命令test 命令package 命令install 命令 Maven 插件机制官方插件:Compile 插件Tomcat 7 插件 Maven 仓库 中央仓库和本地仓库 [✎] 简单一点说 中央仓库是一个网…

k8s基本概念、k8s对象、三个命令玩转所有的yaml写法、给vscode安装插件、kubectl和kubelet及自动补全

文章目录 1、K8S基本概念2、kubernetes Objects(k8s对象)2.1、定义2.2、对象的spec和status2.3、如何写任意资源的yaml(以Pod为例)2.4、pod的yaml文件2.5、k8s对象yaml的结构2.6、管理k8s对象2.7、对象名称2.8、名称空间2.9、标签…

图神经网络 day2 图的分类

图神经网络基础算法 1 GCN2 GraphSAGE2.1 采样:采样固定长度的邻居2.2 聚合2.3 GraphSAGE_minibatch2.4 GraphSAGE_embedding 3 GAT4. 图网络的分类4.1 递归图神经网络 RGNN4.2 图卷积神经网络GCN4.3 图注意力网络 GAT4.4 图自动编码 GAE4.5 图时空网络 GSTN4.6 图生…

机器人的运动范围

声明 该系列文章仅仅展示个人的解题思路和分析过程,并非一定是优质题解,重要的是通过分析和解决问题能让我们逐渐熟练和成长,从新手到大佬离不开一个磨练的过程,加油! 原题链接 机器人的运动范围https://leetcode.c…

机器学习之数据集

目录 1、简介 2、可用数据集 3、scikit-learn数据集API 3.1、小数据集 3.2、大数据集 4、数据集使用 ⭐所属专栏:人工智能 文中提到的代码如有需要可以私信我发给你😊 1、简介 当谈论数据集时,通常是指在机器学习和数据分析中使用的一组…

SSM——用户、角色、权限操作

1. 数据库与表结构 1.1 用户表 1.1.1 用户表信息描述 users 1.1.2 sql语句 CREATE TABLE users( id varchar2(32) default SYS_GUID() PRIMARY KEY, email VARCHAR2(50) UNIQUE NOT NULL, username VARCHAR2(50), PASSWORD VARCHAR2(50), phoneNum VARCHAR2(20), STATUS INT…

PHP之Base64+php://filter绕过、disabled_function绕过

目录 一、Base64php://filter绕过 1.思路分析 2.实践验证 二、disabled_function绕过 一、Base64php://filter绕过 上课讲了这样一道题&#xff0c;一起来看下(以下代码适用于PHP7.x及以上&#xff0c;5的版本会报错) <?php function fun($var): bool{$blacklist …

大文本的全文检索方案附件索引

一、简介 Elasticsearch附件索引是需要插件支持的功能&#xff0c;它允许将文件内容附加到Elasticsearch文档中&#xff0c;并对这些附件内容进行全文检索。本文将带你了解索引附件的原理和使用方法&#xff0c;并通过一个实际示例来说明如何在Elasticsearch中索引和检索文件附…

API开放!将语聚AI智能助手接入到您的自有系统中

概述 语聚AI基于集简云强大的应用软件“连接器”能力&#xff0c;提供了工具延展、知识延展、模型延展和嵌入集成等一系列功能&#xff0c;为用户带来了更加强大和智能的AI新体验。 我们深知&#xff0c;每家企业对于AI应用都有自己独特的需求和应用场景&#xff0c;只有通过开…

STM32开关输入控制220V灯泡亮灭源代码(附带PROTEUSd电路图)

//main.c文件 /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body************************************************************************…

安全 1自测

常见对称加密算法&#xff1a; DES&#xff08;Data Encryption Standard&#xff09;&#xff1a;数据加密标准&#xff0c;速度较快&#xff0c;适用于加密大量数据的场合&#xff1b; 3DES&#xff08;Triple DES&#xff09;&#xff1a;是基于DES&#xff0c;对一块数据用…

LabVIEW调用DLL传递结构体参数

LabVIEW 中调用动态库接口时&#xff0c;如果是值传递的结构体&#xff0c;可以根据字段拆解为多个参数&#xff1b;如果参数为结构体指针&#xff0c;可用簇&#xff08;Cluster&#xff09;来匹配&#xff0c;其内存连续相当于单字节对齐。 1.值传递 接口定义&#xff1a; …

零基础如何学习 Web 安全,如何让普通人快速入门网络安全?

前言 网络安全现在是朝阳行业&#xff0c;缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 【一一帮助安全学习&#xff08;网络安全面试题学习路线视频教程工具&#xff09;一一】 初级的现在有很多的运维人员转网络安全&#xff0c;初级…

22、touchGFX学习Model-View-Presenter设计模式

touchGFX采用MVP架构&#xff0c;如下所示&#xff1a; 本文界面如下所示&#xff1a; 本文将实现两个操作&#xff1a; 1、触摸屏点击开关按键实现打印开关显示信息&#xff0c;模拟开关灯效果 2、板载案按键控制触摸屏LED灯的显示和隐藏 一、触摸屏点击开关按键实现打印开…

Jenkins+Jmeter集成自动化接口测试并通过邮件发送测试报告

一、Jenkins的配置 1、新增一个自由风格的项目 2、构建->选择Excute Windows batch command&#xff08;因为我是在本地尝试的&#xff0c;因此选择的windows&#xff09; 3、输入步骤&#xff1a; 1. 由于不能拥有相同的jtl文件&#xff0c;因此在每次构建前都需要删除jtl…

「UG/NX」Block UI 曲线收集器CurveCollector

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

3D- vista:预训练的3D视觉和文本对齐Transformer

论文&#xff1a;https://arxiv.org/abs/2308.04352 代码: GitHub - 3d-vista/3D-VisTA: Official implementation of ICCV 2023 paper "3D-VisTA: Pre-trained Transformer for 3D Vision and Text Alignment" 摘要 三维视觉语言基础(3D- vl)是一个新兴领域&…

【手写数据库toadb 造不一样的轮子】行列混合存储模型 就是为大模型分析准备的

行列混合存储模型 ​专栏内容: postgresql内核源码分析手写数据库toadb并发编程个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 概述 混合模型的由来 我们虽然造轮子,但是也会造完全一样的轮子。所以toadb在选择存储模型时,行存模型已经成熟…
最新文章