Project Icon

RPG-DiffusionMaster

多模态大语言模型驱动的高质量文图生成框架

RPG-DiffusionMaster是一款创新的文本到图像生成框架,结合多模态大语言模型的提示重述和区域规划能力,以及互补的区域扩散技术。该项目支持多种扩散模型架构,兼容GPT-4等专有模型和开源本地模型,实现先进的图像生成和编辑效果。框架具有高度灵活性和广泛适应性,能生成超高分辨率图像,是一个功能强大的AI创作工具。

通过多模态大语言模型掌握文本到图像扩散:重新描述、规划和生成 - ICML 2024

本仓库包含我们的RPG的官方实现,已被ICML 2024接收。

通过多模态大语言模型掌握文本到图像扩散:重新描述、规划和生成
杨凌, 于兆晨, 孟陈林, 徐敏凯, Stefano Ermon, 崔斌
北京大学, 斯坦福大学, Pika Labs

介绍

RPG概述

摘要: RPG是一种强大的无需训练的范式,可以利用专有的多模态大语言模型(如GPT-4、Gemini-Pro)或开源的本地多模态大语言模型(如miniGPT-4)作为提示重描述器和区域规划器,结合我们的互补区域扩散,实现最先进的文本到图像生成和编辑。我们的框架非常灵活,可以推广到任意多模态大语言模型架构和扩散模型骨干。RPG还能生成超高分辨率图像,这里有一个例子:

文本提示:一幅美丽的风景,中间有一条河。河的左边是冬天的傍晚,有一座大冰山和一个小村庄,一些人在河上滑冰,一些人在滑雪。河的右边是夏天的清晨,有一座火山和一个小村庄,一些人在玩耍。

🚩 最新更新

[2024.1] 我们的主要代码连同演示已发布,支持不同的扩散模型骨干(SDXL, SD v2.0/2.1 SD v1.4/1.5),可以利用GPT-4和Gemini-Pro复现我们的良好结果。我们的RPG也兼容本地多模态大语言模型,我们将在未来继续改进结果。

[2024.4] 我们的代码库已基于diffusers更新,现在同时支持扩散模型的ckpts和diffusers。对于扩散模型骨干,可以使用RegionalDiffusionPipeline用于SD v2.0/2.1 SD v1.4/1.5等基础模型,使用RegionalDiffusionXLPipeline用于SDXL。

待办事项

  • 更新Gradio演示
  • 发布自我优化版RPG
  • 发布用于图像编辑的RPG
  • 发布带ControlNet的RPG v3
  • 发布支持diffusers的RPG v2
  • 发布RPG v1

画廊

1. 多人物复杂属性绑定

1024*1024示例 这是一幅英语到中文的翻译,请提供此源文本的中文翻译。 不要提供任何解释或翻译以外的文本。 注意:翻译需要符合中文语序、流畅、通顺
一个白色马尾辫、穿黑色连衣裙的女孩正在咖啡厅里与一个金色卷发、穿白色连衣裙的女孩聊天。一个双马尾女孩,戴着棕色牛仔帽,穿着印有苹果图案的白色衬衫,蓝色牛仔裤和及膝靴,全身照。一对情侣,左边是美丽的女孩,银色头发,编织马尾辫,快乐,充满活力,精力充沛,平和;右边是英俊的年轻男子,面部细节精美,咧嘴而笑,金色头发,迷人。 两位穿着旗袍的漂亮中国女孩正在茶室里品茶,墙上挂着一幅中国山水画。左边的女孩梳着黑色马尾辫,身穿红色旗袍;右边的女孩梳着白色马尾辫,身穿橙色旗袍。
2048*1024 示例
从左到右,一位金发马尾辫的欧洲女孩穿着白衬衫,一位棕色卷发的非洲女孩穿着印有鸟图案的蓝色衬衫,一位黑色短发的亚洲年轻男子穿着西装,他们正开心地在校园里行走。

2. 多物体复杂关系

1024*1024 示例
从左到右,木地板上有两个红苹果、一件印有苹果图案的衬衫和一台iPad。 大理石桌上摆放着七个带有不同几何图案的白色陶瓷杯,左侧放着一束玫瑰花。 木桌上呈X形排列着五个西瓜,中间的一个被切开了,写实风格,俯视角。 从左到右,沐浴在柔和的晨光中,一个温馨的角落里,一杯冒着热气的星巴克拿铁咖啡放在粗犷的桌子上,旁边是一个优雅的花瓶,里面插着盛开的玫瑰,而一只毛茸茸的布偶猫在附近舒适地打着呼噜,它的眼睛半闭着,流露出幸福安详的神情。
2048*1024 示例
一个绿色双马尾的女孩穿着橙色连衣裙坐在沙发上,左边是一张凌乱的桌子,桌子上方有一扇大窗户,沙发右上方是一个生机勃勃的鱼缸,写实风格。

3. RPG 与 ControlNet

OpenPose 示例
OpenPose
文本提示:一位美丽的黑发女孩闭着眼睛,身穿香槟色长袖礼服,站在她明亮的房间里。左边放着精致的蓝色花瓶,里面插着粉色玫瑰,右边四处摆放着一些白色玫瑰,周围充满了升级后的生长物。
深度图示例
深度图
在清澈的星空下,山间清澈的河水流淌,薰衣草花海随风摇曳,营造出一种宁静、美丽、和谐的氛围。
Canny 边缘示例
Canny 边缘
文本提示: 从左到右,一座古代中国城市在春、夏、秋、冬四个不同季节的场景 split_ratio=split_ratio, # 区域提示词的比例,提示词数量与区域数量相同 batch_size = 1, #批量大小 base_ratio = 0.5, # 基础提示词的比例 base_prompt= prompt, num_inference_steps=20, # 采样步骤 height = 1024, negative_prompt=negative_prompt, # 负面提示词 width = 1024, seed = None,# 随机种子 guidance_scale = 7.0 ).images[0] images.save("test.png") ```

prompt 是大致概括图像内容的原始提示词

base_prompt 设置生成的基础提示词,是图像的概要,这里我们默认将 base_prompt 设置为原始输入提示词

base_ratio 是基础提示词的权重

还有其他常见的可选参数:

guidance_scale 是无分类器引导比例

num_inference_steps 是生成图像的步骤数

seed 控制种子以使生成可重现

需要注意的是,我们引入了一些重要参数:base_prompt & base_ratio

在添加你的 prompt 和 api-key,并设置你的 下载的扩散模型路径 后,只需运行以下命令即可获得结果:

python RPG.py

常见问题:如何正确设置 --base_prompt & --base_ratio ?

如果你想生成一张包含 同一类的多个实体 的图像(例如,两个女孩、三只猫、一个男人和一个女孩),你应该使用 基础提示词,并使用 base_prompt 设置包含图像中每类实体数量的基础提示词。另一个相关参数是 base_ratio,这是基础提示词的权重。根据我们的实验,当 base_ratio 在 [0.35,0.55] 之间时,最终结果会更好。以下是上述命令生成的图像:

只要我们有相同的随机种子,你就会得到一张与我们结果类似的图像:

<表格居中> <行> <单元格宽度=100% 样式="无边框"><图片 src="https://yellow-cdn.veclightyear.com/ab5030c0/8583d4be-585a-4bfe-93ce-2f08c63d7736.png" 样式="宽度:100%"></单元格> </行> <行> <单元格宽度="100%" 样式="无边框; 文字居中; 自动换行">文本提示词:一个英俊的金发卷发年轻男子穿着黑色西装,和一个穿红色旗袍的黑色双马尾女孩在酒吧里。 </单元格> </行> </表格>

另一方面,当涉及到包含 多个不同类别的实体 的图像时,就不需要使用基础提示词,这里有一个例子:

from RegionalDiffusion_base import RegionalDiffusionPipeline
from RegionalDiffusion_xl import RegionalDiffusionXLPipeline 
from diffusers.schedulers import KarrasDiffusionSchedulers,DPMSolverMultistepScheduler
from mllm import local_llm,GPT4
import torch
# 如果你想加载ckpt,用".from_single_file"初始化。
pipe = RegionalDiffusionXLPipeline.from_single_file("你的ckpt路径",torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
# #如果你想使用 diffusers,用".from_pretrained"初始化。
# pipe = RegionalDiffusionXLPipeline.from_pretrained("你的 diffusers 路径",torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to("cuda")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config,use_karras_sigmas=True)
pipe.enable_xformers_memory_efficient_attention()
prompt= '从左到右,在柔和的晨光中,一个舒适的角落里有一杯冒着热气的星巴克拿铁放在一张朴实的桌子上,旁边是一个优雅的花瓶里盛开的玫瑰,同时一只毛茸茸的布偶猫舒服地在附近打着呼噜,它的眼睛半闭着,陶醉在幸福的宁静中。'
para_dict = GPT4(prompt,key='你的密钥')
split_ratio = para_dict['Final split ratio']
regional_prompt = para_dict['Regional Prompt']
negative_prompt = ""
images = pipe(
    prompt=regional_prompt,
    split_ratio=split_ratio, # 区域提示词的比例,提示词数量与区域数量相同
    batch_size = 1, #批量大小
    base_ratio = 0.5, # 基础提示词的比例    
    base_prompt= None, # 如果base_prompt为None,base_ratio将不起作用
    num_inference_steps=20, # 采样步骤
    height = 1024, 
    negative_prompt=negative_prompt, # 负面提示词
    width = 1024, 
    seed = None,# 随机种子
    guidance_scale = 7.0
).images[0]
images.save("test.png")

你将得到一张与我们结果类似的图像:

<表格居中> <行> <单元格宽度=100% 样式="无边框"><图片 src="https://yellow-cdn.veclightyear.com/ab5030c0/6767d711-45cc-4743-ba3f-64e087af8895.png" 样式="宽度:100%"></单元格> </行> <行> <单元格宽度="100%" 样式="无边框; 文字居中; 自动换行">文本提示词:从左到右,在柔和的晨光中,一个舒适的角落里有一杯冒着热气的星巴克拿铁放在一张朴实的桌子上,旁边是一个优雅的花瓶里盛开的玫瑰,同时一只毛茸茸的布偶猫舒服地在附近打着呼噜,它的眼睛半闭着,陶醉在幸福的宁静中。 </单元格> </行> </表格>

了解什么时候应该使用 base_prompt 很重要,如果这些参数设置不当,我们就无法获得令人满意的结果。我们在论文中对基础提示词进行了消融研究,你可以查看我们的论文获取更多信息。

3. 使用本地 LLM 的区域扩散

我们建议使用超过 130 亿参数的基础模型以获得高质量的结果,但这同时会增加加载时间和显存使用。我们用三种不同规模的模型进行了实验。这里我们以 llama2-13b-chat 为例:

from RegionalDiffusion_base import RegionalDiffusionPipeline
from RegionalDiffusion_xl import RegionalDiffusionXLPipeline
from diffusers.schedulers import KarrasDiffusionSchedulers,DPMSolverMultistepScheduler
from mllm import local_llm,GPT4
import torch
# 如果你想使用单个检查点,使用此管道
pipe = RegionalDiffusionXLPipeline.from_single_file("你的检查点路径",torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
# 如果你想使用diffusers,使用此管道
# pipe = RegionalDiffusionXLPipeline.from_pretrained("你的diffusers路径",torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to("cuda")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config,use_karras_sigmas=True)
pipe.enable_xformers_memory_efficient_attention()
prompt= '两个女孩在咖啡馆里聊天。'
para_dict = local_llm(prompt,model_path='你的模型路径') 
split_ratio = para_dict['Final split ratio']
regional_prompt = para_dict['Regional Prompt']
negative_prompt = ""
images = pipe(
    prompt=regional_prompt,
    split_ratio=split_ratio, # 区域提示的比例,提示数量与区域数量相同,提示数量与区域数量相同
    batch_size = 1, #批次大小
    base_ratio = 0.5, # 基础提示的比例    
    base_prompt= prompt,       
    num_inference_steps=20, # 采样步骤
    height = 1024, 
    negative_prompt=negative_prompt, # 负面提示
    width = 1024, 
    seed = 1234,# 随机种子
    guidance_scale = 7.0
).images[0]
images.save("test.png")

在本地版本中,添加你的提示并设置好扩散模型路径和本地MLLM/LLM路径后,只需运行以下命令即可获得结果:

python RPG.py 

# 📖BibTeX

@inproceedings{yang2024mastering, title={Mastering Text-to-Image Diffusion: Recaptioning, Planning, and Generating with Multimodal LLMs}, author={Yang, Ling and Yu, Zhaochen and Meng, Chenlin and Xu, Minkai and Ermon, Stefano and Cui, Bin}, booktitle={International Conference on Machine Learning}, year={2024} }


# 致谢
我们的RPG是一个通用的MLLM控制的文本到图像生成/编辑框架,它建立在几个坚实的工作基础之上。感谢[AUTOMATIC1111](https://github.com/AUTOMATIC1111/stable-diffusion-webui)、[regional-prompter](https://github.com/hako-mikan/sd-webui-regional-prompter)、[SAM](https://github.com/facebookresearch/segment-anything)、[diffusers](https://github.com/huggingface/diffusers)和[IA](https://github.com/geekyutao/Inpaint-Anything)的出色工作和代码库!我们还要感谢Hugging Face分享我们的[论文](https://huggingface.co/papers/2401.11708)。
项目侧边栏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

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号