LLaMA-VID

LLaMA-VID

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

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

LLaMA-VID大语言模型视觉语言模型多模态视频理解Github开源项目

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

<a href='https://llama-vid.github.io/'><img src='https://img.shields.io/badge/项目-主页-绿色'></a> <a href='http://103.170.5.190:7864/'><img src='https://img.shields.io/badge/项目-演示-紫色'></a> <a href='https://arxiv.org/abs/2311.17043'><img src='https://img.shields.io/badge/论文-Arxiv-红色'></a> <a href='https://huggingface.co/YanweiLi'><img src='https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-模型-蓝色'></a> <a href='https://huggingface.co/datasets/YanweiLi/LLaMA-VID-Data'><img src='https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-数据-绿色'></a>

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

发布

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

目录

演示

我们在本节提供了一些精选示例。更多示例可以在我们的项目页面找到。欢迎尝试我们的在线演示

<div align=center> <img width="100%" src="https://yellow-cdn.veclightyear.com/835a84d5/1101496a-b714-42dc-9cf2-2af1808e2e82.png"/> </div>

安装

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

  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 在图像和视频方面的潜力。

<div align=center> <img width="100%" src="https://yellow-cdn.veclightyear.com/835a84d5/ff873e63-204c-4783-863e-c80433e4e9e4.png"/> </div>

我们提供了在第一阶段和第二阶段数据(长视频 + 第三阶段)上全面微调的所有 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 下。

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

数据文件名大小
blip_laion_cc_sbu_558k.json181M
llava_v1_5_mix665k.json1.03G
llava_558k_with_webvid.json254 MB
llava_v1_5_mix665k_with_video_chatgpt.json860 MB
llava_v1_5_mix665k_with_video_chatgpt_maxtime_5min.json860 MB
long_videoqa.json260MB

预训练权重

我们建议用户从以下链接下载预训练权重: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

示例

我们在本节提供了一些示例。更多示例可以在我们的项目页面中找到。

<div align=center> <img width="100%" src="https://yellow-cdn.veclightyear.com/835a84d5/d6f45abf-9792-439d-b1e0-44de114f0a74.png"/> </div>

引用

如果你觉得这个仓库对你的研究有用,请考虑引用以下论文

@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许可(仅允许非商业用途),使用该数据集训练的模型不应用于研究目的以外的用途。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多