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

[论文阅读笔记19]SiamMOT: Siamese Multi-Object Tracking


这是CVPR2021的一篇文章, 是利用SOT的一些思想来进行MOT的运动估计.
文章地址: 文章

代码地址: 代码


0. 摘要

本文提出了一个孪生(Siamese)式的MOT网络, 该网络用来估计帧间目标的运动. 为了探究运动估计对多目标跟踪的影响, 本文提出了两种运动建模方式: 显式和隐式. 本文在一些数据集上取得了良好的结果.

1. 整体思路

这篇文章是用SOT的思想做MOT的比较好的例子.

整个工作的具体思路是: 利用Siamese网络来更好地预测运动, 而不是Kalman滤波, 相当于用Siamese网络代替了Kalman.

例如, 对于第ttt帧, 我们有第iii个目标的位置RitR_i^tRit, 然后我们扩张搜索区域, 在第t+δt + \deltat+δ帧将RitR_i^tRit的区域扩展, 初步决定搜索区域为Sit+1S_i^{t+1}Sit+1, 如下图橙色框所示. 我们的目的是用Siamese网络更好地从Sit+1S_i^{t+1}Sit+1中估计出目标在下一帧更精确的位置, 进而与检测更好地匹配.

在这里插入图片描述

为此, 我们提取RitR_i^tRit的特征fRitf_{R_i}^tfRitSit+1S_i^{t+1}Sit+1的特征fSit+δf_{S_i}^{t+\delta}fSit+δ, 输入至网络中, 输出缩小的可能的新区域R~it+δ\tilde{R}_{i}^{t+\delta}R~it+δ和该区域中包含目标的可能性viv_ivi, 因此整体的模型建模为:

vi,R~it+δ=T(fRit,fSit+δ,Θ)v_i, \tilde{R}_{i}^{t+\delta} = \mathcal{T}(f_{R_i}^t, f_{S_i}^{t+\delta}, \Theta) vi,R~it+δ=T(fRit,fSit+δ,Θ)

其中Θ\ThetaΘ为网络参数.

上式建模的方式有两种, 一是隐式运动建模, 二是显式运动建模.

1.1 隐式运动建模:

隐式运动建模很简单, 将fRitf_{R_i}^tfRitfSit+δf_{S_i}^{t+\delta}fSit+δ拼接起来输入到MLP, 同时预测置信度和位置. 位置描述的是ttt时刻与t+δt+\deltat+δ时刻的位置差异, 表示为:

mi=[xit+δ−xitxit,yit+δ−yityit,log⁡wit+δwit,log⁡hit+δhit]m_i = [\frac{x_i^{t + \delta} - x_i^t}{x_i^t}, \frac{y_i^{t + \delta} - y_i^t}{y_i^t}, \log{\frac{w_i^{t+\delta}}{w_i^t}}, \log{\frac{h_i^{t+\delta}}{h_i^t}}] mi=[xitxit+δxit,yityit+δyit,logwitwit+δ,loghithit+δ]

因此可以反解出新的位置R~it+δ=[xit+δ,yit+δ,wit+δ,hit+δ]\tilde{R}_{i}^{t+\delta} = [x_i^{t + \delta}, y_i^{t + \delta}, w_i^{t + \delta}, h_i^{t + \delta}]R~it+δ=[xit+δ,yit+δ,wit+δ,hit+δ]

损失函数:

损失函数由两部分组成, 一是目标置信度的focal loss, 二是预测边界框的准确程度. 对于GT框, 我们可以按照mim_imi的式子求出对应的mi∗m_i^*mi , 定义为:

L=lfocal(vi∗,vi)+I(vi∗)lreg(mi,mi∗)L = l_{focal}(v_i^*, v_i)+\mathbb{I}(v_i^*)l_{reg}(m_i, m_i^*) L=lfocal(vi,vi)+I(vi)lreg(mi,mi)

其中上标∗*表示真值, lregl_{reg}lreg表示平滑L1损失.

1.2 显式运动建模

还可以采用更复杂的形式. 采用通道维的互相关操作, 可以通过预测热度图的方式计算像素级的响应图, 有点类似于求解光流. 对于第ttt帧的区域特征fRitf_{R_i}^tfRit和第t+δt+\deltat+δ帧的初步搜索区域特征fSit+δf_{S_i}^{t+\delta}fSit+δ, 计算通道维互相关, 即ri=fRit∗fSit+δr_i = f_{R_i}^t * f_{S_i}^{t+\delta}ri=fRitfSit+δ, 其中∗*表示互相关操作, 这样就得到了两种特征图的相似度.

我们利用得到的rir_iri, 进一步预测像素级置信度的map vvv和位置的map ppp, 如下图所示.

在这里插入图片描述

注意这里位置的map和一些无锚检测器类似, 预测的是offset. 具体地, 预测的是真实的bbox与当前像素四个方向的offset. 为此, 我们可以以像素级的置信度相应map中最大的点为准, 找到位置map中对应的位置, 即可直接求解出预测的位置. 也就是:

R~it+δ=R(pi∗(x,y));vit+δ=vi(x∗,y∗)s.t.(x∗,y∗)=arg⁡max⁡x,y(vi∗ηi)\tilde{R}_i^{t+\delta}=\mathcal{R}(p_i^*(x, y)); ~~~~v_i^{t+\delta} = v_i(x^*, y^*) \\ s.t. ~~~(x^*, y^*) = \arg\max_{x,y}(v_i * \eta_i) R~it+δ=R(pi(x,y));    vit+δ=vi(x,y)s.t.   (x,y)=argx,ymax(viηi)

其中ηi\eta_iηi为:

ηi(x,y)=λC+(1−λ)S(R(p(x,y)),Rit)\eta_i(x, y)= \lambda\mathcal{C}+(1-\lambda)\mathcal{S}(\mathcal{R(p(x,y))},R_i^t) ηi(x,y)=λC+(1λ)S(R(p(x,y)),Rit)

表示的是一个penalty map, 其中C\mathcal{C}C是以过去帧位置RitR_i^tRit的几何中心为中心的cos窗函数, S\mathcal{S}S是预测出的位置和原本位置高宽差异的高斯函数, ηi\eta_iηi的作用是为了防止bbox尺寸的突然变化.

损失函数:

与隐式建模类似, 损失函数也是由置信度损失和bbox位置损失组成, 所不同的是该部分预测的是逐像素map, 因此需要逐像素进行计算. 置信度损失仍为focal loss, 位置损失包括中心点的差异与回归损失, 如下式所示:

L=∑x,ylfocal(vi(x,y),vi∗(x,y))+∑x,yI[vi∗(x,y)=1](w(x,y)⋅lreg(pi(x,y),pi∗(x,y)))L = \sum_{x, y}l_{focal}(v_i(x, y), v_i^*(x, y))+\\ \sum_{x, y}\mathbb{I}[v_i^*(x, y) =1](w(x, y) ·l_{reg}(p_i(x, y), p_i^*(x, y))) L=x,ylfocal(vi(x,y),vi(x,y))+x,yI[vi(x,y)=1](w(x,y)lreg(pi(x,y),pi(x,y)))

w(x,y)w(x, y)w(x,y)就是中心点差异.

1.3 训练和推理

训练是按照端到端的方式训练的, 将Faster RCNN的检测损失与上面的损失结合. 推理也比较普通, 就是利用推理出的R~it+δ\tilde{R}_{i}^{t+\delta}R~it+δ和检测器检测的Rit+δR_{i}^{t+\delta}Rit+δ简单进行匹配即可.

整体流程下图所示:

在这里插入图片描述

2. 评价

这篇是很简单的一个笔记, 在SOT+MOT的方法里, 这篇应该也算简洁的, 创新之处在于隐式建模反推位置那一块, 以及逐像素map的思想也值得学习.

相关文章:

[论文阅读笔记19]SiamMOT: Siamese Multi-Object Tracking

这是CVPR2021的一篇文章, 是利用SOT的一些思想来进行MOT的运动估计. 文章地址: 文章 代码地址: 代码 0. 摘要 本文提出了一个孪生(Siamese)式的MOT网络, 该网络用来估计帧间目标的运动. 为了探究运动估计对多目标跟踪的影响, 本文提出了两种运动建模方式: 显式和隐式. 本文在…...

unix高级编程-fork和execve

fork和vfork vfork是老的实现方法又很多问题 vfork #include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <signal.h> #include <errno.h> #include <sys/stat.…...

Vue3+Ts+Vite开发插件并发布到npm

依赖版本信息如下&#xff1a; "vue": "^3.2.45""typescript": "~4.7.4""vite": "^4.0.0""less": "^4.1.3""terser": "^5.16.4"npm: 8.1.0node: 16.13.0 目标&#xf…...

CAN TP层函数介绍

如果想使用CAN TP层函数,首先需要在网络节点或测试节点配置页面的Componets组件一栏添加osek_tp.dll文件。路径为:C:\Program Files\Vector CANoe 15\Exec32 至于节点的CAPL程序内需不需要引用这个dll文件,无所谓,可写可不写。但是如果是其他dll,必须在CAPL程序中引用。为…...

Spring架构篇--2.5 远程通信基础Select 源码篇--window--Select.open()

前言&#xff1a;在Socket通信中使用Select 来对NIO 进行实现&#xff0c;那么它们的实现方式是怎样的呢&#xff0c;本文从 Selector.open() 进行第一步的分析&#xff1b; Selector.open() &#xff1a; Selector 类&#xff1a; public static Selector open() throws IOEx…...

WEB静态交互展示【数据mock】

文章目录背景需求分析实现过程1.爬取原有项目数据2.将数据引入项目3.打包收工后记背景 接到公司一个【离谱】的需求&#xff0c;要求把已有的项目做一个演示版本&#xff08;静态文件版本&#xff09;&#xff1b;本人觉得前端、后端搞个容器包&#xff0c;一个演示版本不就有…...

(4)C#传智:分支Switch与循环While(第四天)

一、异常捕获 定义&#xff1a;语法无错&#xff0c;程序因某些原因出现的错误&#xff0c;而不能正常运行。 用try-catch进行捕获。哪行代码可能出现异常&#xff0c;你就踹它一脚。 try { 可能会出现异常的代码; ---- …...

Stable-Baselines 3 部分源代码解读 2 on_policy_algorithm.py

Stable-Baselines 3 部分源代码解读 ./common/on_policy_algorithm.py 前言 阅读PPO相关的源码&#xff0c;了解一下标准库是如何建立PPO算法以及各种tricks的&#xff0c;以便于自己的复现。 在Pycharm里面一直跳转&#xff0c;可以看到PPO类是最终继承于基类&#xff0c;也…...

15. Qt中OPenGL的参数传递问题

1. 说明 在OPenGL中&#xff0c;需要使用GLSL语言来编写着色器的函数&#xff0c;在顶点着色器和片段着色器之间需要参数值的传递&#xff0c;且在CPU中的数据也需要传递到顶点着色器中进行使用。本文简单介绍几种参数传递的方式&#xff1a; &#xff08;本文内容仅个人理解&…...

注意,这本2区SCI期刊最快18天录用,还差一步录用只因犯了这个错

发表案例分享&#xff1a; 2区医学综合类SCI&#xff0c;仅18天录用&#xff0c;录用后28天见刊 2023.02.10 | 见刊 2023.01.13 | Accepted 2023.01.11 | 提交返修稿 2022.12.26 | 提交论文至期刊部系统 录用截图来源&#xff1a;期刊部投稿系统 见刊截图来源&#xff1a…...

Could not find resource jdbc.properties问题的解决

以如下开头的内容&#xff1a; Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in SQL Mapper Configuration 出现以上问题是没有在src/main/resources下创建jdbc.prop…...

【面试题】==与equals区别、Hashcode作用、hashcode相同equals()也一定为true吗?泛型特点与好处

文章目录1. 和 equals 的区别是什么&#xff1f;2.Hashcode的作用3. 两个对象的hashCode() 相同&#xff0c; 那么equals()也一定为 true吗&#xff1f;4.泛型常用特点5.使用泛型的好处&#xff1f;1. 和 equals 的区别是什么&#xff1f; “” 对于基本类型和引用类型 的作…...

Flex布局中的flex属性

1.flex-grow&#xff0c;flex-shrink&#xff0c;flex-basis取值含义 flex-grow&#xff1a; 延申性描述。在满足“延申条件”时&#xff0c;flex容器中的项目会按照设置的flex-grow值的比例来延申&#xff0c;占满容器剩余空间。 取值情况&#xff1a; 取负值无效。取0值表示不…...

SpringBoot + Ant Design Pro Vue实现动态路由和菜单的前后端分离框架

Ant Design Pro Vue默认路由和菜单配置是采用中心化的方式&#xff0c;在 router.config.js统一配置和管理&#xff0c;同时也提供了动态获取路由和菜单的解决方案&#xff0c;并将在2.0.3版本中提供&#xff0c;因到目前为止&#xff0c;官方发布的版本为2.0.2&#xff0c;所以…...

robotframework自动化测试环境搭建

环境说明 win10 python版本&#xff1a;3.8.3rc1 安装清单 安装配置 selenium安装 首先检查pip命令是否安装&#xff1a; C:\Users\name>pipUsage:pip <command> [options]Commands:install Install packages.download Do…...

尚硅谷《Redis7》(小白篇)

尚硅谷《Redis7 》&#xff08;小白篇&#xff09; 02 redis 是什么 官方网站&#xff1a; https://redis.io/ 作者 Git Hub https://github.com/antirez 03 04 05 能做什么 06 去哪下 Download https://redis.io/download/ redis中文文档 https://www.redis.com.cn/docu…...

并非从0开始的c++ day6

并非从0开始的c day6二级指针练习-文件读写位运算位逻辑运算符按位取反 ~位于&#xff08;AND&#xff09;&#xff1a;&位或&#xff08;OR&#xff09;&#xff1a; |位异或: ^移位运算符左移<<右移>>多维数组一维数组数组名一维数组名传入到函数参数中数组指…...

PMP考前冲刺2.22 | 2023新征程,一举拿证

承载2023新一年的好运让我们迈向PMP终点一起冲刺&#xff01;一起拿证&#xff01;每日5道PMP习题助大家上岸PMP&#xff01;&#xff01;&#xff01;题目1-2&#xff1a;1.在新产品开发过程中&#xff0c;项目经理关注到行业排名第一的公司刚刚发布同类型的产品。相比竞品&am…...

RxJava的订阅过程

要使用Rxjava首先要导入两个包&#xff0c;其中rxandroid是rxjava在android中的扩展 implementation io.reactivex:rxandroid:1.2.1implementation io.reactivex:rxjava:1.2.0首先从最基本的Observable的创建到订阅开始分析 Observable.create(new Observable.OnSubscribe<S…...

【2.22】MySQL、Redis、动态规划

认识Redis Redis是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成的&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列&#xff0c;分布式锁等场景。 Redis提供了多种数据类型来支持不同的业务场景&#xff0c;比如String(字符串…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...