当前位置: 首页 > 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也可以作为一门后端语言,写在后端(服务端&#…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

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

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

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...