MGM

MGM

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

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

Mini-Gemini多模态视觉语言模型AI绘图大语言模型图像理解Github开源项目

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

<a href='https://mini-gemini.github.io/'><img src='https://img.shields.io/badge/项目-主页-Green'></a> <a href='http://103.170.5.190:7860/'><img src='https://img.shields.io/badge/项目-演示-violet'></a> <a href='https://huggingface.co/spaces/wcy1122/MGM'><img src='https://yellow-cdn.veclightyear.com/835a84d5/4aada473-cb88-455f-80b6-2abf12a8b175.svg'></a> <a href='https://arxiv.org/pdf/2403.18814.pdf'><img src='https://img.shields.io/badge/论文-Arxiv-red'></a> <a href='https://huggingface.co/collections/YanweiLi/mgm-6603c50b9b43d044171d0854'><img src='https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-模型-blue'></a> <a href='https://huggingface.co/collections/YanweiLi/mgm-data-660463ea895a01d8f367624e'><img src='https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-数据-green'></a>

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

发布

目录

演示

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

<div align=center> <img width="100%" src="https://yellow-cdn.veclightyear.com/835a84d5/255d3fa5-0cdf-4f2d-b9ae-52257d313a09.png"/> </div>

安装

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

注意:如果您想使用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将文本与图像结合,同时实现理解和生成。

<div align=center> <img width="98%" src="https://yellow-cdn.veclightyear.com/835a84d5/f81e4a40-298d-4c2d-a564-6b0fe4b3452f.png"/> </div>

我们提供了在第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_pretrain.json1.68 G
mgm_instruction.json1.79 G
mgm_generation_pure_text.json0.04 G

重要提示: 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

示例

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

高分辨率理解

<div align=center> <img width="98%" src="https://yellow-cdn.veclightyear.com/835a84d5/c0ae29cc-2423-4abc-9af6-932b28a11c68.png"/> </div>

推理生成

<div align=center> <img width="98%" src="https://yellow-cdn.veclightyear.com/835a84d5/875e9f1b-35df-452b-bdbf-244ecf520c31.png"/> </div>

引用

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

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

编辑推荐精选

讯飞智文

讯飞智文

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

下拉加载更多