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

news2024/11/29 16:41:44

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

代码地址: 代码


0. 摘要

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

1. 整体思路

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

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

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

在这里插入图片描述

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

v i , R ~ i t + δ = T ( f R i t , f S i t + δ , Θ ) 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 隐式运动建模:

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

m i = [ x i t + δ − x i t x i t , y i t + δ − y i t y i t , log ⁡ w i t + δ w i t , log ⁡ h i t + δ h i t ] 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 ~ i t + δ = [ x i t + δ , y i t + δ , w i t + δ , h i t + δ ] \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框, 我们可以按照 m i m_i mi的式子求出对应的 m i ∗ m_i^* mi , 定义为:

L = l f o c a l ( v i ∗ , v i ) + I ( v i ∗ ) l r e g ( m i , m i ∗ ) 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)

其中上标 ∗ * 表示真值, l r e g l_{reg} lreg表示平滑L1损失.

1.2 显式运动建模

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

我们利用得到的 r i r_i ri, 进一步预测像素级置信度的map v v v和位置的map p p p, 如下图所示.

在这里插入图片描述

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

R ~ i t + δ = R ( p i ∗ ( x , y ) ) ;      v i t + δ = v i ( x ∗ , y ∗ ) s . t .     ( x ∗ , y ∗ ) = arg ⁡ max ⁡ x , y ( v i ∗ η 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 ) ) , R i t ) \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是以过去帧位置 R i t R_i^t Rit的几何中心为中心的cos窗函数, S \mathcal{S} S是预测出的位置和原本位置高宽差异的高斯函数, η i \eta_i ηi的作用是为了防止bbox尺寸的突然变化.

损失函数:

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

L = ∑ x , y l f o c a l ( v i ( x , y ) , v i ∗ ( x , y ) ) + ∑ x , y I [ v i ∗ ( x , y ) = 1 ] ( w ( x , y ) ⋅ l r e g ( p i ( x , y ) , p i ∗ ( 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 ~ i t + δ \tilde{R}_{i}^{t+\delta} R~it+δ和检测器检测的 R i t + δ R_{i}^{t+\delta} Rit+δ简单进行匹配即可.

整体流程下图所示:

在这里插入图片描述

2. 评价

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++(41)-低版本升级到VS2019项目时遇到的问题(2)

1.错误码:MSB8066 代码为3 QT 项目老版本升级到新版本造成的, 1.重新加载项目: 扩展->QT VS tools->Open QT project files-> 2.添加QT模块:QT Project-Settings -> QT Modules2.无法打开QT的头文件 3.…

电脑自带的录屏放在哪里了?轻松弄懂,看这篇文章就明白了

有很多小伙伴有这个疑问,电脑自带的录屏放在哪里了?其实,电脑自带的录屏工具并不是所有电脑都要,具体要看你的电脑品牌和操作系统,Windows系统和Mac系统的电脑都自带了录屏工具,下面跟着小编一起来看看吧。…

Redis:缓存一致性问题(缓存更新策略)

Redis缓存的一致性1. 缓存1.1 缓存的作用:1.2 缓存的成本:2. 缓存模型3. 缓存一致性问题3.1 引入3.2 解决(1) 先更新数据库,再手动删除缓存(2) 使用事务保证原子性(3) 以Redis中的TTL为兜底3.3 案例:商铺信息查询和更新(1) 查询商…

“双碳”目标下二氧化碳地质封存技术应用前景及模型构建实践方法与讨论

我国二氧化碳地质封存技术起步较晚,目前仍没有一套相对完整的行业规范;且就该技术而言,涉及环节众多,理论相对复杂,对于行业的新入局者不太友好。因此,结合时代背景,我们首次尝试对二氧化碳地质…

【面试1v1实景模拟】Spring事务 一文到底

老面👴:小伙子,了解Spring的事务吗? 解读🔔:这个必须了解,不了解直接挂~😂😂😂,但面试官肯定不是想听你了解两个字,他是想让你简单的介绍下。 笑小枫🍁:了解,事务在逻辑上是一组操作,要么执行,要不都不执行。主要是针对数据库而言的,比如说 MySQL。为…

C++——C++11第三篇

目录 包装器 function包装器 bind 包装器 function包装器 function包装器 也叫作适配器。C中的function本质是一个类模板,也是一个包装器。 上面的程序验证,我们会发现useF函数模板实例化了三份。 包装器可以很好的解决上面的问题 ,让它只实…

Android新启动模式之singleInstancePerTask

Android新启动模式之singleInstancePerTask 一.singleInstancePerTask介绍 singleInstancePerTask为android12新增的在standard、singleTop、singleTask、singleInstance之后的第五种启动模式。 Android12对于singleInstancePerTask描述如下(sdk中在platforms/android-31/d…

05- 形态学及图像的开闭运算 (OpenCV基础) (机器视觉)

知识重点 二值化操作 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY),对灰度图像操作, 全局阈值,整幅图像采用同一个数作为阈值 。 自适应阈值二值化 dst cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 9, …

做测试5年,靠业务熟悉吃老本,技术短板暴露,30岁被无情辞退...

朋友跟我诉苦,最近他被公司无情辞退了。测试几年,月薪10k,如今已经30了,接下来不知道该怎么办,让我帮他想想办法... 几年下来,也算是公司的骨干成员,不说有功,但一定无过。公司业务…

乐山持点科技:抖音38好物节活动运营要求

抖音38好物节活动马上就要到了,很多人都还不知道抖音38好物节活动的运营要求,乐山持点科技小编这就来给各位抖音达人们分享。5.1 商家活动管控规范5.1.1 以上条件为满足参加活动的基本条件,最终是否能够参加活动,以平台的最终审核…

kubernetes入门介绍,从0到1搭建并使用

Kubernetes是一个容器编排系统,用于自动化应用程序部署、扩展和管理。本指南将介绍Kubernetes的基础知识,包括基本概念、安装部署和基础用法。 基础介绍 Kubernetes是Google开发的开源项目,是一个容器编排系统,可以自动化部署、…

【100个 Unity实用技能】☀️ | C#泛型集合常用方法,查找符合要求的第一个元素并返回

Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案&#xff…

学数据结构第一个是学链表?不,是它

大家好,我是五月。前言以前很多小白都来询问过关于数据结构的内容,问题基本都是想学链表,堆栈、队列、树这些该怎么下手。一方面我表示赞许,另一方面又觉得他们对数据结构这个东西真是知之甚少。我告诉他们,第一个要学…

常用Linux的ssh远程终端连接工具

putty 说明 putty是最简单的SSH工具,无需安装,支持多系统版本,下载后就可以直接使用。 优点: 1.免费 2.免安装 缺点: 1、不支持标签模式; 2、默认设置不友好,很多功能都需要额外配置才行&…

Vue Slot (四种方式:超详细)

slot(插槽)的概念是把外层的内容塞进子元件的指定位置里。跟插槽的字面意思一样,前提是:有插口才能插。子元件需要开一个插口(slot),才可以在外层元件把内容塞进子元件里。 slot(插槽) 可分为四种: slot(插槽)Named slot(具名插槽)Scoped slot(作用域插槽)Dyn…

掌握MySQL分库分表(七)广播表、绑定表实战,水平分库+分表实现及之后的查询和删除操作

文章目录什么是广播表广播表实战数据库配置表Java配置实体类配置文件测试广播表水平分库分表配置文件运行测试什么是绑定表?绑定表实战配置数据库配置Java实体类配置文件运行测试水平分库分表后的查询和删除操作查询操作什么是广播表 指所有的分片数据源中都存在的…

redis(win版)

1. 前言1.1 什么是RedisRedis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。基于内存存储,读写性能高适合存储热点数据&am…

SealOS 一键安装 K8S

环境 # 查看系统发行版 $ cat /etc/os-release NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI_COLOR"0;31" CPE_NA…

黑马 Vue 快速入门 笔记

黑马 Vue 快速入门 笔记0 VUE相关了解0.1 概述0.2 MVVM0.3 JavaScript框架0.4 七大属性0.5 el:挂载点1 VUE基础1.0 第一个vue代码:Hello,vue1.1 v-bind 设置元素的属性 简写 :1.2 v-if , v-else , v-else-ifv-if , v-e…

【Npde.js】express以及nodemon

express初始Express什么是Express不使用Express可以创建web服务器吗?Express能做什么安装Express监听GET请求和post请求获取URL中携带的查询参数获取URL中携带的动态参数托管静态资源nodemon为什么使用nodemon初始Express 什么是Express 官方给出的概念&#xff0…