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

【论文解读】Hybrid-SORT: Weak Cues Matter for Online Multi-Object Tracking

因为Hybrid-SORT的baseline是基于OCSORT进行改进的,在这之前建议先了解byteTrack和【】的相关知识

1.介绍

1.1 基本框架

多目标跟踪(MOT)将问题分为两个子任务。第一个任务是检测每个帧中的对象。第二个任务是将它们在不同的框架中联系起来。关联任务主要通过显式或隐式地利用强线索来解决,包括空间和外观信息。

1.2 当前方法的局限性

当两个物体在当前帧中高度重叠时,检测和估计轨迹位置之间的交集(IoU)会变得模糊,两个物体的外观特征都被前景特征所主导。

2. Hybrid-SORT

修改了当前最先进的SORT-like算法OCSORT作为我们的强基线。首先,对OC-SORT中的速度方向建模进行修正,即以观测为中心的动量(OCM),将盒中心扩展到四个盒角,将固定的时间间隔扩展到多个时间间隔;其次,我们在ByteTrack之后加入了一个额外的低置信度检测关联阶段。

2.1 弱条件建模

2.1.1 Tracklet 置信度建模

 增加了两个额外的状态:轨迹置信度c及其速度分量\dot{c}

如下图所示,Kalman Filter在试图估计置信状态的突然变化时表现出明显的滞后,且置信度状态的变化趋势呈现出明显方向性

 基于以上特点,因此本文使用基于轨迹历史的简单线性预测来估计轨迹置信度

 置信度代价计算为根据式4估计的轨迹置信度\widehat{c}_{trk}与检测置信度c_{det}之间的绝对差值

2.1.2 Height Modulated IoU(HMIOU)

引入height状态有助于提高association :

(1)物体的高度在一定程度上反映了深度信息,使得高度状态成为区分高度重叠对象的有效线索。

(2)其次,高度状态对不同姿态具有较强的鲁棒性,是一种准确估计的状态,是物体的高质量表征。

公式化表述为:

HIoU代表高度状态,这是一个弱线索,而IoU代表空间信息,这是一个强线索,我们使用HIoU来调制IoU,实现对遮挡或聚类对象的增强识别

2.2 Hybrid-SORT

2.2.1 Robust OCM

2.2.1.1 原始OCM存在的局限性

 原始OCM的建模容易受到固定时间间隔和稀疏状态(即只有目标中心)引起的噪声的影响。

2.2.1.2 Robust OCM

  • 首先,将3帧的固定时间间隔扩展为1 ~ 3的多个时间间隔的叠加;
  • 其次,我们用物体的四个角代替它的中心点来计算速度方向。

避免由于姿态的突然变化,轨迹和轨迹到检测中心的速度方向可能完全相反,从而导致匹配错误

 

2.2.2 外观建模

 首先检测对象,然后将结果裁剪的补丁提供给ReID模型。我们使用指数移动平均(EMA)对轨迹图外观信息建模,并利用余弦距离作为度量来计算轨迹图外观特征与检测外观特征之间的相似度。

2.2.3 算法架构

关联阶段主要包括三个阶段:第一阶段是高置信度对象的关联阶段,第二阶段是低置信度对象的关联阶段(ByteTrack中的BYTE),第三阶段是用最后一次检测恢复丢失的轨迹(OC-SORT中的OCR)。

3.代码

3.1 卡尔曼滤波器KalmanBoxTracker建模

3.1.1 引入轨迹置信度c及其速度分量\dot{c}·

        if not orig:from .kalmanfilter_score_new import KalmanFilterNew_score_new as KalmanFilter_score_newself.kf = KalmanFilter_score_new(dim_x=9, dim_z=5)

3.1.2 轨迹置信度的预测

简单线性预测来估计轨迹置信度

        if not self.confidence_pre:return self.history[-1], np.clip(self.kf.x[3], self.args.track_thresh, 1.0),np.clip(self.confidence, 0.1, self.args.track_thresh)else:return self.history[-1], np.clip(self.kf.x[3], self.args.track_thresh, 1.0), np.clip(self.confidence - (self.confidence_pre - self.confidence), 0.1, self.args.track_thresh)

返回值分别是 分别是九位预测量,置信度预测值,置信度的速度分量\dot{c}·

3.2 Robust OCM

3.2.1 四个角代替它的中心点

 lt, rt, lb, rb : 代表bbox四个角点的速度

    Y1, X1 = speed_direction_batch_lt(detections, previous_obs)Y2, X2 = speed_direction_batch_rt(detections, previous_obs)Y3, X3 = speed_direction_batch_lb(detections, previous_obs)Y4, X4 = speed_direction_batch_rb(detections, previous_obs)cost_lt = cost_vel(Y1, X1, trackers, lt, detections, previous_obs, vdc_weight)cost_rt = cost_vel(Y2, X2, trackers, rt, detections, previous_obs, vdc_weight)cost_lb = cost_vel(Y3, X3, trackers, lb, detections, previous_obs, vdc_weight)cost_rb = cost_vel(Y4, X4, trackers, rb, detections, previous_obs, vdc_weight)angle_diff_cost = cost_lt + cost_rt + cost_lb + cost_rb

speed_direction_batch_XX用来计算四个角点的速度

cost_vel 用来计算某个交点速度的cost

3.3 Height Modulated IoU(HMIOU)

def hmiou(bboxes1, bboxes2):"""Height_Modulated_IoU"""bboxes2 = np.expand_dims(bboxes2, 0)bboxes1 = np.expand_dims(bboxes1, 1)yy11 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])yy12 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])yy21 = np.minimum(bboxes1[..., 1], bboxes2[..., 1])yy22 = np.maximum(bboxes1[..., 3], bboxes2[..., 3])o = (yy12 - yy11) / (yy22 - yy21)xx1 = np.maximum(bboxes1[..., 0], bboxes2[..., 0])yy1 = np.maximum(bboxes1[..., 1], bboxes2[..., 1])xx2 = np.minimum(bboxes1[..., 2], bboxes2[..., 2])yy2 = np.minimum(bboxes1[..., 3], bboxes2[..., 3])w = np.maximum(0., xx2 - xx1)h = np.maximum(0., yy2 - yy1)wh = w * ho *= wh / ((bboxes1[..., 2] - bboxes1[..., 0]) * (bboxes1[..., 3] - bboxes1[..., 1])+ (bboxes2[..., 2] - bboxes2[..., 0]) * (bboxes2[..., 3] - bboxes2[..., 1]) - wh)return (o)

相关文章:

【论文解读】Hybrid-SORT: Weak Cues Matter for Online Multi-Object Tracking

因为Hybrid-SORT的baseline是基于OCSORT进行改进的,在这之前建议先了解byteTrack和【】的相关知识 1.介绍 1.1 基本框架 多目标跟踪(MOT)将问题分为两个子任务。第一个任务是检测每个帧中的对象。第二个任务是将它们在不同的框架中联系起来。关联任务主要通过显式…...

Microsoft 图像BERT,基于大规模图文数据的跨模态预训练

视觉语言任务是当今自然语言处理(NLP)和计算机视觉领域的热门话题。大多数现有方法都基于预训练模型,这些模型使用后期融合方法融合下游任务的多模态输入。然而,这种方法通常需要在训练期间进行特定的数据注释,并且对于…...

vue3+elementUI-plus实现select下拉框的虚拟滚动

网上查了几个方案,要不就是不兼容,要不就是不支持vue3, 最终找到一个合适的,并且已上线使用,需要修改一下样式: 代码如下: main.js里引用 import vue3-virtual-scroller/dist/vue3-virtual-scroller.css; …...

学C的第三十四天【程序环境和预处理】

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 学C的第三十三天【C语言文件操作】_高高的胖子的博客-CSDN博客 1 . 程序的翻译环境和执行环境 在ANSI C(C语言标准)的任何一种实现中,存在两个不同的环境。 &#xff0…...

微服务中间件--Ribbon负载均衡

Ribbon负载均衡 a.Ribbon负载均衡原理b.Ribbon负载均衡策略 (IRule)c.Ribbon的饥饿加载 a.Ribbon负载均衡原理 1.发起请求http://userservice/user/1,Ribbon拦截该请求 2.Ribbon通过EurekaServer拉取userservice 3.EurekaServer返回服务列表给Ribbon做负载均衡 …...

字符设备驱动实例(ADC驱动)

四、ADC驱动 ADC是将模拟信号转换为数字信号的转换器,在 Exynos4412 上有一个ADC,其主要的特性如下。 (1)量程为0~1.8V。 (2)精度有 10bit 和 12bit 可选。 (3)采样时钟最高为5MHz,转换速率最高为1MSPS (4)具有四路模拟输入,同一时…...

python基础5——正则、数据库操作

文章目录 一、数据库编程1.1 connect()函数1.2 命令参数1.3 常用语句 二、正则表达式2.1 匹配方式2.2 字符匹配2.3 数量匹配2.4 边界匹配2.5 分组匹配2.6 贪婪模式&非贪婪模式2.7 标志位 一、数据库编程 可以使用python脚本对数据库进行操作,比如获取数据库数据…...

SpringAOP原理:手写动态代理实现

0、基础知识 AOP我们知道,是在不修改源代码的情况下,为代码添加一些新功能的技术。通过动态代理,可以在不修改原始类代码的前提下,对方法进行拦截和增强。 动态代理常用于在不改变原有业务逻辑的情况下,对方法…...

【旅游度假】Axure酒店在线预订APP原型图 旅游度假子模块原型模板

作品概况 页面数量:共 10 页 兼容软件:Axure RP 9/10,不支持低版本 应用领域:旅游度假,生活服务 作品申明:页面内容仅用于功能演示,无实际功能 作品特色 本作品为「酒店在线预订」的移动端…...

Android JNI系列详解之CMake和ndk-build编译工具介绍

一、前提 CMake和ndk-build只是编译工具,本次主要介绍ndk-build和CMake的区别,下节课介绍他们的使用。 二、CMake工具介绍 CMake:cross platform make,是跨平台的编译工具 CMake是在AndroidStudio2.2之后引入(目前默认…...

【Linux取经路】解析环境变量,提升系统控制力

文章目录 一、进程优先级1.1 什么是优先级?1.2 为什么会有优先级?1.3 小结 二、Linux系统中的优先级2.1 查看进程优先级2.2 PRI and NI2.3 修改进程优先级2.4 进程优先级的实现原理2.5 一些名词解释 三、环境变量3.1 基本概念3.2 PATH:Linux系…...

TCP编程流程(补充)

目录 1、listen: 2、listen、tcp三次握手 3、 发送缓冲区和接收缓冲区: 4、tcp编程启用多线程 1、listen: 执行listen会创建一个监听队列 listen(sockfd,5) 2、listen、tcp三次握手 三次握手 3、 发送缓冲区和接收缓冲区:…...

每天一道leetcode:433. 最小基因变化(图论中等广度优先遍历)

今日份题目: 基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 A、C、G 和 T 之一。 假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化。 例如,&quo…...

【C++】做一个飞机空战小游戏(十)——子弹击落炮弹、炮弹与飞机相撞

[导读]本系列博文内容链接如下: 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…...

去除UI切图边缘上多余的线条

最近接到UI切图,放进项目,显示边缘有多余线条,影响UI美观。开始以为切图没切好,实则不是。如图: ->解决: 将该图片资源WrapMode改为Clamp...

Spring高手之路13——BeanFactoryPostProcessor与BeanDefinitionRegistryPostProcessor解析

文章目录 1. BeanFactoryPostProcessor 概览1.1 解读 BeanFactoryPostProcessor1.2. 如何使用 BeanFactoryPostProcessor 2. BeanDefinitionRegistryPostProcessor 深入探究2.1 解读 BeanDefinitionRegistryPostProcessor2.2 BeanDefinitionRegistryPostProcessor 的执行时机2.…...

【LeetCode动态规划】详解买卖票I~IV,经典dp题型买

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。…...

【深入探究人工智能】:常见机器学习算法总结

文章目录 1、前言1.1 机器学习算法的两步骤1.2 机器学习算法分类 2、逻辑回归算法2.1 逻辑函数2.2 逻辑回归可以用于多类分类2.3 逻辑回归中的系数 3、线性回归算法3.1 线性回归的假设3.2 确定线性回归模型的拟合优度3.3线性回归中的异常值处理 4、支持向量机(SVM&a…...

设计模式之解释器模式详解及实例

1、解释器设计模式概述: 解释器模式(Interpreter Pattern)是一种设计模式,它主要用于描述如何构建一个解释器以解释特定的语言或表达式。该模式定义了一个文法表示和解释器的类结构,用于解释符合该文法规则的语句。解…...

Nodejs沙箱逃逸--总结

一、沙箱逃逸概念 JavaScript和Nodejs之间有什么区别:JavaScript用在浏览器前端,后来将Chrome中的v8引擎单独拿出来为JavaScript单独开发了一个运行环境,因此JavaScript也可以作为一门后端语言,写在后端(服务端&#…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…...

机器学习复习3--模型评估

误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异称为&#xff1a;误差&#xff08;error&#xff09;。 误差定义&#xff1a; ①在训练集上的误差称为训练误差&#xff08;training error&#xff09;或经验误差&#xff08;empirical error&#x…...

汇编语言学习(三)——DoxBox中debug的使用

目录 一、安装DoxBox&#xff0c;并下载汇编工具&#xff08;MASM文件&#xff09; 二、debug是什么 三、debug中的命令 一、安装DoxBox&#xff0c;并下载汇编工具&#xff08;MASM文件&#xff09; 链接&#xff1a; https://pan.baidu.com/s/1IbyJj-JIkl_oMOJmkKiaGQ?pw…...

MySQL 数据库深度剖析:事务、SQL 优化、索引与 Buffer Pool

在当今数据驱动的时代&#xff0c;数据库作为数据存储与管理的核心&#xff0c;其性能与可靠性至关重要。MySQL 作为一款广泛使用的开源数据库&#xff0c;在众多应用场景中发挥着关键作用。在这篇博客中&#xff0c;我将围绕 MySQL 数据库的核心知识展开&#xff0c;涵盖事务及…...