📰 新闻
-
[2024-08-11] 🎉🎉🎉 训练代码和文档已发布!🎉🎉🎉
-
[2024-07-08] 🎉🎉🎉 Lumina-mGPT 已发布!🎉🎉🎉
⚙️ 安装
详细说明请参见 INSTALL.md。
请注意,Lumina-mGPT 的实现heavily依赖于xllmx模块,该模块由LLaMA2-Accessory演变而来,用于支持以LLM为中心的多模态任务。在继续之前,请确保它已正确安装为Python包。
⛽ 训练
📽️ 推理
[!注意]
在使用Lumina-mGPT模型之前,请运行
# bash cd lumina_mgpt
进入Lumina-mGPT实现的目录。
准备工作
由于目前transformers中的Chameleon实现不包含VQ-VAE解码器,请手动下载Meta提供的原始VQ-VAE权重,并将它们放在以下目录中:
Lumina-mGPT
- lumina_mgpt/
- ckpts/
- chameleon/
- tokenizer/
- text_tokenizer.json
- vqgan.yaml
- vqgan.ckpt
- xllmx/
- ...
本地Gradio演示
我们准备了三个不同的Gradio演示,每个演示都展示了独特的功能,以帮助您快速熟悉Lumina-mGPT模型的能力。
1. demos/demo_image_generation.py
这个演示专门用于图像生成任务,您可以输入文本描述并生成相应的图像。 要启动这个演示,请运行:
# 注意将`--target_size`参数设置为与检查点一致
python -u demos/demo_image_generation.py \
--pretrained_path Alpha-VLLM/Lumina-mGPT-7B-768 \
--target_size 768
2. demos/demo_image2image.py
这个演示是为使用Omni-SFT训练的模型设计的。您可以使用此演示方便地在多个下游任务之间切换。
# 注意将`--target_size`参数设置为与检查点一致
python -u demos/demo_image2image.py \
--pretrained_path Alpha-VLLM/Lumina-mGPT-7B-768-Omni \
--target_size 768
3. demos/demo_freeform.py
这是一个对输入格式限制最少的强大演示。它支持灵活的交互,适合深入探索。
# 注意将`--target_size`参数设置为与检查点一致
python -u demos/demo_freeform.py \
--pretrained_path Alpha-VLLM/Lumina-mGPT-7B-768-Omni \
--target_size 768
简单推理
Lumina-mGPT推理的最简单代码:
from inference_solver import FlexARInferenceSolver
from PIL import Image
# ******************** 图像生成 ********************
inference_solver = FlexARInferenceSolver(
model_path="Alpha-VLLM/Lumina-mGPT-7B-768",
precision="bf16",
target_size=768,
)
q1 = f"根据以下提示生成一张768x768的图像:\n"
f"一只狗在玩水,背景是瀑布的图像。"
# generated: 元组,包含(生成的响应, 生成的图像列表)
generated = inference_solver.generate(
images=[],
qas=[[q1, None]],
max_gen_len=8192,
temperature=1.0,
logits_processor=inference_solver.create_logits_processor(cfg=4.0, image_top_k=2000),
)
a1, new_image = generated[0], generated[1][0]
# ******************* 图像理解 ******************
inference_solver = FlexARInferenceSolver(
model_path="Alpha-VLLM/Lumina-mGPT-7B-512",
precision="bf16",
target_size=512,
)
# "<|image|>"符号在输入LLM之前会被替换为图像token序列
q1 = "详细描述这张图像。<|image|>"
images = [Image.open("image.png")]
qas = [[q1, None]]
# `len(images)`应等于qas中"<|image|>"出现的次数
generated = inference_solver.generate(
images=images,
qas=qas,
max_gen_len=8192,
temperature=1.0,
logits_processor=inference_solver.create_logits_processor(cfg=4.0, image_top_k=2000),
)
a1 = generated[0]
# generated[1],即新生成的图像列表,在这种情况下通常应该是空的。
# ********************* 全能模式 *********************
inference_solver = FlexARInferenceSolver(
model_path="Alpha-VLLM/Lumina-mGPT-7B-768-Omni",
precision="bf16",
target_size=768,
)
# 示例:深度估计
# 更多说明请参见demos/demo_image2image.py
q1 = "深度估计。<|image|>"
images = [Image.open("image.png")]
qas = [[q1, None]]
generated = inference_solver.generate(
images=images,
qas=qas,
max_gen_len=8192,
temperature=1.0,
logits_processor=inference_solver.create_logits_processor(cfg=1.0, image_top_k=200),
)
a1 = generated[0]
new_image = generated[1][0]
🤗 检查点
配置
7B模型
模型 | 大小 | Huggingface |
---|---|---|
FP-SFT@512 | 7B | Alpha-VLLM/Lumina-mGPT-7B-512 |
FP-SFT@768 | 7B | Alpha-VLLM/Lumina-mGPT-7B-768 |
Omni-SFT@768 | 7B | Alpha-VLLM/Lumina-mGPT-7B-768-Omni |
FP-SFT@1024 | 7B | Alpha-VLLM/Lumina-mGPT-7B-1024 |
34B模型
模型 | 大小 | Huggingface |
---|---|---|
FP-SFT@512 | 34B | Alpha-VLLM/Lumina-mGPT-34B-512 |
更多检查点即将推出。
📑 开源计划
- 推理代码
- 训练代码
🔥 招聘信息
我们正在上海人工智能实验室的通用视觉组招聘实习生、博士后和全职研究人员,重点关注多模态和视觉基础模型。如果您感兴趣,请联系gaopengcuhk@gmail.com。
📄 引用
@misc{liu2024lumina-mgpt,
title={Lumina-mGPT: Illuminate Flexible Photorealistic Text-to-Image Generation with Multimodal Generative Pretraining},
author={Dongyang Liu and Shitian Zhao and Le Zhuo and Weifeng Lin and Yu Qiao and Hongsheng Li and Peng Gao},
year={2024},
eprint={2408.02657},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2408.02657},
}