Project Icon

LLaMA-VID

支持长视频处理的多模态大语言模型

LLaMA-VID是一个新型多模态大语言模型,可处理长达数小时的视频。它通过增加上下文令牌扩展了现有框架的能力,采用编码器-解码器结构和定制令牌生成策略,实现对图像和视频的高效理解。该项目开源了完整的模型、数据集和代码,为视觉语言模型研究提供了有力工具。

LLaMA-VID:大语言模型中一张图片值2个词元

LLaMA-VID 使现有框架能够支持长达数小时的视频,并通过额外的上下文词元推动其上限。我们基于 LLaVA 构建了这个仓库。

发布

  • [24/07/04] 🔥 我们的工作已被 ECCV 2024 接收!
  • [23/12/05] 🔥 我们发布了完整的训练和评估模型数据和脚本,以支持电影对话!
  • [23/11/29] 🔥 LLaMA-VID 来了!我们发布了 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 主要包含三个部分:编码器和解码器用于生成视觉嵌入和文本引导特征; 上下文词元和内容词元通过定制的词元生成策略进行转换; 指令微调旨在释放 LLM 在图像和视频方面的潜力。

我们提供了在第一阶段和第二阶段数据(长视频 + 第三阶段)上全面微调的所有 LLaMA-VID 模型:

类型图像大小最大词元数基础 LLM视觉编码器微调数据微调计划下载
仅图像2244KVicuna-7B-v1.5EVA-GLLaVA1.5-Instructfull_ft-1eckpt
仅图像3364KVicuna-7B-v1.5EVA-GLLaVA1.5-Instructfull_ft-1eckpt
仅图像3364KVicuna-13B-v1.5EVA-GLLaVA1.5-Instructfull_ft-1eckpt
短视频2244KVicuna-7B-v1.5EVA-GLLaVA1.5-VideoChatGPT-Instructfull_ft-1eckpt
短视频2244KVicuna-13B-v1.5EVA-GLLaVA1.5-VideoChatGPT-Instructfull_ft-1eckpt
长视频22464KVicuna-7B-v1.5EVA-GLLaVA1.5-VideoChatGPT-Instruct + LongVideoQAfull_ft-1eckpt
以下是在第 1 阶段数据上预训练的权重(文本解码器 + 上下文注意力 + 投影器):
类型图像大小最大令牌数基础 LLM视觉编码器预训练数据预训练计划下载
仅图像2244KVicuna-7B-v1.5EVA-GLCS-558K1eckpt
仅图像3364KVicuna-7B-v1.5EVA-GLCS-558K1eckpt
仅图像3364KVicuna-13B-v1.5EVA-GLCS-558K1eckpt
短视频2244KVicuna-7B-v1.5EVA-GLCS-558K-WebVid-232K1eckpt
短视频2244KVicuna-13B-v1.5EVA-GLCS-558K-WebVid-232K1eckpt

准备工作

数据集

我们提供了用于 LLaMA-VID 训练的处理过的基于图像的数据。我们按照 LLaVA 的格式组织数据,请按照这里的说明组织训练用的基于图像的数据,按照这里的说明组织评估用的基于图像的数据。 请将预训练数据、微调数据和评估数据分别放在 LLaMA-VID-PretrainLLaMA-VID-FinetuneLLaMA-VID-Eval 子目录下,遵循结构

对于基于视频的数据集,请从 WebVid 下载 2.5M 子集,从官方网站video-chatgpt 下载 ActivityNet 数据集。 如果您想进行评估,还请从这里下载相应文件。您可以从这里下载 MSVD-QA,从这里下载 MSRVTT-QA。

对于长视频调优,请从 MovieNet 下载长视频数据,从这里下载镜头检测结果,从这里下载我们构建的长视频问答对。在预处理之前,请将镜头检测结果放在 LLaMA-VID-Finetune/movienet/files 下。

对于元信息,请下载以下文件并按照结构组织:

预训练权重

我们建议用户从以下链接下载预训练权重: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)特征对齐阶段:连接视觉和语言标记;(2)指令微调阶段:教导模型遵循多模态指令;(3)长视频微调阶段:扩展位置嵌入并教导模型遵循长达数小时的视频指令。

LLaMA-VID在8张80GB内存的A100 GPU上进行训练。如果使用更少的GPU,你可以减少per_device_train_batch_size并相应增加gradient_accumulation_steps。请始终保持全局批量大小不变:per_device_train_batch_size x gradient_accumulation_steps x 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和更少的视觉标记:

bash scripts/image_only/train/stage_1_2_full_v7b_224_grid_4.sh

更多训练脚本可以在scripts/image_only/train中找到。

短视频

如果你对在基于短视频的数据上训练和微调LLaMA-VID感兴趣,请使用以下命令运行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 <path to movienet video> \
    --files_dir <path to movienet files> \ # 下载的MovieNet.tar.gz中的文件
    --feat_dir <path to output features>

然后运行以下命令对Vicuna-7B进行训练,图像尺寸为224:

bash scripts/video/train/stage_3_full_v7b_224_longvid.sh

评估

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

仅图像

LLM分辨率模型GQAMMBMMEPOPESEEDSQA-ImageVizWizVQA v2
Vicuna-7B224ckpt63.065.31405.686.659.767.752.578.3
Vicuna-7B336ckpt64.365.11521.486.059.968.354.279.3
Vicuna-13B336ckpt65.066.61542.386.062.370.054.380.0

如果你想在基于图像的基准上评估模型,请使用scripts/image_only/eval中的脚本。 例如,运行以下命令进行GQA评估:

bash scripts/image_only/eval/gqa.sh

更多评估脚本可以在scripts/image_only/eval中找到。

视频

LLM分辨率模型MSVD-QAMSRVTT-QAActivityNet-QA正确性细节上下文时间性一致性
Vicuna-7B224ckpt69.757.747.42.963.003.532.462.51
Vicuna-13B224ckpt70.058.947.53.073.053.602.582.63

如果你想在基于视频的基准上评估模型,请使用scripts/video/eval中的脚本。 例如,运行以下命令进行MSVD-QA评估:

bash scripts/video/eval/msvd_eval.sh

更多评估脚本可以在scripts/video/eval中找到。

CLI 推理

无需 Gradio 界面即可使用 LLaMA-VID 与图像和视频聊天。它还支持多 GPU、4 位和 8 位量化推理。使用 4 位量化。 请尝试以下命令进行图像或视频推理:

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

你已经启动了 Gradio Web 界面。现在,你可以使用屏幕上打印的 URL 打开 Web 界面。你可能会注意到模型列表中没有模型。不用担心,因为我们还没有启动任何模型工作器。当你启动模型工作器时,它会自动更新。

启动模型工作器

这是在 GPU 上执行推理的实际"工作器"。每个工作器负责 --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 Web 界面,你会在模型列表中看到你刚刚启动的模型。

你可以启动任意数量的工作器,并在同一个 Gradio 界面中比较不同的模型。例如,这里是短视频模型。请保持 --controller 不变,并为每个工作器修改 --port--worker 为不同的端口号。

python -m llamavid.serve.model_worker_short --host 0.0.0.0 --controller http://localhost:10000 --port <与 40000 不同,比如 40001> --worker http://localhost:<相应更改,即 40001> --model-path work_dirs/llama-vid/llama-vid-7b-full-224-video-fps-1

如果你使用的是带有 M1 或 M2 芯片的 Apple 设备,可以使用 --device 标志指定 mps 设备:--device mps

启动模型工作器(多 GPU,当 GPU VRAM <= 24GB)

如果你的 GPU 显存小于 24GB(例如 RTX 3090、RTX 4090 等),你可以尝试使用多个 GPU 运行。我们最新的代码库会在你有多个 GPU 的情况下自动尝试使用多个 GPU。你可以使用 CUDA_VISIBLE_DEVICES 指定要使用的 GPU。以下是使用前两个 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 位推理,量化)

你可以使用量化位(4 位、8 位)启动模型工作器,这允许你以较低的 GPU 内存占用进行推理。请注意,使用量化位进行推理可能不如全精度模型准确。只需在你正在执行的模型工作器命令中添加 --load-4bit--load-8bit。以下是使用 4 位量化运行的示例。

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}
}

致谢

我们要感谢以下仓库的出色工作:

  • 本工作基于 LLaVA
  • 本工作使用了来自 Vicuna 的 LLM。
  • 本工作使用了来自 InstructBLIP 的预训练权重。
  • 我们从 Video-ChatGPT 进行基于视频的评估。

许可证

代码许可证 数据许可证 权重许可证

数据和检查点仅供研究使用,并受此许可限制。它们还受限于遵守LLaVA、LLaMA、Vicuna和GPT-4的许可协议的使用。数据集采用CC BY NC 4.0许可(仅允许非商业用途),使用该数据集训练的模型不应用于研究目的以外的用途。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号