OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  LLaMA-VID — 支持长视频理解的多模态大模型项目

LLaMA-VID — 支持长视频理解的多模态大模型项目

 
  back ·  2026-06-15 11:00:17 · 24 次点击  · 0 条评论  

LLaMA-VID:大语言模型中一张图像仅需2个Token

Project Page
Demo
Paper
Hugging Face Models
Hugging Face Data

LLaMA-VID 可支持现有框架处理长达一小时的视频,并通过引入额外的上下文 Token 来提升其上限。本代码库基于 LLaVA 构建。

发布信息

  • [24/07/04] 🔥 我们的工作被 ECCV 2024 接收!
  • [23/12/05] 🔥 发布完整训练和评估所需的模型数据及脚本,支持电影对话!
  • [23/11/29] 🔥 LLaMA-VID 来了!我们发布了论文代码数据模型演示

目录

演示

本节提供精选示例。更多示例可参考项目主页。欢迎试用我们的在线演示

安装

请按照以下说明安装所需包。

  1. 克隆仓库:
git clone https://github.com/dvlab-research/LLaMA-VID.git
  1. 安装依赖:
conda create -n llamavid python=3.10 -y
conda activate llamavid
cd LLaMA-VID
pip install --upgrade pip  # 启用 PEP 660 支持
pip install -e .
  1. 安装训练所需的额外包:
pip install ninja
pip install flash-attn --no-build-isolation

模型

LLaMA-VID 包含三个部分:编码器和解码器分别用于生成视觉嵌入和文本引导特征;通过定制的 Token 生成策略转换上下文 Token 和内容 Token;通过指令微调释放 LLM 在图像和视频方面的潜力。

以下是我们基于 Stage 1 和 Stage 2 数据(长视频 + Stage 3)全量微调的模型:

类型 图像尺寸 最大 Token 基础 LLM 视觉编码器 微调数据 微调调度 下载
仅图像 224 4K Vicuna-7B-v1.5 EVA-G LLaVA1.5-Instruct full_ft-1e ckpt
仅图像 336 4K Vicuna-7B-v1.5 EVA-G LLaVA1.5-Instruct full_ft-1e ckpt
仅图像 336 4K Vicuna-13B-v1.5 EVA-G LLaVA1.5-Instruct full_ft-1e ckpt
短视频 224 4K Vicuna-7B-v1.5 EVA-G LLaVA1.5-VideoChatGPT-Instruct full_ft-1e ckpt
短视频 224 4K Vicuna-13B-v1.5 EVA-G LLaVA1.5-VideoChatGPT-Instruct full_ft-1e ckpt
长视频 224 64K Vicuna-7B-v1.5 EVA-G LLaVA1.5-VideoChatGPT-Instruct + LongVideoQA full_ft-1e ckpt

以下是仅基于 Stage 1 数据预训练的权重(文本解码器 + 上下文注意力 + 投影器):

类型 图像尺寸 最大 Token 基础 LLM 视觉编码器 预训练数据 预训练调度 下载
仅图像 224 4K Vicuna-7B-v1.5 EVA-G LCS-558K 1e ckpt
仅图像 336 4K Vicuna-7B-v1.5 EVA-G LCS-558K 1e ckpt
仅图像 336 4K Vicuna-13B-v1.5 EVA-G LCS-558K 1e ckpt
短视频 224 4K Vicuna-7B-v1.5 EVA-G LCS-558K-WebVid-232K 1e ckpt
短视频 224 4K Vicuna-13B-v1.5 EVA-G LCS-558K-WebVid-232K 1e ckpt

准备工作

数据集

我们提供用于 LLaMA-VID 训练的基于图像的数据。数据格式与 LLaVA 一致,请按照 此说明 组织训练图像数据,并按 此说明 组织评估图像数据。请将预训练数据、微调数据和评估数据分别放入 LLaMA-VID-PretrainLLaMA-VID-FinetuneLLaMA-VID-Eval 子目录中。

对于视频数据集,请从 WebVid 下载 2.5M 子集,从 ActivityNet 官网video-chatgpt 下载 ActivityNet 数据集。如需执行评估,请从此 链接 下载相应文件。可从 此处 下载 MSVD-QA,从 此处 下载 MSRVTT-QA。

对于长视频微调,请从 MovieNet 下载长视频数据,从 此处 下载镜头检测结果,并从 此处 下载我们构建的长视频 QA 对。预处理前,将镜头检测结果放入 LLaMA-VID-Finetune/movienet/files

元数据文件请下载以下文件并按照 结构说明 组织。

数据文件名 大小
blip_laion_cc_sbu_558k.json 181M
llava_v1_5_mix665k.json 1.03G
llava_558k_with_webvid.json 254 MB
llava_v1_5_mix665k_with_video_chatgpt.json 860 MB
llava_v1_5_mix665k_with_video_chatgpt_maxtime_5min.json 860 MB
long_videoqa.json 260MB

预训练权重

建议用户从以下链接下载预训练权重:Vicuna-7b-v1.5Vicuna-13b-v1.5EVA-ViT-GQFormer-7bQFormer-13b,并按 结构 放入 model_zoo 目录。

目录结构

训练前的目录结构如下:

LLaMA-VID
├── llamavid
├── scripts
├── work_dirs
│   ├── llama-vid
│   │   ├── llama-vid-13b-full-336
│   │   ├── ...
├── model_zoo
│   ├── LLM
│   │   ├── vicuna
│   │   │   ├── 7B-V1.5
│   │   │   ├── 13B-V1.5
│   ├── LAVIS
│   │   ├── eva_vit_g.pth
│   │   ├── instruct_blip_vicuna7b_trimmed.pth
│   │   ├── instruct_blip_vicuna13b_trimmed.pth
├── data
│   ├── LLaMA-VID-Pretrain
│   │   ├── blip_laion_cc_sbu_558k.json
│   │   ├── llava_558k_with_webvid.json
│   │   ├── images
│   │   ├── videos
│   ├── LLaMA-VID-Finetune
│   │   ├── llava_v1_5_mix665k.json
│   │   ├── llava_v1_5_mix665k_maxround_6_total_921k.json
│   │   ├── llava_v1_5_mix665k_maxround_12_total_714k.json
│   │   ├── llava_v1_5_mix665k_with_video_chatgpt.json
│   │   ├── llava_v1_5_mix665k_with_video_chatgpt_maxtime_5min.json
│   │   ├── long_videoqa.json
│   │   ├── movienet
│   │   ├── activitynet
│   │   ├── coco
│   │   ├── gqa
│   │   ├── ocr_vqa
│   │   ├── textvqa
│   │   ├── vg
│   ├── LLaMA-VID-Eval
│   │   ├── gqa
│   │   ├── ...

训练

LLaMA-VID 训练分为三个阶段:
1. 特征对齐阶段:桥接视觉和语言 Token。
2. 指令微调阶段:教会模型遵循多模态指令。
3. 长视频微调阶段:扩展位置嵌入,教会模型处理长达一小时的视频指令。

LLaMA-VID 在 8 张 80GB 显存的 A100 GPU 上训练。如果 GPU 数量较少,可以降低 per_device_train_batch_size 并相应增加 gradient_accumulation_steps。请保持全局批次大小不变:per_device_train_batch_size × gradient_accumulation_steps × num_gpus

训练前请确保按照 准备工作 下载并组织好数据。

仅图像模型

如果仅需在图像数据上训练和微调 LLaMA-VID,请运行以下命令(以 Vicuna-7B、图像尺寸 336 为例):

bash scripts/image_only/train/stage_1_2_full_v7b_336.sh

或 Vicuna-13B、图像尺寸 336:

bash scripts/image_only/train/stage_1_2_full_v13b_336.sh

也可以尝试更小的图像尺寸 224 和更少的视觉 Token:

bash scripts/image_only/train/stage_1_2_full_v7b_224_grid_4.sh

更多训练脚本请见 scripts/image_only/train

短视频模型

如需在短视频数据上训练和微调,请运行以下命令(以 Vicuna-7B、图像尺寸 224 为例):

bash scripts/video/train/stage_1_2_full_v7b_224_fps_1.sh

或 Vicuna-13B、图像尺寸 224:

bash scripts/video/train/stage_1_2_full_v13b_224_fps_1.sh

更多训练脚本请见 scripts/video/train

长视频模型

我们提供长视频训练的数据集和脚本。请按照 准备工作 下载长视频数据,并按 目录结构 整理。

在训练阶段,首先从长视频中提取所有帧并本地保存视觉特征以提高效率:

python scripts/extra_tool/extract_movienet_features.py \
    --video_dir <movienet 视频路径> \
    --files_dir <movienet 文件路径> \ # 从下载的 MovieNet.tar.gz 中提取的文件
    --feat_dir <特征输出路径>

然后运行以下命令(以 Vicuna-7B、图像尺寸 224 为例):

bash scripts/video/train/stage_3_full_v7b_224_longvid.sh

评估

我们在基于图像和视频的基准上进行了评估。请按照 准备工作 下载评估数据,并按 目录结构 组织。

仅图像评估

LLM 分辨率 模型 GQA MMB MME POPE SEED SQA-Image VizWiz VQA v2
Vicuna-7B 224 ckpt 63.0 65.3 1405.6 86.6 59.7 67.7 52.5 78.3
Vicuna-7B 336 ckpt 64.3 65.1 1521.4 86.0 59.9 68.3 54.2 79.3
Vicuna-13B 336 ckpt 65.0 66.6 1542.3 86.0 62.3 70.0 54.3 80.0

如需评估图像模型,请使用 scripts/image_only/eval 中的脚本。例如,运行 GQA 评估:

bash scripts/image_only/eval/gqa.sh

更多评估脚本请见 scripts/image_only/eval

视频评估

LLM 分辨率 模型 MSVD-QA MSRVTT-QA ActivityNet-QA 正确性 细节 上下文 时序 一致性
Vicuna-7B 224 ckpt 69.7 57.7 47.4 2.96 3.00 3.53 2.46 2.51
Vicuna-13B 224 ckpt 70.0 58.9 47.5 3.07 3.05 3.60 2.58 2.63

如需评估视频模型,请使用 scripts/video/eval 中的脚本。例如,运行 MSVD-QA 评估:

bash scripts/video/eval/msvd_eval.sh

更多评估脚本请见 scripts/video/eval

命令行推理

使用 LLaMA-VID 与图像或视频对话,无需 Gradio 界面,支持多 GPU、4 位和 8 位量化推理。以下为图像或视频推理示例:

python -m llamavid.serve.cli \
    --model-path work_dirs/llama-vid/llama-vid-7b-full-336 \
    --image-file <图像路径>

视频推理:

python -m llamavid.serve.cli \
    --model-path work_dirs/llama-vid/llama-vid-7b-full-224-video-fps-1 \
    --image-file <视频路径> \
    --temperature 0.5

4 位或 8 位量化推理:

python -m llamavid.serve.cli \
    --model-path work_dirs/llama-vid/llama-vid-7b-full-224-video-fps-1 \
    --image-file <视频路径> \
    --temperature 0.5 \
    --load-4bit

长视频推理

对于 movienet 中的长视频,请先处理视频数据和字幕:

python scripts/extra_tool/extract_movienet_features.py \
    --video_dir <movienet 视频路径> \
    --files_dir <movienet 文件路径> \ # 从下载的 MovieNet.tar.gz 中提取的文件
    --feat_dir <特征输出路径>

对于自定义视频:

python scripts/extra_tool/extract_video_features_subtitles.py \
    --video_file <自定义视频路径> \
    --feat_dir <特征输出路径>

然后进行长视频推理:

python llamavid/serve/run_llamavid_movie.py \
    --model-path work_dirs/llama-vid/llama-vid-7b-full-224-long-video \
    --video-file <已处理视频路径> \
    --load-4bit

Gradio Web 界面

采用与 LLaVA 类似的 Gradio 界面,为 LLaMA-VID 提供用户友好的交互体验。

启动本地 Gradio 演示,请依次运行以下命令。如需启动多个模型工作节点以比较不同检查点,只需启动一次控制器和 Web 服务器。

启动控制器

python -m llamavid.serve.controller --host 0.0.0.0 --port 10000

启动 Gradio Web 服务器

python -m llamavid.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload

打开屏幕显示的 URL 即可看到 Gradio 界面。模型列表可能为空,启动模型工作节点后会自动更新。

启动模型工作节点

每个工作节点负责 --model-path 指定的一个模型:

python -m llamavid.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path work_dirs/llama-vid/llama-vid-vicuna-7b-short

等待模型加载完成并看到 "Uvicorn running on ..." 后,刷新 Gradio 界面即可看到模型。

可启动多个工作节点比较不同模型。保持 --controller 不变,为每个工作节点修改 --port--worker

python -m llamavid.serve.model_worker_short --host 0.0.0.0 --controller http://localhost:10000 --port <其他端口> --worker http://localhost:<对应端口> --model-path work_dirs/llama-vid/llama-vid-7b-full-224-video-fps-1

Apple M1/M2 芯片用户可通过 --device mps 指定设备。

多 GPU 启动(GPU 显存 ≤ 24GB)

显存小于 24GB 时,可使用多 GPU。通过 CUDA_VISIBLE_DEVICES 指定 GPU:

CUDA_VISIBLE_DEVICES=0,1 python -m llamavid.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path work_dirs/llama-vid/llama-vid-7b-full-224-long-video

量化推理(4 位、8 位)

附加 --load-4bit--load-8bit 参数:

python -m llamavid.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path work_dirs/llama-vid/llama-vid-7b-full-224-long-video --load-4bit

示例

本节提供部分示例。更多示例请见项目主页

引用

如果您觉得本项目对研究有帮助,请引用我们的论文:

@inproceedings{li2024llamavid,
  title={LLaMA-VID: An Image is Worth 2 Tokens in Large Language Models},
  author={Li, Yanwei and Wang, Chengyao and Jia, Jiaya},
  journal={European Conference on Computer Vision},
  year={2024}
}

致谢

感谢以下开源项目为本工作提供的支持:

许可证

Code License
Data License
Weight License

数据与检查点仅限研究用途,且须遵守 LLaVA、LLaMA、Vicuna 和 GPT-4 的许可协议。数据集采用 CC BY NC 4.0(仅限非商业用途)许可,基于该数据集训练的模型不得用于研究以外的用途。

24 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 26 ms
Developed with Cursor