ViP-LLaVA

ViP-LLaVA

改进大型多模态模型的视觉提示理解能力

ViP-LLaVA项目旨在提升大型多模态模型对任意视觉提示的理解能力。通过在原始图像上叠加视觉提示进行指令微调,该方法使模型能更好地处理多样化的视觉输入。项目还开发了ViP-Bench,这是首个零样本区域级基准,用于评估多模态模型性能。ViP-LLaVA提供完整的训练流程、模型权重和演示,为视觉语言模型研究提供了有力支持。

ViP-LLaVA视觉语言模型多模态模型视觉提示CVPR2024Github开源项目

🎯 [CVPR2024] ViP-LLaVA:让大型多模态模型理解任意视觉提示

Mu CaiHaotian LiuSiva Karthik MustikovelaGregory P. MeyerYuning ChaiDennis ParkYong Jae Lee

方法:[项目主页] [演示] [模型库] [论文]

ViP-Bench:[下载数据集] [排行榜] [评估服务器]

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/9138be15-5d38-473a-8d46-d97ff4e0552d.png" width="80%">

发布

  • [04/26] 🔥 基于最新的Llama-3-8B和Phi-3-mini-3.8B语言模型的LLaVA和ViP-LLaVA现已可用
  • [02/26] 🔥 ViP-LLaVA被CVPR 2024接收!
  • [12/13] 🔥 我们的工作现已出现在Huggingface官方的transformers文档中!
  • [12/03] 🔥 我们发布了ViP-LLaVA:让大型多模态模型理解任意视觉提示。我们提出在视觉指令微调过程中直接将视觉提示叠加在原始图像上,使大型多模态模型能够以用户友好的方式理解任意视觉提示。查看论文演示。我们还为大型多模态模型构建了首个零样本区域级基准测试ViP-Bench

代码许可 数据许可

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

目录

安装

如果您不使用Linux,请勿继续,请参阅macOSWindows的说明。

  1. 克隆此仓库并进入ViP-LLaVA文件夹
cd ViP-LLaVA
  1. 安装包
conda create -n vip-llava python=3.10 -y conda activate vip-llava pip install --upgrade pip # 启用PEP 660支持 pip install -e .
  1. 为训练安装额外的包
pip install -e ".[train]"
pip install flash-attn --no-build-isolation

使用HuggingFace快速开始

<details> <summary>示例代码</summary>
from llava.model.builder import load_pretrained_model from llava.mm_utils import get_model_name_from_path from llava.eval.run_llava import eval_model model_path = "mucai/vip-llava-7b" prompt = "在指向的区域内显示了什么?" image_file = "https://pages.cs.wisc.edu/~mucai/man-cross-street.jpg" args = type('Args', (), { "model_path": model_path, "model_name": get_model_name_from_path(model_path), "query": prompt, "image_file": image_file, "conv_mode": None, "model_base": None, "temperature": 0.2, "top_p": None, "num_beams": 1, "max_new_tokens": 512, "sep": ",", })() eval_model(args)

查看llava/model/builder.py中的load_pretrained_model函数了解详细信息。

你也可以使用llava/eval/run_llava.py中的eval_model函数轻松获得输出。这样,你可以在下载此仓库后直接在Colab上使用此代码。

ViP-LLaVA 权重

请查看我们的模型库获取所有公开的ViP-LLaVA检查点,以及如何使用这些权重的说明。

演示

要运行我们的演示,你需要在本地准备LLaVA检查点。请按照此处的说明下载检查点。

Gradio Web 界面

要在本地启动Gradio演示,请逐个运行以下命令。如果你计划启动多个模型工作进程以比较不同的检查点,你只需启动控制器和Web服务器一次

启动控制器

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

启动Gradio Web服务器

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

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

启动模型工作进程

这是在GPU上执行推理的实际工作进程。每个工作进程负责--model-path中指定的单个模型。

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path mucai/vip-llava-13b

等待进程完成加载模型,直到看到"Uvicorn running on ..."。现在,刷新Gradio Web界面,你会在模型列表中看到刚刚启动的模型。

你可以启动任意数量的工作进程,并在同一个Gradio界面中比较不同的模型检查点。请保持--controller相同,并为每个工作进程修改--port--worker为不同的端口号。

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port <不同于40000,比如40001> --worker http://localhost:<相应更改,即40001> --model-path <ckpt2>

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

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

如果你的GPU VRAM小于24GB(例如,RTX 3090、RTX 4090等),你可以尝试使用多个GPU运行。我们的最新代码库会在你有多个GPU时自动尝试使用多个GPU。你可以使用CUDA_VISIBLE_DEVICES指定要使用的GPU。以下是使用前两个GPU运行的示例。

CUDA_VISIBLE_DEVICES=0,1 python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path mucai/vip-llava-13b

启动模型工作进程(4比特、8比特推理,量化)

你可以使用量化位数(4位、8位)来启动模型工作器,这样可以减少GPU内存占用,potentially允许你在只有12GB显存的GPU上运行推理。请注意,使用量化位数进行推理的准确度可能不如全精度模型。只需在你执行的模型工作器命令后附加--load-4bit--load-8bit即可。以下是使用4位量化运行的示例。

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path mucai/vip-llava-13b --load-4bit

CLI推理

无需Gradio界面即可使用ViP-LLaVA与图像进行对话。它还支持多GPU、4位和8位量化推理。使用4位量化时,对于我们的ViP-LLaVA-7B,在单个GPU上使用不到8GB显存。

python -m llava.serve.cli \ --model-path mucai/vip-llava-7b \ --image-file "https://pages.cs.wisc.edu/~mucai/man-cross-street.jpg" \ --load-4bit

或者使用边界框

python -m llava.serve.cli_vip --model-path ./checkpoints/vip-llava-7b --image-file "https://pages.cs.wisc.edu/~mucai/example_styletransfer.png" --bbox=100,200,200,300
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/c0bfa0aa-844c-42a1-a990-173e58d18f59.gif" width="70%">

训练

ViP-LLaVA训练包括三个阶段:(1) 特征对齐阶段:使用我们的LAION-CC-SBU数据集558K子集来连接冻结的预训练视觉编码器和冻结的LLM;(2) 视觉指令微调阶段:来自LLaVA-1.5的665K图像级指令数据和使用视觉提示的520K区域级指令数据。(3) 在GPT-4V数据上进行微调。

LLaVA在8个A100 GPU(80GB内存)上进行训练。要在较少的GPU上训练,你可以减少per_device_train_batch_size并相应增加gradient_accumulation_steps。始终保持全局批量大小不变:per_device_train_batch_size x gradient_accumulation_steps x num_gpus

超参数

我们在微调中使用了与Vicuna类似的超参数集。预训练和微调中使用的超参数如下所示。

  1. 预训练
超参数全局批量大小学习率轮数最大长度权重衰减
ViP-LLaVA-13B2561e-3120480
  1. 微调
超参数全局批量大小学习率轮数最大长度权重衰减
ViP-LLaVA-13B1282e-5120480

下载Vicuna检查点(自动)

我们的基础模型Vicuna v1.5(一个经过指令微调的聊天机器人)将在运行我们提供的训练脚本时自动下载。无需任何操作。

预训练(特征对齐)

请在这里下载我们在论文中使用的LAION-CC-SBU数据集558K子集(带有BLIP标题)。

ViP-LLaVA-13B的预训练在8个A100(80G)上大约需要5.5小时。ViP-LLaVA-7B大约需要3.5小时。

使用DeepSpeed ZeRO-2的训练脚本:pretrain.sh

  • --mm_projector_type mlp2x_gelu:两层MLP视觉-语言连接器。
  • --vision_tower clip_4layers_336:CLIP ViT-L/14 336px,具有多层特征融合。
<details> <summary>LLaVA-7B在8个V100(32G)上的预训练大约需要20小时</summary>

我们在这里提供了使用DeepSpeed的训练脚本。 提示:

</details>

视觉指令微调

  1. 准备数据 请从阶段2阶段3下载我们指令微调数据的注释,并从以下构成数据集下载图片:

下载完所有数据后,在./playground/data中按如下方式组织数据:

├── flickr30k-images
├── v7w
├── vcr1images
├── coco
│   └── train2017
├── gqa
│   └── images
├── ocr_vqa
│   └── images
├── textvqa
│   └── train_images
└── vg
    ├── VG_100K
    └── VG_100K_2
  1. 开始训练!

您可以从模型库下载我们预训练的投影器。不建议使用旧版投影器,因为它们可能是用不同版本的代码库训练的,如果有任何选项不匹配,模型将无法按预期运行/训练。

在8张A100(80G)上,LLaVA-v1.5-13B的视觉指令微调大约需要40小时。在8张A100(40G)上,LLaVA-v1.5-7B大约需要20小时。

使用DeepSpeed ZeRO-2的训练脚本:finetune_stage2.sh。如果您想进一步使用GPT-4V数据来增强对话能力,请查看使用DeepSpeed ZeRO-2的阶段3训练脚本:finetune_stage3.sh

如果您没有足够的GPU内存:

  • 使用LoRA:finetune_lora.sh。我们能够在8个A100-40G/8个A6000上进行13B的训练,在8个RTX3090上进行7B的训练。确保per_device_train_batch_size*gradient_accumulation_steps与提供的脚本相同,以获得最佳的可复现性。
  • zero3.json替换为zero3_offload.json,它会将一些参数卸载到CPU RAM。这会降低训练速度。

如果您有兴趣将LLaVA模型微调到您自己的任务/数据上,请查看Finetune_Custom_Data.md

评估

ViP-LLaVA在4个学术区域级基准测试和新提出的ViP-Bench上进行了评估。

详见Evaluation.md

引用

如果您发现ViP-LLaVA对您的研究和应用有用,请使用以下BibTeX进行引用:

@inproceedings{cai2024vipllava, author = {Cai, Mu and Liu, Haotian and Mustikovela, Siva Karthik and Meyer, Gregory P. and Chai, Yuning and Park, Dennis and Lee, Yong Jae}, title = {Making Large Multimodal Models Understand Arbitrary Visual Prompts}, booktitle = {IEEE Conference on Computer Vision and Pattern Recognition}, year = {2024} }

致谢

  • Vicuna:我们所基于的语言模型,以及我们的基础模型Vicuna-13B,它具有惊人的语言能力!

  • LLaVa:我们所基于的代码库,它具有惊人的多模态能力!

编辑推荐精选

讯飞智文

讯飞智文

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

下拉加载更多