Project Icon

MGM

多模态视觉语言模型的潜力挖掘与创新

Mini-Gemini项目探索多模态视觉语言模型的新可能。该项目支持2B至34B规模的大语言模型,实现图像理解、推理和生成功能。基于LLaVA构建的Mini-Gemini提供完整资源,包括预训练权重、数据集和评估基准。通过双视觉编码器和patch信息挖掘等技术创新,Mini-Gemini实现了文本与图像的深度融合。

"Mini-Gemini:挖掘多模态视觉语言模型潜力"官方代码库

该框架支持从2B到34B的一系列密集和混合专家大语言模型(LLMs),同时具备图像理解、推理和生成能力。我们基于LLaVA构建了这个代码库。

发布

目录

演示

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

安装

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

注意:如果您想使用2B版本,请确保安装最新版本的Transformers(>=4.38.0)。

  1. 克隆此仓库
git clone https://github.com/dvlab-research/MGM.git
  1. 安装软件包
conda create -n mgm python=3.10 -y
conda activate mgm
cd MGM
pip install --upgrade pip  # 启用PEP 660支持
pip install -e .
  1. 为训练情况安装额外的软件包
pip install ninja
pip install flash-attn --no-build-isolation

模型

该框架在概念上很简单:使用双视觉编码器提供低分辨率视觉嵌入和高分辨率候选项; 提出了补丁信息挖掘来在高分辨率区域和低分辨率视觉查询之间进行补丁级挖掘; 利用LLM将文本与图像结合,同时实现理解和生成。

我们提供了在第1阶段和第2阶段数据上全面微调的所有模型:

模型低分辨率高分辨率基础LLM视觉编码器微调数据微调计划下载
MGM-2B336768Gemma-2BCLIP-LMGM-Instructfull_ft-1eckpt
MGM-7B336768Vicuna-7B-v1.5CLIP-LMGM-Instructfull_ft-1eckpt
MGM-13B336768Vicuna-13B-v1.5CLIP-LMGM-Instructfull_ft-1eckpt
MGM-8B336768LLaMA-3-8B-InstructCLIP-LMGM-Instructfull_ft-1eckpt
MGM-8x7B336768Mixtral-8x7B-Instruct-v0.1CLIP-LMGM-Instructfull_ft-1eckpt
MGM-34B336768Nous-Hermes-2-Yi-34BCLIP-LMGM-Instructfull_ft-1eckpt
MGM-7B-HD6721536Vicuna-7B-v1.5CLIP-LMGM-Instructfull_ft-1eckpt
MGM-13B-HD6721536Vicuna-13B-v1.5CLIP-LMGM-Instructfull_ft-1eckpt
MGM-8B-HD6721536LLaMA-3-8B-InstructCLIP-LMGM-Instructfull_ft-1eckpt
MGM-8x7B-HD6721536Mixtral-8x7B-Instruct-v0.1CLIP-LMGM-Instructfull_ft-1eckpt
MGM-34B-HD6721536Nous-Hermes-2-Yi-34BCLIP-LMGM-Instructfull_ft-1eckpt
以下是仅在第一阶段数据上预训练的权重:
模型LRHR基础语言模型视觉编码器预训练数据微调计划下载
MGM-2B336768Gemma-2BCLIP-LMGM-Pretrain1eckpt
MGM-7B336768Vicuna-7B-v1.5CLIP-LMGM-Pretrain1eckpt
MGM-13B336768Vicuna-13B-v1.5CLIP-LMGM-Pretrain1eckpt
MGM-8x7B336768Mixtral-8x7B-Instruct-v0.1CLIP-LMGM-Pretrain1eckpt
MGM-34B336768Nous-Hermes-2-Yi-34BCLIP-LMGM-Pretrain1eckpt

准备工作

数据集

我们提供了用于模型训练的处理好的数据。 对于模型预训练,请下载以下基于图像的训练数据并按以下方式组织:

-> 表示将数据放入本地文件夹。

  • LLaVA Images -> data/MGM-Pretrain/images, data/MGM-Finetune/llava/LLaVA-Pretrain/images
  • ALLaVA Caption -> data/MGM-Pretrain/ALLaVA-4V

对于模型微调,请下载以下指令数据并按以下方式组织:

-> 表示将数据放入本地文件夹。

对于模型评估,请按照此链接进行准备。我们使用一些额外的基准进行评估。请下载以下训练图像数据并按以下方式组织:

-> 表示将数据放入本地文件夹。

  • MMMU -> data/MGM-Eval/MMMU
  • MMB -> data/MGM-Eval/MMB
  • MathVista -> data/MGM-Eval/MathVista

请按照结构将预训练数据、微调数据和评估数据分别放入 MGM-PretrainMGM-FinetuneMGM-Eval 子集中。

对于元信息,请下载以下文件并按结构中的方式组织它们。

重要提示: mgm_generation_pure_text.json 是一个与生成相关的子集。不要将它与 mgm_instruction.json 合并,因为它已经包含在其中。您可以将此文件与自定义的 LLM/VLM SFT 数据集合并,以启用推理生成能力。

预训练权重

我们建议用户从以下链接下载预训练权重 CLIP-Vit-L-336, OpenCLIP-ConvNeXt-L, Gemma-2b-it, Vicuna-7b-v1.5, Vicuna-13b-v1.5, Mixtral-8x7B-Instruct-v0.1, 和 Nous-Hermes-2-Yi-34B,并按照结构将它们放入 model_zoo

结构

在训练之前,文件夹结构应按如下方式组织。

MGM
├── mgm
├── scripts
├── work_dirs
│   ├── MGM
│   │   ├── MGM-2B
│   │   ├── ...
├── model_zoo
│   ├── LLM
│   │   ├── gemma
│   │   │   ├── gemma-2b-it
│   │   ├── vicuna
│   │   │   ├── 7B-V1.5
│   │   │   ├── 13B-V1.5
│   │   ├── llama-3
│   │   │   ├── Meta-Llama-3-8B-Instruct
│   │   │   ├── Meta-Llama-3-70B-Instruct
│   │   ├── mixtral
│   │   │   ├── Mixtral-8x7B-Instruct-v0.1
│   │   ├── Nous-Hermes-2-Yi-34B
│   ├── OpenAI
│   │   ├── clip-vit-large-patch14-336
│   │   ├── openclip-convnext-large-d-320-laion2B-s29B-b131K-ft-soup
├── data
│   ├── MGM-Pretrain
│   │   ├── mgm_pretrain.json
│   │   ├── images
│   │   ├── ALLaVA-4V
│   ├── MGM-Finetune
│   │   ├── mgm_instruction.json
│   │   ├── llava
│   │   ├── coco
│   │   ├── gqa
│   │   ├── ocr_vqa
│   │   ├── textvqa
│   │   ├── vg
│   │   ├── gpt4v-dataset
│   │   ├── sam
│   │   ├── share_textvqa
│   │   ├── wikiart
│   │   ├── web-celebrity
│   │   ├── web-landmark
│   │   ├── ALLaVA-4V
│   │   ├── docvqa
│   │   ├── chartqa
│   │   ├── dvqa
│   │   ├── ai2d
│   ├── MGM-Eval
│   │   ├── MMMU
│   │   ├── MMB
│   │   ├── MathVista
│   │   ├── ...

训练

训练过程包括两个阶段:(1)特征对齐阶段:桥接视觉和语言标记;(2)指令微调阶段:教导模型遵循多模态指令。

我们的模型在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

在训练之前,请确保你已经按照准备工作下载并组织好数据。

注意:请为2台机器训练设置hostfile,为4台机器训练设置hostfile_4

如果你想训练和微调该框架,请运行以下命令(针对图像尺寸为336的MGM-7B):

bash scripts/llama/train/stage_1_2_full_v7b_336_hr_768.sh

或者针对图像尺寸为336的MGM-13B:

bash scripts/llama/train/stage_1_2_full_v13b_336_hr_768.sh

由于我们重用了MGM-7B的预训练投影器权重,你可以直接使用图像尺寸为672的MGM-7B-HD进行第二阶段的指令微调:

bash scripts/llama/train/stage_2_full_v7b_672_hr_1536.sh

请在scripts/中查找更多关于gemmallamamixtralyi的训练脚本。

评估

我们在几个基于图像的基准测试上进行评估。请按照准备工作下载评估数据,并按照结构中的方式组织它们。

模型LLM分辨率链接TextVQAMMBMMEMM-VetMMMU_valMMMU_testMathVista
MGM-2BGemma-2B336ckpt56.259.81341/31231.131.729.129.4
MGM-7BVicuna-7B-v1.5336ckpt65.269.31523/31640.836.132.831.4
MGM-13BVicuna-13B-v1.5336ckpt65.968.51565/32246.038.133.537.0
MGM-8BLLaMA-3-8B-Instruct336ckpt67.672.71606/34147.338.236.3--
MGM-8x7BMixtral-8x7B-Instruct-v0.1336ckpt69.275.61639/37945.841.837.141.8
MGM-34BNous-Hermes-2-Yi-34B336ckpt70.179.61666/43953.048.743.638.9
MGM-7B-HDVicuna-7B-v1.5672ckpt68.465.81546/31941.336.832.932.2
MGM-13B-HDVicuna-13B-v1.5672ckpt70.268.61597/32050.537.335.137.0
MGM-8B-HDLLaMA-3-8B-Instruct672ckpt71.6--1532/357--37.0----
MGM-8x7B-HDMixtral-8x7B-Instruct-v0.1672ckpt71.974.71633/35653.540.037.043.1
MGM-34B-HDNous-Hermes-2-Yi-34B672ckpt74.180.61659/48259.348.044.943.3

如果你想在基于图像的基准测试上评估模型,请使用scripts/MODEL_PATH/eval中的脚本。 例如,使用MGM-7B-HD运行以下命令进行TextVQA评估:

bash scripts/llama/eval/textvqa.sh

请在scripts/MODEL_PATH中查找更多评估脚本。

命令行界面推理

无需Gradio界面即可与图像进行对话。它还支持多GPU、4位和8位量化推理。使用4位量化。 请确保你已安装diffusersPaddleOCR(仅用于更好的OCR体验),然后尝试以下命令进行图像和生成推理:

python -m mgm.serve.cli \
    --model-path work_dirs/MGM/MGM-13B-HD \
    --image-file <你的图像路径>

或者尝试使用OCR获得更好的体验(确保您已安装 PaddleOCR):

python -m mgm.serve.cli \
    --model-path work_dirs/MGM/MGM-13B-HD \
    --image-file <您的图像路径> \
    --ocr

或者尝试使用生成进行推理(确保您已安装 diffusers):

python -m mgm.serve.cli \
    --model-path work_dirs/MGM/MGM-13B-HD \
    --image-file <您的图像路径> \
    --gen

您还可以尝试使用8位甚至4位进行高效推理

python -m mgm.serve.cli \
    --model-path work_dirs/MGM/MGM-13B-HD \
    --image-file <您的图像路径> \
    --gen
    --load-8bit

Gradio Web 界面

在这里,我们采用类似于LLaVA的Gradio界面,为我们的模型提供一个用户友好的界面。 要在本地启动Gradio演示,请逐个运行以下命令。如果您计划启动多个模型工作器以比较不同的检查点,您只需要启动控制器和Web服务器一次。

启动控制器

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

启动Gradio Web服务器

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

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

启动模型工作器

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

python -m mgm.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path work_dirs/MGM/MGM-13B-HD

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

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

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

如果您使用的是带有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 mgm.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path work_dirs/MGM/MGM-13B-HD

启动模型工作器(4位,8位推理,量化)

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

python -m mgm.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path work_dirs/MGM/MGM-13B-HD --load-4bit

示例

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

高分辨率理解

推理生成

引用

如果您发现这个仓库对您的研究有用,请考虑引用以下论文

@article{li2024mgm,
  title={Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models},
  author={Li, Yanwei and Zhang, Yuechen and Wang, Chengyao and Zhong, Zhisheng and Chen, Yixin and Chu, Ruihang and Liu, Shaoteng and Jia, Jiaya},
  journal={arXiv:2403.18814},
  year={2023}
}

致谢

本项目与Google LLC无关。

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

许可证

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

数据和检查点仅用于研究目的,并获得许可。它们也仅限于遵守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号