- Paper:https://arxiv.org/abs/2402.03161
- Github:https://video-lavit.github.io/
- Title:Video-LaVIT: Unified Video-Language Pre-training with Decoupled Visual-Motional Tokenization
- Author:Yang Jin, 北大,快手
文章目录
- 1 Video-LaViT总结(省流版)
- 1.1 Video-LaViT是什么?
- 1.2 Video-LaViT能干什么?
- 1.2.1 图像/视频问答
- 1.2.2 文生图
- 1.2.3 文生视频
- 1.2.4 图生视频
- 2 Motivation
- 3 Method
- 3.1 关键帧与运动信息的获取与motion encoder
- 3.2 video detokenizer
- 4 训练细节
- 参考资料
1 Video-LaViT总结(省流版)
1.1 Video-LaViT是什么?
Video-LaViT是LaViT这篇工作的拓展,详见上一篇博客【大模型系列】Language-Vision Transformer(LaVIT, ICLR2024)
,作者同样来自于北大和快手。思路与LaViT类似,通过将视频分解为交替的关键帧和运动向量,关键帧采用LaViT中的Image tokenizer,运动向量则设计了一个Motion tokenizer来进行编码。然后通过[IMG]、[/IMG]和[MOV]、[/MOV]来区分。
1.2 Video-LaViT能干什么?
1.2.1 图像/视频问答
Video-LaViT可以理解图像和视频内容,并根据问题给出答案。
1.2.2 文生图
根据给定文本,生成对应的图片,毕竟基于LaViT开发的。
1.2.3 文生视频
根据给定文本,生成对应的视频。
![]() | ![]() |
"Sailboat sailing on a sunny day in a mountain lake" | "A steaming cup of coffee with mountains in the background. Resting during road trip" |
1.2.4 图生视频
根据给定图片,生成对应的视频。
![]() | ![]() |
![]() | ![]() |
2 Motivation
当前一些video tokenization工作的总结:
- 流行的方式是先将原始视频下采样为一系列的frames,再使用ViT-encoder进行处理,这种方式忽略了帧之间的时间动态信息。
- VideoPoet(2023):3D video tokenizer,使用long token sequence,导致只能处理短视频,长视频资源消耗太大。
解决上面问题的方式:
- 视频中存在大量的冗余信息,将视频分解为交替的关键帧(keyframe&motion vectors)【其实就是视频编码的思路】
分解之后的组合可以用更少的token来表示视频的时间动态; - 复用现成的纯图像LLM所获得的视觉知识,而只需专注于对是时间信息(temporal information)进行建模。
3 Method
- video tokenizer:将视频转化为离散的tokens,其中关键帧keyframe使用现成的image tokenizer(ViT-G/14 of EVA-CLIP);
- motion encoder:用于将temporal motion也转化为离散的token;
- video detokenizer:将LLM生成的video token恢复成视频。
3.1 关键帧与运动信息的获取与motion encoder
基于MPEG-4压缩技术来获取关键帧和运动信息。视频中的I帧就是关键帧。通常视频帧被分成16x16个宏块,运动信息motion vectors是通过寻找相邻帧之间的最佳就宏块对应关系来确定的。
m ⃗ ( p , q ) = a r g min i , j ∣ ∣ I t ( p , q ) − I t − 1 ( p − i , q − j ) ∣ ∣ \vec{m}(p, q) = arg\min_{i,j}||I_t(p,q)−I_{t-1}(p−i,q−j)|| m(p,q)=argi,jmin∣∣It(p,q)−It−1(p−i,q−j)∣∣
其中I(p, q)表示宏块在(p, q)的像素值,(i, j)是两个宏块中心的偏移量,于是视频可以分解为关键帧(HxWx3)和后续的T帧的运动矢量(Tx(H/16)x(W/16)x2)。
这段看不懂没关系,后面实际是采用ffmpeg来提取视频的关键帧I帧和运动向量P帧。
Source: I帧、P帧、B帧、GOP、IDR 和PTS, DTS之间的关系
运动矢量的tokenization与LaVIT的方式类似,先通过一个spatiotemporal encoder得到latent embedding,再与codebook中的向量计算L2距离,选择最近的codebook中的向量代替之,这就是所谓的Motion quantization,得到的结果就是motion vector的token,可参与后续的训练。
整个motion tokenizer通过一个解码器,来将motion token恢复,最后计算重构损失来更新参数。
3.2 video detokenizer
- key frame关键帧:de-noising U-Net,与LaVIT类似,使用重建的visual features作为条件去控制生成细节
video detokenizer依赖于motion vector的引导,来生成关键帧之后T帧的恢复。有2种不同的motion conditon forms:
1、给定motion vector:(Tx(H/16)x(W/16)x2),采用最近邻插值的方式,使其与UNet的输入相匹配;
2、关键帧key frame的latent state I(VAE产生)重复T以提供visual condition;
3、motion vector、key frame latent I和noisy video frame按通道拼接,作为video dekoenizer的输入;
4、使用3DUnet中的spatial temporal cross-attention block引入motion feature embedding来增强生成效果;
为了缓解单独解码带来的不同clip之间的细粒度视觉细节不一致,在解码关键帧时加入了明确的噪声约束。通过反转DDIM采样将最新一帧从先前生成的状态转化为中间的噪声状态。
4 训练细节
训练说明:
- [MOV][/MOV]用于区分运动模态
- 交换多模态数据对的顺序:[video(image),text]和 [text,video(image)]
- 以自回归的形式进行训练(在上一个预测的基础上预测下一个)
训练分为3个阶段:
Step1: 训练tokenizer和detokenizer,该阶段只需要视频数据,无需对应的captions,以生成视频的tokens,
- WebVid-10M,包含10M视频-文本对,含有水印;
- 训练detokenizer的时候,使用InterVid-14M-aesthetic数据的子集来去除生成视频中的水印,并提升生成视频的美感;
Step2: LLM训练,学习不同模态之间数据的关联;
- 混合视频、图像和文本数据:
- WebVid-10M
- Conceptual Caption 93M
- SBU
- BLIP-Capfit
- RedPajama英文语料库:用于保留LLM原本的语言理解能力
Step3: Instruction tuning:以适应不同的任务。
- LLaVA v1.5的665k图像文本指令数据集
- Video-ChatGPT的100k视频-文本指令数据集
参考资料
[1] I帧、P帧、B帧、GOP、IDR 和PTS, DTS之间的关系
[2] 【大模型系列】Language-Vision Transformer(LaVIT, ICLR2024)