支持10K长视频理解的多模态大模型MovieChat(CVPR 2024)

news2024/9/29 13:28:17

MovieChat: From Dense Token to Sparse Memory for Long Video Understanding

论文信息

paper:CVPR 2024
code:https://rese1f.github.io/MovieChat/
视觉模型+大语言模型:首个支持10K+帧长视频理解任务的新型框架(推荐这篇公众号,讲地通俗易懂,本文也借鉴了不少)
在这里插入图片描述

论文概要

  1. 主要创新:支持长视频理解。如论文图1所示,显存需求不会随着视频的长度增加而增加,支持10K长视频,需要的显存也仅为17.2GB。
  2. 主要技术:提出短期-长期记忆机制。短期memory bank存视频帧tokens,如果存满了就压缩(循环地将最相近的相邻两帧做加权和)到长期memory bank里面去,最后将当前帧、短期记忆、长期记忆进行拼接经过Q-Former和线性映射层后送入LLM中去。
  3. 核心数据:提出具有人工标注的长视频数据集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} viZ3×H×W作为输入, x i ∈ Z N × D x_i \in \mathbf{Z}^{N \times D} xiZN×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=nBn={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和线性投影层,然后输入到大型语言模型中,用于与用户交互。

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

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

相关文章

小程序开发全攻略:从零到上线的实战历程

引言 在当今的数字化时代,小程序凭借其轻便、快捷的特点,成为了连接用户与服务的桥梁。作为一名开发者,你可能正考虑踏入小程序开发的领域,但面对纷繁复杂的开发流程和技术要点,或许会感到无从下手。今天,我…

C 语言文件操作详解

目录 引言 一、基本概念 1.什么是文件 2.文件的属性 3.为什么使用文件 4.二进制文件和文本文件 二、文件的打开和关闭 1.流和标准流 2.文件指针 3.文件的打开和关闭 三、⽂件的顺序读写 1.顺序读写函数 2.详细介绍 1.fgetc 2.fputc 3.fgets 4.fputs 5.fscan…

统计:多变量时间序列分析 — VMA、VAR、VARMA

统计:多变量时间序列分析 — VMA、VAR、VARMA 一、说明 多变量时间序列是一个在大学课堂上经常被忽视的话题。然而,真实世界的数据通常具有多个维度,我们需要多变量时间序列分析技术。在这篇博客中,我们将通过可视化和 Python 实现…

【GLM-4开发实战】Function Call进阶实战:外部函数调用回顾

系列篇章💥 No.文章1【GLM-4开发实战】Function Call进阶实战:外部函数调用回顾2【GLM-4开发实战】Function Call进阶实战:常见挑战之意图识别处理3【GLM-4开发实战】Function Call进阶实战:常见挑战之海量函数处理4【GLM-4开发实…

【STM32】GPIO和AFIO标准库使用框架

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 GPIO简介 GPIO时钟使能 GPIO初始化 工作模式 选择引脚 输出速度 函数应用 GPIO初始化框架 8个电平读写函数 写端口电平 读端口电平 GPIO框架汇总 AFIO简介 AFIO时钟使能 函数应…

【Material-UI】深入理解useAutocomplete Hook:自定义与高级用法

文章目录 一、什么是useAutocomplete?导入useAutocomplete 二、基本用法代码解析 三、高级定制1. 自定义选项渲染2. 分组和排序3. 自定义输入框行为4. 与其他组件集成 四、注意事项1. 类型安全2. 性能优化 五、总结 Material-UI提供了强大的Autocomplete组件&#x…

Stable Diffusion绘画 | 图生图-基础使用介绍—重绘幅度与缩放模式

重绘幅度 重绘幅度越大,出图与原图差异越大。 重绘幅度0.7 重绘幅度0.3 缩放模式 目前有以下四种缩放模式: 原图的宽高是1080x1440,当修改宽高,与原图不一致时,可选择其中一种缩放模式来处理图片。 仅调整大小 缩放…

C++入门基础(上篇)

C入门基础(上篇) hello everybody!经历了C语言和初阶数据结构的头脑风暴,相信大家对于编程的学习更加开心,所以说接下来我们将迎来C的学习与探索,话不多说让我们开始吧 namespace的价值 在C/C中,变量、函…

计算机毕业设计选题推荐-自习室座位预约系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

GD32 MCU硬件I2C不可靠不如软件I2C?

在一个评论中,看到网友对硬件I2C的讨论,硬件I2C Busy找不到原因、软件I2C稳得一批。 那么为什么会出现I2C BUSY?硬件I2C真的不如软件I2C吗?怎么让硬件I2C也稳得一批,让我们来一探究竟。 首先我们从I2C时序分析下I2C总…

基于pytorch的steam游戏评分的线性回归问题分析

前言 相信已经暑假一个月的大家肯定并不陌生上面这个学习软件(),面对琳琅满目的游戏总是让人不知道挑选什么,这时候一个游戏的评分往往便成为了一个玩家选择下载的原因,那么今天我们就来研究研究,steam上一个游戏的种种数据&…

Celery注册装饰器@app.task和@shared_task

注册装饰器 app.task和shared_task是Celery中用于定义任务的两种不同装饰器, 它们之间存在明显的区别.from celery import Celery app Celery(my_app, brokeramqp://guestlocalhost//) app.task def my_task(): # 任务逻辑 passfrom celery import shared_task shared…

数据结构——双链表详解(超详细)

前言: 小编在之前已经写过单链表的创建了,接下来要开始双链表的讲解了,双链表比单链表要复杂一些,不过确实要比单链表更好进行实现!下面紧跟小编的步伐,开启今天的双链表之旅! 目录 1.概念和结构…

Pixart LED调变开发笔记

Pixart提供基础的鼠标和键盘代码, 开发者可以基于此快速的建置自己的firmware, application, 以下介绍代码中用来控制LED的API函式. 常亮模式 (Always on) 常亮模式, 调用API "pwm_led_set_always_on" 及 channel 来设置对应LED常亮. 闪烁模式 (Flash mode) 闪烁模…

华为OD机试 - 字符串编码校验(Java 2024 D卷 100分)

华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华…

Unity3D 物体圆周运动

Unity3D 实现一个 2D 物体沿着圆周进行运动。 物体圆周运动 前段时间在开发一个小游戏时,需要实现火箭沿着一个圆形轨道进行圆周运动。 以前面试的时候也被问到过这类问题(如何让一个 2D 物体做圆周运动),所以还是记录一下实现…

ICML 2024 | 矛与盾的较量!北大提出提示无关数据防御保护算法PID

文章链接:https://arxiv.org/pdf/2406.15305 代码地址:https://github.com/PKU-ML/Diffusion-PID-Protection 亮点直击 本文在实证观察中发现,保护阶段和利用阶段之间的提示不匹配可能会削弱当前数据保护算法的有效性。本文深入探讨了利用LDM…

【机器学习第7章——贝叶斯分类器】

机器学习第7章——贝叶斯分类器 7.贝叶斯分类器7.1贝叶斯决策论7.2 朴素贝叶斯分类器条件概率的m估计 7.3 极大似然估计优点基本原理 7.4 贝叶斯网络7.5 半朴素贝叶斯分类器7.6 EM算法7.7 EM算法实现 7.贝叶斯分类器 7.1贝叶斯决策论 一个医疗判断问题 有两个可选的假设&#…

从日常到专业,2024年必备在线翻译神器

现在全球交流越发的简单、频繁,很多时候外语成为了我们汲取新鲜知识的绊脚石。这时候我们就可以借助一些翻译在线的工具来解决这个问题。这次我们一起探索几款我搜集到的翻译工具。 1.福晰在线翻译 链接直通:https://fanyi.pdf365.cn/doc 这个工具支…