参考语言特征的多目标跟踪----RMOT(Referring Multi-Object Tracking)

本文主要是介绍参考语言特征的多目标跟踪----RMOT(Referring Multi-Object Tracking),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近看完了一篇关于有参考的多目标的文章,因此来写一些心得,既作为分享也作为自己的记录,如果有理解的不对的地方,希望大家能帮忙指出。
本文介绍的文章链接:https://arxiv.org/abs/2303.03366#:~:text=Existing%20referring%20understanding%20tasks%20tend%20to%20involve%20the,cue%20to%20guide%20the%20prediction%20of%20multi-object%20tracking.

1 基本介绍

本篇文章是cvpr2023年最新的文章,主要核心内容是通过语言特征来指导多目标跟踪。文章的主要贡献如下:

  1. 提出了Referring Multi-Object Tracking的概念,即有参考的多目标跟踪。
  2. 为RMOT建立了新的基准数据集----Reffer KITTI
  3. 提出在ROMT上表现出色的框架----TranMOT

在下文中将主要对论文中的2、3点贡献详细介绍

2 reffer KITTI

为了加快 RMOT 的开发,作者构建了一个关于交通场景的新基准,即 Refer-KITTI。它是从公共 KITTI数据集开发的。与现有的参考理解数据集相比,它具有三个显着特征:(1)对指称对象的高度灵活性。每个表达式描述的对象数量从 0 到 105,平均为 10.7。(2) 高时间动态。目标的时间状态覆盖了更长的时间和更多的帧(在 0∼400 帧之间变化),并且使用作者的标记工具可以准确捕获目标的时间变化。 (3) 数据集注释的低成本。作者提供了一种简单的标记工具,只需单击两次即可注释目标轨迹。
注释数据集的过程如下图所示,根据描述单击目标的开始帧和结束帧就能得到该目标一整段视频的标签:
在这里插入图片描述

关于数据集的部分例子如下图所示:
在这里插入图片描述

3 TransMOT

顾名思义,文章提出的框架是以transformer为基础的,整体的框架图如下图所示:
在这里插入图片描述
整个框架分为四部分:特征提取、编码器(多模态特征融合)、解码器、参考头。
在特征提取部分,CNN提取每一帧图像的特征图,预训练的语言模型提取语言特征。其中Ilt代表第t帧图像的第l层特征图;S代表提取的语言特征。为了进行多模态融合,在输入encoder之前,需要对IltS进行处理。其中用1×1卷积对Ilt进行降维,再进一步处理为二阶张量,即矩阵,最终输入Enconder的Ilt形式为:Ilt∈RHW×d此处d=256。语言特征R原本为二维向量,为了保证语言特征和图像特征通道数相同,用全连接层将语言特征进行投影。处理完后将两个矩阵输入Enconder中进行融合,融合过程如下图所示:
融合过程

其中PV和PL分别是视觉特征和语言特征的位置信息编码,QKV的计算和transformer中差不多,得出注意力模块后与视觉特征进行相加,得到融合后的特征,将融合后的特征放在deformable encoder中得到最终的嵌入:Elt,也就是下一阶段解码器的输入。整个过程的公式如下所示:
在这里插入图片描述

在这里插入图片描述
接下来就是解码部分,目标跟踪的实现也是在这一部分。首先要了解在解码部分解码器有两个输入,其中一个是上一阶段得到的多模态融合后的嵌入Elt,而另一个则是一种可学习查询Q,这个Q在DETR框架中有对应解释:用可学习查询来探测编码特征以生成实例嵌入。在这里我将Q理解为检测,即Q和输入的Elt结合得出decoder的输出。而为了能够关联上一帧的目标来实现目标跟踪,作者提出了一种方法:将上一帧decoder的输出作为下一帧decoder的输入,并且加入一个空白查询,即图中的Qdet,来检测当前帧中新目标的出现,从而实现目标跟踪。公式如下所示:
在这里插入图片描述
(这一部分说的不是很清晰,因为我自己也没有真正理解透彻,如果有大神有更好的见解,请多指教)
最后将解码后的Dt输入参考头,整个流程就结束了,参考头中主要有以下作用,如图:
在这里插入图片描述
至此,整个框架的流程就结束了。

4 总结

由于本人是一名小白,许多地方写的不清晰甚至有错误,希望大家能在评论区指出,后续我也会继续分享关于这篇文章更深一步的理解,比如一些损失值的计算和论文的代码理解等,感谢大家的耐心阅读。

这篇关于参考语言特征的多目标跟踪----RMOT(Referring Multi-Object Tracking)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/191423

相关文章

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

深入探讨Java 中的 Object 类详解(一切类的根基)

《深入探讨Java中的Object类详解(一切类的根基)》本文详细介绍了Java中的Object类,作为所有类的根类,其重要性不言而喻,文章涵盖了Object类的主要方法,如toString()... 目录1. Object 类的基本概念1.1 Object 类的定义2. Object 类的主要方法3. O

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return