Video-LLaMA:一个用于视频理解的指令调优音视频语言模型
这是Video-LLaMA项目的代码仓库,该项目致力于赋予大型语言模型视频和音频理解能力。
新闻
-
[2024.06.03] 🚀🚀 我们正式发布VideoLLaMA2,性能更强,使用更简便,快来试试吧!
- [11.14] ⭐️ 当前README文件仅适用于Video-LLaMA-2(使用LLaMA-2-Chat作为语言解码器),使用之前版本Video-LLaMA(使用Vicuna作为语言解码器)的说明可以在这里找到。
- [08.03] 🚀🚀 发布Video-LLaMA-2,使用Llama-2-7B/13B-Chat作为语言解码器
- [06.14] 注意:当前的在线交互演示主要用于英语对话,由于Vicuna/LLaMA对中文文本的表示不太好,因此可能不适合用于提问中文问题。
- [06.13] 注意:目前音频支持仅适用于Vicuna-7B,尽管我们为其他解码器提供了几个视觉语言检查点。
- [06.10] 注意:我们尚未更新HF演示,因为整个框架(包括音频分支)无法在A10-24G上正常运行。当前运行的演示仍是Video-LLaMA的前一版本。我们将尽快解决这个问题。
- [06.08] 🚀🚀 发布支持音频的Video-LLaMA检查点。文档和示例输出也已更新。
- [05.22] 🚀🚀 交互式演示上线,在Hugging Face和ModelScope上试用我们的Video-LLaMA(使用Vicuna-7B作为语言解码器)!!
- [05.22] ⭐️ 发布使用Vicuna-7B构建的Video-LLaMA v2
- [05.18] 🚀🚀 支持中文视频对话
- Video-LLaMA-BiLLA:我们引入BiLLa-7B-SFT作为语言解码器,并使用机器翻译的VideoChat指令对视频-语言对齐模型(即第一阶段模型)进行微调。
- Video-LLaMA-Ziya:与Video-LLaMA-BiLLA相同,但语言解码器更改为Ziya-13B。
- [05.18] ⭐️ 在Hugging Face上创建一个仓库,用于存储我们所有Video-LLaMA变体的模型权重。
- [05.15] ⭐️ 发布Video-LLaMA v2:我们使用VideoChat提供的训练数据进一步增强Video-LLaMA的指令遵循能力。
- [05.07] 发布Video-LLaMA的初始版本,包括其预训练和指令调优的检查点。
- Video-LLaMA 基于 BLIP-2 和 MiniGPT-4 构建。它由两个核心组件组成:(1) 视觉-语言 (VL) 分支和 (2) 音频-语言 (AL) 分支。
- VL 分支(视觉编码器:ViT-G/14 + BLIP-2 Q-Former)
- AL 分支(音频编码器:ImageBind-Huge)
- 引入了两层音频 Q-Former 和一个音频片段嵌入层(应用于每个音频片段的嵌入)来计算音频表示。
- 由于使用的音频编码器(即 ImageBind)已经在多个模态之间对齐,我们仅在视频/图像指令数据上训练 AL 分支,只是为了将 ImageBind 的输出连接到语言解码器。
- 在跨模态训练期间,只有视频/音频 Q-Former、位置嵌入层和线性层是可训练的。
示例输出
- 带背景音的视频
- 无音效的视频
- 静态图像
预训练和微调的检查点
以下检查点是启动 Video-LLaMA 的完整权重(视觉编码器 + 音频编码器 + Q-Formers + 语言解码器):
检查点 | 链接 | 说明 |
---|---|---|
Video-LLaMA-2-7B-Pretrained | 链接 | 在 WebVid(250 万视频-字幕对)和 LLaVA-CC3M(59.5 万图像-字幕对)上预训练 |
Video-LLaMA-2-7B-Finetuned | 链接 | 在来自 MiniGPT-4、LLaVA 和 VideoChat 的指令微调数据上进行微调 |
Video-LLaMA-2-13B-Pretrained | 链接 | 在 WebVid(250 万视频-字幕对)和 LLaVA-CC3M(59.5 万图像-字幕对)上预训练 |
Video-LLaMA-2-13B-Finetuned | 链接 | 在来自 MiniGPT-4、LLaVA 和 VideoChat 的指令微调数据上进行微调 |
使用方法
环境准备
首先,安装 ffmpeg。
apt update
apt install ffmpeg
然后,创建一个 conda 环境:
conda env create -f environment.yml
conda activate videollama
先决条件
现在不需要做任何事情!
如何在本地运行演示
首先,在 eval_configs/video_llama_eval_withaudio.yaml 中相应地设置 llama_model
(语言解码器的路径)、imagebind_ckpt_path
(音频编码器的路径)、ckpt
(VL 分支的路径)和 ckpt_2
(AL 分支的路径)。
然后运行脚本:
python demo_audiovideo.py \
--cfg-path eval_configs/video_llama_eval_withaudio.yaml \
--model_type llama_v2 \ # 或 vicuna
--gpu-id 0
训练
Video-LLaMA 中每个跨模态分支(即 VL 分支或 AL 分支)的训练包括两个阶段,
- 在 Webvid-2.5M 视频字幕数据集和 LLaVA-CC3M 图像字幕数据集上进行预训练。
- 使用来自MiniGPT-4/LLaVA的基于图像的指令调优数据和来自VideoChat的基于视频的指令调优数据进行微调。
1. 预训练
数据准备
按照Webvid官方Github仓库的说明下载元数据和视频。 数据集的文件夹结构如下所示:
|webvid_train_data
|──filter_annotation
|────0.tsv
|──videos
|────000001_000050
|──────1066674784.mp4
|cc3m
|──filter_cap.json
|──image
|────GCC_train_000000000.jpg
|────...
脚本
分别在visionbranch_stage1_pretrain.yaml和audiobranch_stage1_pretrain.yaml中配置检查点和数据集路径。然后运行以下脚本:
conda activate videollama
# 用于预训练VL分支
torchrun --nproc_per_node=8 train.py --cfg-path ./train_configs/audiobranch_stage1_pretrain.yaml
# 用于预训练AL分支
torchrun --nproc_per_node=8 train.py --cfg-path ./train_configs/audiobranch_stage1_pretrain.yaml
2. 指令微调
数据
目前,微调数据集包括:
脚本
分别在visionbranch_stage2_pretrain.yaml和audiobranch_stage2_pretrain.yaml中配置检查点和数据集路径。然后运行以下脚本:
conda activate videollama
# 用于微调VL分支
torchrun --nproc_per_node=8 train.py --cfg-path ./train_configs/visionbranch_stage2_finetune.yaml
# 用于微调AL分支
torchrun --nproc_per_node=8 train.py --cfg-path ./train_configs/audiobranch_stage2_finetune.yaml
推荐的GPU配置
- 预训练:8块A100(80G)
- 指令调优:8块A100(80G)
- 推理:1块A100(40G/80G)或1块A6000
致谢
我们非常感谢以下优秀项目,Video-LLaMA正是在它们的基础上发展而来:
- MiniGPT-4:使用先进的大型语言模型增强视觉语言理解
- FastChat:用于训练、部署和评估基于大型语言模型的聊天机器人的开放平台
- BLIP-2:使用冻结的图像编码器和大型语言模型引导语言-图像预训练
- EVA-CLIP:改进的大规模CLIP训练技术
- ImageBind:统一多模态嵌入空间
- LLaMA:开放高效的基础语言模型
- VideoChat:以聊天为中心的视频理解
- LLaVA:大型语言和视觉助手
- WebVid:大规模视频-文本数据集
- mPLUG-Owl:模块化赋能多模态大型语言模型
Video-LLaMA的标志由Midjourney生成。
使用条款
我们的Video-LLaMA仅是一个研究预览版,仅供非商业用途。您绝对不得将我们的Video-LLaMA用于任何非法、有害、暴力、种族主义或色情用途。您被严格禁止从事任何可能违反这些准则的活动。
引用
如果您觉得我们的项目有用,希望您能为我们的仓库点个星,并按如下方式引用我们的论文:
@article{damonlpsg2023videollama,
author = {Zhang, Hang and Li, Xin and Bing, Lidong},
title = {Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding},
year = 2023,
journal = {arXiv preprint arXiv:2306.02858},
url = {https://arxiv.org/abs/2306.02858}
}