LLAMA-VID
摘要
- 在这项工作中,我们提出了一种新颖的方法LLaMA-VID来解决视觉语言模型(VLMs)在视频和图像理解中的token生成挑战。
- 当前的VLMs虽然在图像描述和视觉问答等任务上表现出色,但在处理长视频时由于视觉token过多而面临计算负担。
- LLaMA-VID通过用两个不同的token来表示每一帧,即上下文token和内容token,来解决这个问题。
- 上下文token根据用户输入编码整体图像上下文,而内容token封装了每一帧中的视觉线索。
- 这种双token策略显著减少了长视频的负载,同时保留了关键信息。
- 通常,LLaMA-VID使现有框架能够支持长达一小时的视频,并通过额外的上下文token提高了其上限。
引言
背景:视觉语言模型(VLM)已经将大模型(LLM)的生成能力扩展到了视觉数据,在图像描述、视觉问答等任务展现出先进性。然而,长视频背景下,需要过多的token来表示连续的帧。计算需求随着视频长度的增加而增加,从而限制了VLM在广泛视频中的实际应用。
问题:现有视觉语言模型(VLMs)在处理长视频时面临视觉Token爆炸问题。例如:
单帧图像需32-256个Token(如BLIP-2需32,LLaVA需256)
10,000帧视频需超32万Token,超出当前VLMs处理极限(通常上限2-4K Token)
后果:计算负担过重,无法支持小时级长视频理解,且传统时间压缩方法(temporal compression)会丢失关键信息。
现有方法:代表性查询(Representative Queries):通过少量高层语义向量表示整个视频帧,替代原始像素级特征,显著减少Token数量。
Video-LLaMA [62]
使用预训练视觉编码器(如BLIP-2)提取帧特征。
引入可学习的Query向量(通常32个)与帧特征交互,通过交叉注意力聚合关键信息。
仅将Query向量输入LLM(而非所有空间特征),压缩率超90%(如256 Token → 32 Token)。
局限:Query数量固定,无法自适应指令;长视频中语义信息可能丢失。
VideoChat [30]
设计时空记忆模块,缓存关键帧的Query向量;
通过注意力机制检索与当前问题相关的记忆片段。
优势:减少冗余计算,但需预定义查询数量。
现有方法:时序压缩(Temporal Compression),===下面的代表工作原理待确认是否准确===
Video-ChatGPT [39]
空间压缩:每帧用ViT提取特征(如16×16网格);
时间压缩:对连续帧特征做3D平均池化(如每4帧合并为1帧);
将压缩后的时空特征输入LLM。
压缩率:若按4:1合并帧,Token数减少75%。
Valley [38]
使用时间卷积网络(TCN) 学习帧间依赖;
输出关键时间步的特征作为代表(类似视频摘要)。
本文方法:用两个不同的token来表示每一视频帧:上下文标记(context token)和内容标记(content token)。
Context Token:基于用户指令动态生成,聚焦与问题相关的全局上下文。
Content Token:编码帧内视觉细节,可根据计算资源调整粒度(视频:1 Token/帧;图像:最高576 Token/帧)。
首先使用vit提取图像特征,随后利用跨模态设计进行指令引导查询(Bert、Blip2),这些查询承载了用户的交互式意图。
这些查询与设计的上下文注意力模块中先前生成的图像特征交互,得到上下文token。
对图像特征进行平均池化,以制定适应不同设置的token,形成内容token。
例如,采用全局池来保持视频输入的效率,同时通过单个图像输入的更多令牌来保留细节。随后,上下文和内容标记被投影到具有简单线性层的LLM空间中,以进行最终预测。此外,为了更好地支持VLM中长达一小时的视频,我们构建了一个基于指令的数据集,其中包含9K个电影级对话,用于情节推理和细节理解。
优势:使用双令牌范式,每个帧只需两个令牌即可有效编码,这使现有的LLM能够支持长视频。另一方面,上下文标记聚合了每个图像的最具信息量的特征,这进一步通过额外的标记扩展了VLM的上限。
相关工作
LLM
随着大型语言模型 (LLM) 的发展,自然语言处理 (NLP) 领域取得了巨大的进步。 Transformer [55] 成为一个重要的里程碑,随后的语言模型 [15, 35, 64] 展现出非凡的能力。 GPT [6] 通过利用生成式预训练 Transformer 进行自回归预测,彻底改变了该领域,这被证明是一种强大的语言建模范式。 最近的突破性工作,如 ChatGPT [43]、GPT-4 [44] 和 LLaMA [53],将界限推向了更远。 这些模型在海量文本数据上进行训练,在复杂的语言任务中展现出非凡的能力。 为了利用预训练 LLM 的潜力,指令调优[56, 45] 是获得高质量输出的关键组成部分。 这种策略广泛应用于开源模型,如 Alpaca [52] 和 Vicuna [13],它们使用专门设计的指令对改进了 LLaMA [53]。 还有一些研究 [57, 60] 利用 LLM 的推理能力并调用预定义工具来进行视觉应用。 与它们不同,我们在这项工作中收集了包含文本、图像和视频的多模态指令数据,用于增强 LLM 进行长视频处理的能力。
VLM
计算机视觉和 NLP 的进步导致了视觉语言模型 (VLM) 的出现,这些模型将视觉模型与语言模型相结合,以进行跨模态理解 [11, 58] 和推理 [19, 37, 27]。 CLIP [46] 和 ALIGN [24] 等开创性的大型视觉语言模型 (VLMs) 将语言模型扩展到了视觉语言任务。 近期的进展表明,人们越来越重视利用大型语言模型 (LLMs) 的能力。 值得注意的是,Flamingo [2] 和 BLIP-2 [29] 利用网络规模的图像-文本对进行跨模态对齐,从而提高了学习性能。 为了进一步挖掘此类预训练模型的潜力,InstructBLIP [14] 和 MiniGPT-4 [65] 基于 BLIP-2 构建了高质量的指令对,并取得了优异的结果。 与此同时,LLaVA [33] 采用了一个简单的线性投影器,该投影器具有少量可学习参数,以对齐 LLaMA 的图像和文本空间。 鉴于定制的指令数据,这种简单的方法展示了强大的能力。 为了支持大型语言模型 (LLMs) 中的视频理解,Video-LLaMA [62] 和 VideoChat [30] 尝试利用 BLIP-2 进行视频嵌入提取,而 Video-ChatGPT [39] 则提出了用于视频特征的时空池化。 但是,鉴于每帧所需的大量符元数量,大型语言模型 (LLMs) 在处理大量的视频序列时遇到了巨大的挑战。 这使得以前的工作无法在大型语言模型 (LLMs) 中表示超过一小时的长时间视频序列。 为了解决这个问题,我们建议用只有 2 个符元来有效地编码每一帧,这支持在现有的大型语言模型 (LLMs) 中进行长时间视频理解。
LLaMA-VID
架构:通过编码器和解码器生成视觉嵌入和文本引导的特征;上下文标记和内容标记通过定制的标记生成策略进行转换;指令调优旨在释放大型语言模型在图像和视频处理方面的潜力。
输入类型:支持单张图像或视频帧序列。
核心流程:
视觉编码器(Encoder):使用预训练ViT(如EVA-G)提取帧特征 Xt∈R^N×C(N=H/p*W/p为图像块的数量,p=14为patch大小,C为嵌入通道数量)。
文本解码器(Decoder):
- 基于用户指令生成文本查询向量 Qt∈R^M×C(M为查询数)。
- 实现方式:QFormer(默认)或BERT。通过这种方式,文本查询 t 包含与用户指令最相关的突出显示的视觉提示。
双Token生成:使用文本查询Qt和视觉嵌入Xt,生成LLM的表示token。
Context Token:上下文注意力旨在聚合文本指令相关的视觉特征,并将其压缩为一个单一的上下文标记。
Softmax 函数和 Mean 操作分别沿 N 和 M 维度进行。 与采用 32 个视觉查询作为 LLM 符元 的 QFormer不同,本文仅使用文本查询 t 来聚合对输入指令具有高响应分数的视觉特征。
Content Token:帧内视觉细节。
投影层:使用线性投影对齐Et到上下文token。对视觉嵌入采用了自适应池化策略来生成内容token。
- 当输入单张图像时,我们保持视觉嵌入 t 的原始分辨率,而对于长视频,我们对 t 进行下采样到 1 个符元。 此方法显着减少了 LLM 对每一帧的过载,从而有效地支持长达数小时的视频。
LLM预测:将上下文token和内容token连接标识时间t处的帧,和其他帧一起形成视频序列,送入LLM生成自然语言响应。
# 输入: text_q (文本查询), vis_embed (视觉特征)
# 输出: final_token (双Token拼接)
# 1. Context Token生成
ctx_embed = softmax(text_q @ vis_embed.T / sqrt(D)) @ vis_embed # 交叉注意力
ctx_embed = mean(ctx_embed, dim=1) # 压缩为1向量
ctx_embed = linear_projection(ctx_embed) # 投影到LLM空间
# 2. Content Token生成
cur_shape = int(sqrt(vis_embed.shape[1])) # 特征图尺寸 (e.g., 16x16)
vis_embed = reshape(vis_embed, (B, cur_shape, cur_shape, C))
vis_embed = avg_pool2d(vis_embed, kernel=cur_shape//n) # 自适应池化 (n=1 for视频)
vis_embed = linear_projection(vis_embed) # 投影到LLM空间
# 3. Token拼接
final_token = concat([ctx_embed, vis_embed], dim=1) # [ctx; content]
训练策略
考虑到训练效率,在这项工作中,我们将训练过程分为三个阶段,即模态对齐、指令调优和长视频调优。
(1) 阶段1:模态对齐(Modality Alignment)
目标:对齐视觉特征与语言空间。
数据集:79万高质量多模态对:
55.8万图像-文本对(LLaVA-filtered CC3M)
23.2万视频-文本对(WebVid 2.5M采样)
训练配置:
冻结:视觉编码器、文本解码器、LLM。
优化:Context Attention模块 + 线性投影层。
最大Token数:2048。
(2) 阶段2:指令微调(Instruction Tuning)
目标:增强多模态理解与响应能力。
数据集:76.3万指令对:
4万文本对话(ShareGPT)
62.5万图像/视频QA(VQA-v2, ScienceQA等)
9.8万视频QA(ActivityNet等)
训练配置:
解冻文本解码器。
优化所有可训练参数(视觉编码器仍冻结)。
最大Token数:2048。
(3) 阶段3:长视频微调(Long Video Tuning)
目标:支持小时级视频理解。
构建了 15K 个长问答对,包括 9K 个电影场景中的对话和 6K 个从 LongLoRA 中采样的数据用于token扩展。
关键创新:
上下文扩展:位置插值(Position Interpolation)将LLM上下文窗口从4K → 64K Token。
数据集Long-VideoQA:
来源:400+电影(MovieNet)的剧情梗概(movie synopsis)和剧本(Scripts)。
GPT-4/Claude-2生成三类QA
类型 数量 示例问题 视频摘要 1K “生成《泰坦尼克号》的详细剧情摘要” 剧情级理解(角色/情节) 4K “为何Rose拒绝登救生艇?” 细节推理 4K “描述Rose返回船舱救Jack的具体动作”
对于情节级别数据,我们将整个电影梗概作为输入,并利用 GPT-4 [44] 生成与情节和角色相关的 QA 对。 这些包括情节理解、描述、分析、角色关系、个性和行为。 特别地,我们为每部电影生成 5 个与情节相关的对和 5 个与角色相关的对,共计 4K 个情节级别的 QA 数据。 至于细节级别数据,我们将长电影剧本输入 Claude-2 [3],并为每部电影生成 5 个与情节相关的推理对和 5 个与细节相关的描述,共计 4K 个对。
训练配置:
冻结文本解码器(节省显存)。
最大Token数:65536(支持3小时视频)。
实验
实验设置
在这项工作中,我们默认情况下使用预训练的 EVA-G [17] 作为视觉编码器,使用 QFormer [14] 作为文本解码器来实例化模型。 在训练过程中,我们将视觉编码器固定在所有阶段,并将文本解码器以及 LLM 固定在模态对齐阶段,除了表6中没有预训练的 BERT 模块。 遵循 [32] 中的策略,我们使用图3中设计的数据和指令优化可训练参数,在每个阶段运行 1 个 epoch。 对于视频输入,我们以每秒 1 帧的速度提取帧。 所有模型均使用 8×NVIDIA A100 GPU 进行训练。
| 组件 | 配置 |
|---|---|
| 视觉编码器 | EVA-G(ViT-large)预训练模型,输入分辨率224×224 / 336×336,冻结参数 |
| 文本解码器 | QFormer(BLIP-2),32个查询向量,阶段2微调时解冻参数 |
| LLM骨干 | Vicuna-7B/13B,阶段1冻结,阶段2/3微调 |
| 训练硬件 | 8×NVIDIA A100 (80GB),DeepSpeed Stage 2优化 |
| 帧采样策略 | 视频统一1 FPS采样,小时级视频最长支持64K Token(≈3小时) |
| 训练时间 | 每阶段1 epoch,总训练时间≤2天 |
| Token配置 | 视频:2 Tokens/帧(1 Context + 1 Content);图像:577 Tokens(1+576) |
训练数据集
| 阶段 | 数据构成 | 规模 | 来源 |
|---|---|---|---|
| 模态对齐 | 图像-文本对 | 558K | LLaVA-filtered CC3M [48] |
| 视频-文本对 | 232K | WebVid 2.5M [5] 采样 | |
| 指令微调 | 文本对话 | 40K | ShareGPT [1] |
| 图像/视频QA | 625K | VQA-v2 [19], ScienceQA [37], VizWiz [20] 等12个数据集 | |
| 视频专属QA | 98K | ActivityNet-QA [7] | |
| 长视频微调 | Long-VideoQA(自建) | 15K | MovieNet [21] 400+电影生成 |
| - 视频摘要(GPT-4生成) | 1K | 每电影1简洁摘要+1详细摘要 | |
| - 剧情级QA(角色/情节理解) | 4K | 每电影5情节推理+5角色分析 | |
| - 细节级QA(场景/动作描述) | 4K | Claude-2生成细粒度问题 | |
| - 上下文扩展数据 | 6K | LongAlpaca [12] |
评估基准
| 任务类型 | 数据集 | 评估指标 | 挑战点 |
|---|---|---|---|
| 视频理解 | MSVD-QA [8] | 准确率(Acc) | 开放域问答,1970视频片段 |
| MSRVTT-QA [58] | 准确率(Acc) | 10K网络视频,多事件推理 | |
| ActivityNet-QA [7] | 准确率(Acc) | 长视频时序理解(平均180秒/视频) | |
| Video-ChatGPT [39] | 5维人工评分(Correctness等) | 生成质量评估 | |
| 图像理解 | GQA [22] | 准确率(Acc) | 场景图推理 |
| MMBench [36] | 准确率(Acc) | 多模态综合能力评测 | |
| POPE [31] | F1分数 | 对象幻觉检测 | |
| VQAv2 [19] | 准确率(Acc) | 自然图像问答 | |
| VizWiz [20] | 准确率(Acc) | 盲人拍摄图像问答 |
实验结果
基于视频的基准测试结果:未进行第三阶段长视频微调,仅用2 Tokens/帧即超越所有SOTA,MSVD-QA提升+2.2%。Vicuna-13B进一步改善长视频时序理解(MSRVTT-QA +1.2%)
视频生成质量评测:在新提出的基于视频的生成性能基准 [39] 上进行了实验。Res.表示图像分辨率。Context Token显著提升指令相关性(Correctness +0.28)和时序一致性(Temporal +0.12)
基于图像的基准测试结果。LLaMA-VID 不仅可以有效地表示长视频,还可以通过一个额外的上下文token来扩展 VLM 的上限。 在表3中,我们对 8 个广泛采用的基准测试进行了与先进 VLM 的比较。
所提出的 LLaMA-VID 的通用性,它可以与更强大的基础模型进行扩展。 LLaMA-VID 被证明可以提高 VLM 的上限,尤其是在高效设置中。
VizWiz(盲人问答)提升+4.2% → Context Token增强指令适配能力。VQAv2达到80.0% SOTA → Content Token保留细节提升细粒度理解
定性结果。在图5中,将 LLaMA-VID 应用于不同类型的数据,包括单张图像、短视频和长电影。 我们用 577 个符元来表示单张图片,用 2 个符元来表示视频。 LLaMA-VID 展示了在不同输入下各种能力。 具体来说,对于单张图片,它专注于细节,并在没有任何文本线索的情况下准确识别人物。 此外,它还能将图像内容与多轮对话中的游戏剧情联系起来。 给定一个简短的预告片视频,LLaMA-VID 会总结整个剧情,并推断出电影名称、制作人和电影类型。 对于一部 3 小时的电影,该模型熟练地描述了故事情节,并展示了与剧情相关的推理和详细理解。
组件分析
在本小节中,我们默认情况下使用输入分辨率 224 和每张图片 2 个符元进行消融研究。 在这里,我们主要在基于图像的设置上进行实验,以调查每个组件的有效性。
生成token类型比较: 没有上下文token,压缩的内容token,无法适应输入指令,导致性能低下。 与单个内容token相比,指令引导的上下文token在所有数据集上都取得了显著的收益。 对每张图像使用两个符元,该模型在所有基准测试中取得了最佳性能。
生成token数量比较:视频场景:压缩至1 Token仅损失2-6%精度,计算开销降至0.8%。图像场景:保持576 Tokens,精度超越LLaVA-1.5
不同文本解码器的比较:对于 BERT,我们将其随机初始化为一个跨模态解码器,只保留前两层。 对于 QFormer,我们使用预训练的模块并将其固定以进行模态对齐。
上下文注意力中的响应。探索上下文注意力,在图6中可视化了20个得分最高的区域。具体来说,我们在应用 Softmax 函数之前在 Qt 中绘制前两个查询的归一化热图,该函数用于制定公式 1中的上下文token。 如图6所示,文本引导的查询 t 有效地将注意力集中在与输入问题相关的关键区域。 例如,在第二行,当询问图像是否描绘了一个渔村时,查询 t 更集中于河流沿岸的建筑物和一只海鸥。 这些都是常识中区分渔村的典型特征。 其他例子也证实,设计的上下文注意成功地实现了其在指令引导下构建上下文符元的目标。
结论
我们介绍了 LLaMA-VID,这是一种简单而有效的用于 VLM 的token生成方法。 LLaMA-VID 背后的核心概念是用上下文token和内容token来表示图像。 特别地,上下文token是根据输入指令生成的,而内容token是根据图像内容生成的。 根据预算,内容token可以压缩成一个符元,或者不压缩地表示。 它使我们能够表示保留细节的单个图像,并仅使用两个标记有效地对每个视频帧进行编码。 此外,我们构建了一个用于长达一小时的视频理解的指令数据集。 我们在几个基于视频和图像的基准测试上的实验证明了我们方法的优越性。 我们希望 LLaMA-VID 可以作为高效视觉表示的一个强大基准。