支持长视频处理的多模态大语言模型
LLaMA-VID是一个新型多模态大语言模型,可处理长达数小时的视频。它通过增加上下文令牌扩展了现有框架的能力,采用编码器-解码器结构和定制令牌生成策略,实现对图像和视频的高效理解。该项目开源了完整的模型、数据集和代码,为视觉语言模型研究提供了有力工具。
<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 构建了这个仓库。
我们在本节提供了一些精选示例。更多示例可以在我们的项目页面找到。欢迎尝试我们的在线演示!
<div align=center> <img width="100%" src="https://yellow-cdn.veclightyear.com/835a84d5/1101496a-b714-42dc-9cf2-2af1808e2e82.png"/> </div>请按照以下说明安装所需的包。
git clone https://github.com/dvlab-research/LLaMA-VID.git
conda create -n llamavid python=3.10 -y conda activate llamavid cd LLaMA-VID pip install --upgrade pip # 启用 PEP 660 支持 pip install -e .
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 | 视觉编码器 | 微调数据 | 微调计划 | 下载 |
---|---|---|---|---|---|---|---|
仅图像 | 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 |
以下是在第 1 阶段数据上预训练的权重(文本解码器 + 上下文注意力 + 投影器): |
类型 | 图像大小 | 最大令牌数 | 基础 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-Pretrain
、LLaMA-VID-Finetune
和 LLaMA-VID-Eval
子目录下,遵循结构。
对于基于视频的数据集,请从 WebVid 下载 2.5M 子集,从官方网站或 video-chatgpt 下载 ActivityNet 数据集。 如果您想进行评估,还请从这里下载相应文件。您可以从这里下载 MSVD-QA,从这里下载 MSRVTT-QA。
对于长视频调优,请从 MovieNet 下载长视频数据,从这里下载镜头检测结果,从这里下载我们构建的长视频问答对。在预处理之前,请将镜头检测结果放在 LLaMA-VID-Finetune/movienet/files
下。
对于元信息,请下载以下文件并按照结构组织:
我们建议用户从以下链接下载预训练权重:Vicuna-7b-v1.5、Vicuna-13b-v1.5、EVA-ViT-G、QFormer-7b、QFormer-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 | 分辨率 | 模型 | 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
中找到。
无需 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
在这里,我们采用了类似于 LLaVA 的 Gradio 界面,为 LLaMA-VID 提供了用户友好的界面。 要在本地启动 Gradio 演示,请依次运行以下命令。如果你计划启动多个模型工作器以比较不同的检查点,你只需要启动控制器和 Web 服务器一次。
python -m llamavid.serve.controller --host 0.0.0.0 --port 10000
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 显存小于 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 位)启动模型工作器,这允许你以较低的 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、LLaMA、Vicuna和GPT-4的许可协议的使用。数据集采用CC BY NC 4.0许可(仅允许非商业用途),使用该数据集训练的模型不应用于研究目的以外的用途。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升 办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号