当前位置: 首页 > 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(字符串…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...