MovieChat: From Dense Token to Sparse Memory for Long Video Understanding
论文信息
paper:CVPR 2024
code:https://rese1f.github.io/MovieChat/
视觉模型+大语言模型:首个支持10K+帧长视频理解任务的新型框架(推荐这篇公众号,讲地通俗易懂,本文也借鉴了不少)
论文概要
- 主要创新:支持长视频理解。如论文图1所示,显存需求不会随着视频的长度增加而增加,支持10K长视频,需要的显存也仅为17.2GB。
- 主要技术:提出短期-长期记忆机制。短期memory bank存视频帧tokens,如果存满了就压缩(循环地将最相近的相邻两帧做加权和)到长期memory bank里面去,最后将当前帧、短期记忆、长期记忆进行拼接经过Q-Former和线性映射层后送入LLM中去。
- 核心数据:提出具有人工标注的长视频数据集MovieChat-1K,其中包含了来自各种电影和电视系列的 1K 个高质量视频剪辑,拥有 14K 个手动注释。手动设置并提供了整个视频的 1 个密集字幕,为全局模式提供了 3 个问答对,为断点模式提供了带有时间戳的 10 个问答对。
摘要翻译
最近,将视频基础模型和大型语言模型结合起来构建视频理解系统可以克服特定预定义视觉任务的限制。然而,现有的系统只能处理很少帧数的视频。对于长视频,计算复杂性、内存成本和长期时间连接带来了额外的挑战。利用Atkinson-Shiffrin记忆模型,将Transformers中的tokens作为记忆载体,并结合我们特别设计的记忆机制,我们提出了MovieChat来克服这些挑战。MovieChat在长视频理解方面取得了最先进的性能,并发布了包含1K长视频和14K手动标注的MovieChat-1K基准,以验证我们方法的有效性。代码、模型和数据可以在 https://rese1f.github.io/MovieChat 找到。
引言翻译
最近在自然语言处理(NLP)中,大型语言模型(LLMs)取得了巨大成功。将多模态性引入LLMs并将其转变为多模态大型语言模型(MLLMs),能够进行多模态合理化和理解,这是一个自然的进展。MLLMs在各种多模态任务中显示出了难以置信的新兴能力,例如感知(例如计数、OCR)、常识推理和代码推理,为人工通用智能(AGI)提供了潜在的路径。与LLMs和其他特定任务模型相比,MLLMs提供了更类似于人类的情境解释,用户友好的交互界面和更广泛的能力范围。
现有的以视觉为中心的MLLMs遵循的范式是利用预训练的LLMs和视觉编码器,加上额外的可学习模块(Q-former或简单的投影层)。在视频领域,一些先前的工作遵循这一范式构建视频MLLMs,而其他范式通过应用程序编程接口(API)将现有的视觉感知工具和LLMs结合起来构建系统,无需训练。然而,以前没有探索基于长视频(超过一分钟)的模型或系统,并且也缺乏标准化的基准来评估这些系统的能力。
在本文中,我们提出了MovieChat,这是一个新颖的框架,它整合了视觉模型和LLMs来进行长视频理解任务。我们认为计算复杂性、内存成本和长期时间连接是长视频理解的主要挑战。Atkinson-Shiffrin记忆模型提出短期记忆作为长期记忆的缓冲区,作为将信息编码到长期记忆的处理器。受此启发,我们提出了一种记忆机制来处理长视频理解任务,包括快速更新的短期记忆和紧凑且持久的长期记忆。我们使用滑动窗口方法提取视频特征并以token形式表示,然后逐帧顺序输入到短期记忆中。当固定长度的短期记忆达到其设定限制时,最早的tokens被弹出并整合到长期记忆中。通过投影层,视频表示输入到大型语言模型中,与用户进行交互。如图1所示,我们提出的MovieChat机制在视频随机存取存储器(VRAM)成本方面优于其他现有方法。我们还发布了一个新的基准,MovieChat-1K,包含1K个长视频和13K个手动问题-答案对,以验证我们提出的MovieChat的有效性。
这项工作的贡献总结如下:
- 我们提出了MovieChat,一个新颖的框架,整合了视觉模型和LLMs,首次支持超过10,000帧的长视频理解任务。
- 我们提出了一种有效记忆管理机制,以减少计算复杂性和内存成本,同时增强长期连接。
- 我们发布了第一个长视频理解基准,MovieChat-1K,并进行了广泛的定量评估和案例研究,以评估两种理解能力和推理成本的比较性能。
技术细节
视觉特征提取(Visual Feature Extraction)
采用来自EVA-CLIP的ViT-G/14模型作为视觉特征提取器,对采样的视频帧生成对应的序列token。为了解决同时在 GPU 内存和 RAM 中存储大量帧的存储需求不切实际的问题,论文采用了滑动窗口方法来高效处理视频(对应论文公式1):
B n = { x i = V ( v i ) ∣ ∀ i = 1 , 2 , . . . , C } , n = 1 , 2 , . . . , ⌈ T C ⌉ B_n = \{x_i=V(v_i) | \forall i =1,2,...,C\}, n = 1,2,...,\lceil\frac{T}{C}\rceil Bn={xi=V(vi)∣∀i=1,2,...,C},n=1,2,...,⌈CT⌉
其中, B n B_n Bn表示滑动窗口获取的包含 C C C帧的第 n n n个视频片段的特征。 ⌈ T C ⌉ \lceil\frac{T}{C}\rceil ⌈CT⌉表示一个 T T T帧的视频被步长为 C C C的滑动窗口分为了多少片段( ⌈ ⌉ \lceil\rceil ⌈⌉表示向上取整)。 V ( ⋅ ) V(\cdot) V(⋅)是视觉特征提取器,将单个帧 v i ∈ Z 3 × H × W v_i \in \mathbf{Z}^{3 \times H \times W} vi∈Z3×H×W作为输入, x i ∈ Z N × D x_i \in \mathbf{Z}^{N \times D} xi∈ZN×D表示每个帧提取的 N N N个视觉标记,其中 D D D是每个标记的特征维度。
短期记忆(Short-term Memory)
创建一个固定长度的短期记忆bank S \mathbf{S} S, S \mathbf{S} S里面存储 G G G个 B n B_n Bn片段:
S = ⋃ n B n = { x i ∣ ∀ i = 1 , 2 , . . . , K } , n = 1 , 2 , . . . , G \mathbf{S} = \bigcup_{n} B_n = \{x_i | \forall i = 1,2,...,K\}, n = 1,2,...,G S=n⋃Bn={xi∣∀i=1,2,...,K},n=1,2,...,G
其中, K = C × G K=C \times G K=C×G表示 S \mathbf{S} S里面一共存了 K K K个视频帧
短期记忆的更新策略基于先进先出(FIFO)队列。当一批新的视觉tokens进入时,如果短期记忆达到其容量,我们将当前存储的帧弹出到记忆整合模块(consolidation module),并清除短期记忆。从整合模块获得的视频特征增强了长期记忆;另一方面,它用这个特征重新初始化短期记忆。初始化的目的是传递不同滑动窗口之间的信息,从而实现更有效的压缩。
长期记忆(Long-term Memory)
长期记忆可以有效避免灾难性知识遗忘的问题,这对于处理长视频理解任务至关重要。存储在短期记忆中的是密集的tokens,但由于GPU内存和计算成本的限制,将从短期记忆中丢弃的所有tokens按顺序存储到长期记忆缓冲区是不可行的。此外,我们观察到视频中存在显著的冗余,其中活动跨越了多个帧,但视觉上的变化很小。为此,我们提出了一种合并相邻相似帧的方法,以简化视频特征表示并加速视频编码。这种方法将密集的tokens转化为稀疏记忆,这些记忆被存储在长期记忆中。
具体的实现如算法1和上图中的棕色块(Memory Consolidation)所示:
1)判断短期记忆 S \mathbf{S} S是否存满,如果是,就循环地计算相邻两帧之间的相似度
2)找到序列中相似度最高的相邻两帧,并进行合并,即加权和。原文是这样说的:we greedily merge each set of adjacent frames with the highest similarity via weighted averaging.
3)循环进行步骤2,直到 S \mathbf{S} S的长度小于预先定义的长度 R L R_L RL,最后将所有的序列存入长期记忆 L \mathbf{L} L中,并清空 S \mathbf{S} S
位置编码扩展
对于长期记忆,论文遵循 BERT 的位置编码机制,但标记数量超过了预训练模型位置编码的最大长度,导致其中超过长度阈值 n n n的部分没有可用的位置编码。为了处理足够长的长期记忆,我们采用了Su等人提出的分层分解位置编码方法,该方法允许将长度为 n n n的绝对位置编码扩展到 n 2 n^2 n2。
推理(Inference)
之前的方法总是使用整个视频的表示来进行理解和问答,这在定位长视频中的特定时刻时可能会失败。为此,我们为长视频理解任务提出了两种推理模式,全局模式和断点模式,具体如下:
- 全局模式:定义为对整个视频的理解和问答。在这种情况下,我们只使用长期记忆 L \mathbf{L} L作为视频表示。
- 断点模式:被明确定义为理解视频中的特定时刻。由于事件本身具有连续性,我们需要考虑的不仅是与短期记忆中存储的时刻直接相关的信息,还有长期记忆中存储的间接相关信息。基于此,我们假设在特定时刻 t t t查询电影时,视频表示应该是 L \mathbf{L} L、 S \mathbf{S} S以及当前视频帧特征 x t x_t xt的聚合。我们发现简单地将这些项连接起来就能获得出色的性能,并留待未来的工作进一步探索其他的聚合选择。随后,视频表示通过Q-former和线性投影层,然后输入到大型语言模型中,用于与用户交互。