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

TIM: A Time Interval Machine for Audio-Visual Action Recognition

标题:TIM:一种用于视听动作识别的时间间隔机器

源文链接:openaccess.thecvf.com/content/CVPR2024/papers/Chalk_TIM_A_Time_Interval_Machine_for_Audio-Visual_Action_Recognition_CVPR_2024_paper.pdficon-default.png?t=N7T8https://openaccess.thecvf.com/content/CVPR2024/papers/Chalk_TIM_A_Time_Interval_Machine_for_Audio-Visual_Action_Recognition_CVPR_2024_paper.pdf

源码链接:https://github.com/JacobChalk/TIMicon-default.png?t=N7T8https://github.com/JacobChalk/TIM

发表:CVPR-2024

摘要 

长时间的视频中,各种动作会产生丰富的视听信号。最近的研究表明,音频和视频这两种模态的事件时间长度和标签各不相同。我们通过明确建模音频和视觉事件的时间长度来解决长时间视频中两种模态之间的相互作用。我们提出了时间间隔机器(TIM),其中特定模态的时间间隔被用作查询,输入到一个处理长视频输入的转换器编码器。然后,编码器关注于指定的时间间隔,以及两种模态中的周围上下文,以识别正在进行的动作。

我们在三个长视听视频数据集上测试了TIM:EPIC-KITCHENS、Perception Test和AVE,报告了识别方面的最新技术(SOTA)。在EPIC-KITCHENS上,我们击败了之前利用大型语言模型(LLMs)和显著更大预训练量的SOTA,将顶级动作识别准确率提高了2.9%。此外,我们还展示了TIM可以通过使用密集多尺度间隔查询来适应动作检测,在EPIC-KITCHENS-100上大多数指标都超过了SOTA,并在Perception Test上表现出强大的性能。我们的消融实验表明,整合两种模态并建模它们的时间间隔在实现这种性能中起着关键作用。代码和模型可在以下网址获取:https://github.com/JacobChalk/TIM。

1. 简介

长视频展现出了一系列快速连续的听觉和视觉事件。最新的尝试分别在这些模态中标注事件[15, 30],展示了两种模态之间的时间长度和类标签都有所不同。然而,这些事件仍然保持相关——识别两种模态中时间上接近的事件可以改善视觉和音频中的动作识别。

此外,迄今为止的大多数方法通常仅利用动作的精确时间长度;一个精确裁剪的动作片段被输入到基于卷积[5, 8, 39]或基于转换器[1, 11, 22]的主干网络中,该网络预测正在进行的动作。即使当利用周围上下文来改善动作识别时[18, 31, 42],这种上下文也是以相邻动作的精确片段形式提供的,而不是未裁剪的长输入视频。在本文中,我们提出了一种方法,该方法编码长视频输入中视觉和听觉流中发生的多个事件。我们通过将时间间隔提升为首要元素来实现这一点,利用它们来指定伴随模态中的查询。我们将这种机制称为时间间隔机器(TIM)。它能够接收长视频输入,并输出被查询模态的查询区间内发生的动作

图1. 时间区间机器(TIM):顶部:给定视觉和听觉流输入,特定时间区间的正在进行的动作由指定该区间开始和结束时间的查询以及感兴趣的模态来确定。底部:TIM可以查询视觉(例如,“冲洗海绵”)和听觉(例如,“水声”)动作类别,并区分同一模态中重叠的动作(“玻璃碰撞”和“擦洗/刮擦”)。

考虑图1中的示例。输入包含水流动的声音,同时海绵被冲洗,之后用来擦拭表面。这些不同的事件在持续时间上可能差异很大,并且可能在音频或视觉模态中更为突出。尽管这些事件之间存在差异,但它们与周围环境之间很可能存在许多相关性,这可能有助于识别给定事件(例如,水声与冲洗海绵相关,为识别视觉动作提供了有用的信息)。TIM能够通过访问两种模态内的上下文(包括没有事件发生时的背景)来利用这一点。然后,它可以通过查询给定模态中特定事件的时间间隔来区分同一输入中不同且可能重叠的事件

我们在三个具有挑战性的长视频视听识别数据集上测试了TIM:EPIC-KITCHENS[7],该数据集最近通过EPIC-SOUNDS[15]提供了不同的音频标注;Perception Test[30];以及AVE[36]。我们展示了TIM能够在长输入中有效地学习视觉和听觉类别,在EPIC-KITCHENS上比当前最先进(SOTA)的top-1准确率提高了2.9%,在EPIC-SOUNDS上提高了1.4%,尽管之前的竞争方法使用了更大的预训练数据集、大型语言模型或更高分辨率的输入。此外,我们在AVE上比使用公共数据集预训练的模型提高了0.6%,并在Perception Test的视觉和音频动作识别中分别比强大的基线提高了9.9%和3.2%。

此外,我们通过固定多尺度密集查询和添加区间回归损失,将TIM适应于动作检测。我们在EPIC-KITCHENS和Perception Test上报告了强大的检测结果,分别比Action Former[49]高出1.6平均mAP和4.3。

我们的贡献总结如下:(i) 我们提出了TIM查询机制,用于关注长视频中特定模态的区间。(ii) 我们有效地训练TIM以使用时间区间编码/查询多个音频和视频动作。(iii) 我们展示了TIM在视觉和听觉动作识别中的价值,并通过添加区间回归损失将其适应于检测。(iv) 我们在多个数据集的视频和多模态识别中均达到了新的SOTA水平

2. 相关工作

音-视频动作识别。已有一些工作采用音频和视觉模态进行动作识别[10, 17, 18, 26, 41, 44]。一些工作引入新的架构来有效地融合不同模态[17, 18, 26, 44];其他工作则提出了独特的训练技术来解决训练多模态模型时出现的问题,如梯度混合[41],以解决每个模态以不同速度过拟合的问题,或跨模态对比学习以进行区分[25]。然而,这些工作对两种模态都使用相同的语义和时序标签。最近的工作表明,事件的时序区间和语义在不同模态之间是不同的[15, 30]。[37]独立地对视觉和听觉事件进行了时序标注,尽管它们共享相同的标签集。在这项工作中,我们为每个模态训练了不同的标签,以利用具有判别性的音频和视觉动作

利用时序上下文。一些工作已经考虑了融入时序上下文[18, 27, 42, 43, 48],这是一个与使用多种模态正交的方向,特别是在未裁剪的视频中特别有用。在[27]中,提出了一种基于自回归LSTM的编码器-解码器,用于动作序列分类,有效地利用过去的动作上下文来预测当前的动作。时间查询网络(Temporal Query Network)[48]使用可学习的查询向量,这些向量对应于长视频的特定属性,使模型能够关注视频的各个方面及其周围的上下文,以产生针对每个属性的响应。[42]提出通过长期特征库(Long-Term Feature Bank)和注意力机制,从邻近的动作片段中聚合时间上下文来增强动作的表示。[43]通过存储一个转换器所有中间层的键和值来构建一个更复杂的记忆库,以聚合过去的上下文。最后,[18]利用视觉、音频和语言从周围动作中提取多模态时间上下文。

[18, 42, 43]与我们的方法最为接近,因为共同的目标是使用未裁剪视频中的周围上下文来丰富感兴趣动作的表示,而不是仅依赖邻近的片段。然而,[42, 43]是单模态模型,仅识别视觉动作。[18]假设所有动作的时间范围都是已知的,包括测试集,这具有一定的限制性。

视觉模型中的查询。使用Transformer架构学习视觉查询最近受到了关注[4, 14, 16, 23, 48]。通常,这些方法使用一组可学习的向量来查询输入中某个概念的存在。例如,在[4, 23]中,可学习的查询对应于不同的对象,而在[14]中,它们被用于多任务学习,每个可学习的查询对应于不同的任务。[16]已经融入了可学习的查询来适应预训练模型,同时保持其余参数冻结。与我们的动机最接近的是[48],其中查询对应于视频中的事件及其属性,用于细粒度动作识别。作者指出,这些查询还具有在未裁剪视频中定位事件时间的作用

与[48]和其他工作不同,我们的查询主要是时间性的,没有语义解释,并且应用于多个模态。重要的是,由于时间是连续的,我们不能使用预定义的一组查询。相反,我们采用MLP架构来编码时间,类似于一个通用时钟。接下来我们将介绍我们的方法。

3. 时间间隔机

在本节中,我们描述了时间间隔机器(TIM),一个多模态Transformer编码器架构,其中所有输入(包括特征和查询)都与其相关的时间间隔进行编码时间间隔结合了每个音频和视觉特征的持续时间和位置,并用于查询网络以获取给定时间间隔内发生的任何动作。TIM的架构如图2所示。它接收大量的视频输入,这些输入被表示为一系列音频和视觉特征,并为提供的时间间隔输出正在进行的听觉或视觉动作标签

图2. 时间间隔机器(TIM)概述。该模型接收来自视频的音频和视觉特征序列,每个特征都通过其跨越的时间间隔进行时间戳记,并根据其模态进行编码。为了推断在时间间隔内发生的动作(视觉或音频事件),会形成一个查询,指定感兴趣的时间间隔和模态。

3.1. 模型体系结构

输入。TIM的输入是未裁剪视频的长片段,由提取的特征表示。当考虑两种模态输入,如视频和音频时,每种模态的嵌入是分别进行的:对于每种模态m,设Xm = [Xm1, ..., XmNm]是输入视频的Nm个按时序排列的特征表示,这些特征表示是从预训练的特征提取器Sm(·)中获得的。我们将这些特征通过特定模态的嵌入层gm(·)进行传递,将它们投影到所有模态共有的较低维度D。然后,嵌入的特征会被标记上模态编码和时间间隔编码,形成Transformer编码器的输入。现在我们详细说明如何对时间间隔进行编码。

图3. 时间间隔MLP I(·)的说明。它输入一个二维向量,即一个时间间隔的起始时间和结束时间,并输出一个单一向量,该向量可以沿着通道维度与输入特征或[CLS]标记进行级联。图中展示了三个时间间隔输入和三个对应的输出。请注意,在实际操作中,时间间隔是同时输入的。

时间间隔编码。在这项工作中,我们介绍了一种新型的学习查询网络——时间间隔MLP(多层感知器),它生成一个表示给定时间间隔的单一的D维向量。这个网络在TIM中用于编码输入特征的时间间隔以及我们想要查询并后续分类的时间间隔。图3说明了这个网络的概念。

时间间隔MLP I(·) : R2 → RD 接收一个时间间隔作为输入,这个时间间隔由起始时间和结束时间表示,并输出该时间间隔的一个单一的D维编码。请注意,这与单独编码起始时间和结束时间是不同的。具体来说,设ts和te是感兴趣的时间间隔的起始时间和结束时间,它们被长视频输入的长度归一化。I(·)接收时间间隔 ˜t = [ts, te] 作为输入,并输出该时间间隔的D维向量编码,这个向量编码了时间间隔在输入内的相对位置,以及其持续时间。然后,这个向量作为模型关于该时间间隔内发生的动作的查询。此外,每个特征\{X_i^m\}在输入内跨越一定的时间间隔。因此,对特征的时间间隔进行编码也很重要。总的来说,时间间隔MLP充当了一个通用时钟,它编码了输入中来自任何模态的特征的时间范围。请注意,对于输入特征和跨模态查询的所有时间间隔,使用相同的时间间隔MLP进行编码是至关重要的,以便准确编码通用时间。还值得注意的是,时间间隔MLP可以覆盖连续的时间间隔,而传统的位置编码仅覆盖输入特征的固定位置集合。时间间隔MLP与Transformer一起进行端到端的训练。

Transformer特征输入。\tilde{\mathbf{t}}^{m} = [\tilde{t}_{1}^{m},\cdots,\tilde{t}_{N^{m}}^{m}] 是来自模态m的视频特征Xm对应的时间间隔。我们通过通道级联将编码的时间间隔I(˜tm)注入到嵌入的特征中。然后,一个可学习的特定模态编码em ∈ R2D被添加到时间编码的特征上,以区分每个模态。总结来说,TIM的特征输入Em通过以下方式计算:

E_i^m=[g^m(X_i^m),I(\tilde t_i^m)]+e^m\quad\forall i\in[1,...,N^m]\quad(1)

其中[·, ·]表示级联。

Transformer查询输入。为了查询某个感兴趣区间内的动作,我们采用了标准的方法,即在输入序列的末尾添加一个可学习的分类标记CLSm如果˜tQ是一个感兴趣的时间区间,我们将时间区间表示I(˜tQ)沿着通道维度与这个分类标记连接起来,这作为网络的一个查询,以预测在˜tQ区间内发生的对应动作。我们还向每个分类标记添加了模态特定的编码e^m,作为一个标志来区分我们正在查询的是哪种模态。编码后的[CLS]m标记可以更正式地定义为:
[\text{CLS}]^m=[\text{CLS}^m,I(\tilde{t}_Q)]+e^m\quad(2)
在训练期间,我们为输入视频中的每个动作添加一个分类标记,从而在两种模态中都生成了多个[CLS]标记

Transformer编码器。我们使用transformer编码器对输入序列执行自注意力机制,以聚合相关的时间上下文和跨模态关系。我们使用编码后的特征输入Em和一个或多个代表每个时间区间查询的分类标记[CLS]m来形成transformer的输入序列,并将这些输入到编码器中。请注意,我们通过向输入中添加多个CLSm标记来同时识别来自任何模态的所有动作然后,将transformer输出的[CLS]m表示ZmCLS传递给相应的线性分类器,以预测动作标签。重要的是,我们使用注意力掩码来防止查询之间相互关注,同样防止输入特征关注查询,这确保了在推理期间,每个查询都是在不依赖于其他查询或动作边界的特权知识的情况下被识别的

3.2. TIM的训练和测试

为了训练TIM(Temporal Interaction Modeling),我们考虑未裁剪视频中的所有W秒长的连续片段,并以Hw的步长遍历整个视频。我们从这些片段中随机选择批次。对于每个窗口,我们查询所有与窗口重叠超过δ = 0.2秒的已标注音频和视觉动作

窗口中的所有查询都被编码并连接到不同的CLS标记上。为了对查询进行分类,h_{\mathrm{CLS}}^{m}(\cdot)为模态m的线性分类器,设\hat{y}_{\mathrm{CLS}}^{m}=h^{m}(Z_{\mathrm{CLS}}^{m})为ZmCLS输出表示的预测动作

我们通过使用交叉熵分类损失CE(·)在真实标签ymCLS上训练TIM,如下所示:
L^m=\frac{1}{N_Q}\sum^{N_Q}CE(\hat{y}_{\mathrm{CLS}}^m,y_{\mathrm{CLS}}^m)\text{(3)}
其中NQ是批次内的查询数量。

时间距离损失。除了标准的分类损失外,我们还引入了时间距离(TD)损失作为训练TIM的辅助损失。受到[21]的启发,其中使用自监督学习令牌嵌入中的相对补丁位置,我们同样训练网络以获取两个transformer输出并预测它们对应时间区间之间的经过时间

\mathbf{Z}_{1:\sum_{m}N^{m}}为来自所有模态的特征的transformer输出。我们从这些输出中随机采样一组特征对\mathbb{B}\subset\mathbf{Z}_{1:\sum_{m}N^{m}},将它们沿通道维度连接并输入到时间距离回归头h_{\tilde{t}}(\cdot) : \mathbb{R}^{4D} \to \mathbb{R}^{1},以预测每对之间的时间区间差。请注意,特征对可以在模态内部和跨模态中采样。在我们的情况下,我们通过将一个视觉特征与另一个音频特征配对来跨模态采样。这有助于模型学习模态之间的时间关系

正式地,TD损失Ltd计算为:
L^{td}=\sum_{\{Z_i,Z_j\}\in\mathbb{B}}|h_{\tilde{t}}(Z_i,Z_j)-d_{ij}|\quad(4)
其中dij是区间˜ti, ˜tj之间的时间距离。

将两个时间段的特征进行通道维度拼接,输入到时间距离回归头来预测这两个时间段之间的时间差,通过最小化TD损失,来使得从特征层面预测的时间差和实际的时间差相近。

训练目标和策略。对于最终的训练损失,我们将各模态的损失与时间距离(TD)损失相加

L^{total}=\left(\sum_{m\in\mathbb{M}}\lambda^mL^m\right)+\lambda^{td}L^{td}\quad\text{(5)}

其中,M 是模态的集合,λm 控制每个模态损失的权重,λtd 是一个超参数,控制时间距离(TD)损失的权重。

测试时增强。我们使用测试时增强,因为这通常会增加预测的鲁棒性和性能[29, 32]。在TIM中,我们使用一个滑动窗口遍历未裁剪的视频,从而为相同的区间查询提供不同的上下文。然后,我们将不同窗口中相同区间查询的预测结果进行聚合,以做出最终预测

3.3. 适应检测

虽然TIM最初是为了识别而设计的,但我们可以将其调整为用于检测。其基础架构在识别方面基本保持不变,但有两个主要的不同点。首先,我们在每个尺度上构建了跨越整个视频输入的密集多尺度区间查询。这些查询在训练和检测推断中都被用作区间查询。多尺度区间允许检测长动作和短动作。其次,我们引入了一个额外的区间回归头,该回归头将查询区间回归到动作的精确时间长度

在训练过程中,我们将多尺度金字塔中任何与真实动作重叠超过某个IoU(交并比)阈值的查询视为正查询。除了对查询进行分类外,我们还训练了一个DIOU回归损失[52]来预测动作的精确区间。分类损失和区间回归损失都是联合训练的。我们在ArXiv附录中提供了完整的细节。

4. 实验

本节描述了用于评估我们模型的数据集、实现细节和结果,以及与最先进方法的比较。

4.1 数据集

EPIC-KITCHENS-100 [7] 是一个大规模视频数据集,包括 700 个记录厨房中动作的第一人称视角视频。它包含 89,977 个细粒度动作片段。受先前工作 [11, 34, 35] 的启发,我们直接在训练和验证集中从 3806 个类别中预测动作,以避免预测无效动作。

EPIC-SOUNDS [15] 提供了音频注释,这些注释捕获了 EPIC-KITCHENS-100 音频流中的时间范围和类别标签。注释包含 78,366 个标记的音频事件。我们将 EPIC-KITCHENS 的视觉注释与 EPIC-SOUNDS 的音频注释结合起来,以训练我们的音视频模型。TIM 可以使用单个模型从两个数据集中识别动作。

AVE [36] 包含 4,143 个视频,涵盖了一系列现实生活场景,并被标记为 27 个类别,如教堂钟声、男性说话和狗叫。每个视频都被平均分成 10 个段,每个段长 1 秒。我们在监督音视频事件定位任务上评估 TIM。给定一个 1 秒的片段,我们从 27 个类别加上一个背景类别中识别正在进行的动作。

Perception Test [30] 是一个最近的包含 11,620 个视频的多模态视频基准,平均长度为 23 秒,同时提供了时间动作和声音注释。有 73,503 个跨越 63 个类别的视觉注释,以及 137,128 个跨越 16 个类别的声音注释。

4.2. 实现细节

架构细节视觉和音频嵌入层 gm 包括一个单一的 512 维前馈层,随后是 GELU [13] 激活函数和层归一化 [2],用于将特征投影到公共空间时间间隔多层感知机 I 由三个具有 512 维隐藏维度的线性层组成,后跟 ReLU 激活函数,最后一个线性层的输出后还有层归一化。我们为每个模态的每个查询都包含了 512 维的可学习 [CLS] 标记(如 [CLS]m_action),这些标记在与时间间隔编码拼接后变为 1024 维。然后,它们与 1024 维的模态编码 e_m 相加。音视频转换器包含四个编码器层,每层有 8 个注意力头、GELU 激活函数以及 1024 维的键、查询和值。在编码器层内部应用了 p=0.1 的丢弃率。我们还在原始输入特征以及编码后的转换器输入上直接应用了通道级丢弃率 p=0.5。时间距离头由两个隐藏维度为 1024 的线性层和一个输出单个数字的第三层组成,该数字对应于每个时间间隔之间的已过去时间。我们在 ArXiv 附录中包含了关于编码器层和时间距离头的架构消融研究。

训练/验证细节。我们使用 AdamW [24] 优化器对每个模型进行 100 个周期的训练,批次大小为 64,权重衰减为 1e-4。在前两个周期中应用了线性学习率预热,从 1e-6 增加到目标学习率,并使用余弦学习率调度器。我们将 TD 损失权重 λtd 设置为 0.3。我们为批次中每个窗口的查询填充到每个数据集中单个窗口中的最大查询数。我们在 ArXiv 附录中为每个数据集提供了实现细节。

相关文章:

  • Gflags的使用
  • rknn转换后精度差异很大,失真算子自纠
  • 未授权访问漏洞总结
  • 一文让你彻底搞懂什么是VR、AR、AV、MR
  • 【ARMv8/ARMv9 硬件加速系列 2.1 -- ARM NEON 向量寄存器单个元素赋值】
  • 噪声-降噪引脚如何提高系统性能
  • [信号与系统]关于双线性变换
  • Vulhub——Log4j、solr
  • Java用文件流mask文本文件某些特定字段
  • 使用新语法连接Qt 5中重载的信号和槽
  • 输出数据到excel中
  • 如何优雅地使用 console.log 打印数组或对象
  • 51单片机STC89C52RC——4.1 独立按键(数码管显示按键值)
  • 机器人里程计(Odometry)
  • Meta-Llama-3-8B 部署
  • Django 博客开发教程 8 - 博客文章详情页
  • JAVA多线程机制解析-volatilesynchronized
  • JS基础之数据类型、对象、原型、原型链、继承
  • mysql常用命令汇总
  • nodejs:开发并发布一个nodejs包
  • opencv python Meanshift 和 Camshift
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • socket.io+express实现聊天室的思考(三)
  • win10下安装mysql5.7
  • 和 || 运算
  • 力扣(LeetCode)22
  • 责任链模式的两种实现
  • MPAndroidChart 教程:Y轴 YAxis
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (03)光刻——半导体电路的绘制
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (三)c52学习之旅-点亮LED灯
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十)c52学习之旅-定时器实验
  • (转)http-server应用
  • (转)Oracle存储过程编写经验和优化措施
  • .NET Core 2.1路线图
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net下简单快捷的数值高低位切换
  • :O)修改linux硬件时间
  • @KafkaListener注解详解(一)| 常用参数详解
  • @ModelAttribute注解使用
  • [8] CUDA之向量点乘和矩阵乘法
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Apio2012]dispatching 左偏树
  • [Bada开发]初步入口函数介绍
  • [C++]——带你学习类和对象
  • [Docker]五.Docker中Dockerfile详解
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle
  • [Golang] go-kit 介绍和使用 (微服务实现工具)
  • [ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [javascript]Tab menu实现