Project Icon

ViP-LLaVA

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

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

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

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

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

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

发布

  • [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快速开始

示例代码
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

训练

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,具有多层特征融合。
LLaVA-7B在8个V100(32G)上的预训练大约需要20小时

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

视觉指令微调

  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:我们所基于的代码库,它具有惊人的多模态能力!

项目侧边栏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号