RPG-DiffusionMaster

RPG-DiffusionMaster

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

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

RPG文本到图像生成多模态大语言模型扩散模型区域扩散Github开源项目

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

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

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

介绍

<table class="center"> <tr> <td width=100% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/268bb996-1e2d-403a-b130-38c644dba317.png" style="width:100%"></td> </tr> <tr> <td width="100%" style="border: none; text-align: center; word-wrap: break-word">RPG概述 </td> </tr> </table>

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

<table class="center"> <tr> <td width=100% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/a361010a-d07c-49b7-be24-eeee6e7641ce.png" style="width:100%"></td> </tr> <tr> <td width="100%" style="border: none; text-align: center; word-wrap: break-word">文本提示:一幅美丽的风景,中间有一条河。河的左边是冬天的傍晚,有一座大冰山和一个小村庄,一些人在河上滑冰,一些人在滑雪。河的右边是夏天的清晨,有一座火山和一个小村庄,一些人在玩耍。 </td> </tr> </table>

🚩 最新更新

[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. 多人物复杂属性绑定

<details open> <summary>1024*1024示例</summary> <table class="center"> <tr> <td width=25% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/aec5073b-d1ef-4935-9a9c-41dc153d3c89.png" style="width:100%"></td> <td width=25% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/e3b7a045-5baf-47e0-81ea-2cdf4eefe712.png" style="width:100%"></td> <td width=25% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/316e6d10-dcc6-42b7-8d8b-aa989084a05f.png" style="width:100%"></td> <td width=25% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/a64aee91-2ea1-4a27-9e43-d960643d6140.png" style="width:100%"></td> <tr> <td width="25%" style="border: none; text-align: center; word-wrap: break-word">一个白色马尾辫、穿黑色连衣裙的女孩正在咖啡厅里与一个金色卷发、穿白色连衣裙的女孩聊天。</td> <td width="25%" style="border: none; text-align: center; word-wrap: break-word">一个双马尾女孩,戴着棕色牛仔帽,穿着印有苹果图案的白色衬衫,蓝色牛仔裤和及膝靴,全身照。</td> <td width="25%" style="border: none; text-align: center; word-wrap: break-word">一对情侣,左边是美丽的女孩,银色头发,编织马尾辫,快乐,充满活力,精力充沛,平和;右边是英俊的年轻男子,面部细节精美,咧嘴而笑,金色头发,迷人。</td> 这是一幅英语到中文的翻译,请提供此源文本的中文翻译。 不要提供任何解释或翻译以外的文本。 注意:翻译需要符合中文语序、流畅、通顺 <td width="25%" style="border: none; text-align: center; word-wrap: break-word"> 两位穿着旗袍的漂亮中国女孩正在茶室里品茶,墙上挂着一幅中国山水画。左边的女孩梳着黑色马尾辫,身穿红色旗袍;右边的女孩梳着白色马尾辫,身穿橙色旗袍。</td> </tr> </table> </details> <details open> <summary> 2048*1024 示例</summary> <table class="center"> <tr> <td width=100% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/13fdca76-7a83-421e-a75a-05f93a23e85e.png" style="width:100%"></td> </tr> <tr> <td width="100%" style="border: none; text-align: center; word-wrap: break-word">从左到右,一位金发马尾辫的欧洲女孩穿着白衬衫,一位棕色卷发的非洲女孩穿着印有鸟图案的蓝色衬衫,一位黑色短发的亚洲年轻男子穿着西装,他们正开心地在校园里行走。</td> </tr> </table> </details>

2. 多物体复杂关系

<details open> <summary> 1024*1024 示例</summary> <table class="center"> <tr> <td width=25% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/343205b5-756e-417c-b30b-fc5a6ed3d31f.png" style="width:100%"></td> <td width=25% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/f9405124-1005-4712-b887-dd258427e0e5.png" style="width:100%"></td> <td width=25% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/5da9baf2-3167-4fc7-950f-319baa35fb82.png" style="width:100%"></td> <td width=25% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/4c8c40c2-1176-4fb0-9dde-1b4820af9ac2.png" style="width:100%"></td> <tr> <td width="25%" style="border: none; text-align: center; word-wrap: break-word">从左到右,木地板上有两个红苹果、一件印有苹果图案的衬衫和一台iPad。 </td> <td width="25%" style="border: none; text-align: center; word-wrap: break-word">大理石桌上摆放着七个带有不同几何图案的白色陶瓷杯,左侧放着一束玫瑰花。 </td> <td width="25%" style="border: none; text-align: center; word-wrap: break-word">木桌上呈X形排列着五个西瓜,中间的一个被切开了,写实风格,俯视角。 </td> <td width="25%" style="border: none; text-align: center; word-wrap: break-word"> 从左到右,沐浴在柔和的晨光中,一个温馨的角落里,一杯冒着热气的星巴克拿铁咖啡放在粗犷的桌子上,旁边是一个优雅的花瓶,里面插着盛开的玫瑰,而一只毛茸茸的布偶猫在附近舒适地打着呼噜,它的眼睛半闭着,流露出幸福安详的神情。</td> </tr> </table> </details> <details open> <summary> 2048*1024 示例</summary> <table class="center"> <tr> <td width=100% style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/420217e3-9cac-41e6-98bd-820df8458447.png" style="width:100%"></td> </tr> <tr> <td width="100%" style="border: none; text-align: center; word-wrap: break-word">一个绿色双马尾的女孩穿着橙色连衣裙坐在沙发上,左边是一张凌乱的桌子,桌子上方有一扇大窗户,沙发右上方是一个生机勃勃的鱼缸,写实风格。 </td> </tr> </table> </details>

3. RPG 与 ControlNet

<details open> <summary>OpenPose 示例</summary> <table class="center"> <tr style="line-height: 0"> <td colspan="2" style="border: none; text-align: center">OpenPose</td> </tr> <tr> <td style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/393515e1-07f9-4f2e-adbf-367cabf2862a.png"></td> <td style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/db910a37-4015-4b86-aa26-0279c88942a4.png"></td> </tr> </table> 文本提示:一位美丽的黑发女孩闭着眼睛,身穿香槟色长袖礼服,站在她明亮的房间里。左边放着精致的蓝色花瓶,里面插着粉色玫瑰,右边四处摆放着一些白色玫瑰,周围充满了升级后的生长物。 </details> <details open> <summary>深度图示例</summary> <table class="center"> <tr style="line-height: 0"> <td colspan="2" style="border: none; text-align: center">深度图</td> </tr> <tr> <td style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/c6714835-e242-4b4e-95d2-2eeb9261e862.jpg", style="width: 256px,height: 448px"></td> <td style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/5ab2b39a-b33b-473c-9906-96140b3bac31.png", style="width: 1024px, height:1792px"></td> </tr> </table> 在清澈的星空下,山间清澈的河水流淌,薰衣草花海随风摇曳,营造出一种宁静、美丽、和谐的氛围。 <details open> <summary>Canny 边缘示例 </summary> <table class="center"> <tr style="line-height: 0"> <td colspan="2" style="border: none; text-align: center">Canny 边缘</td> </tr> <tr> <td style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/fcd1cb74-730c-4489-b892-9f1eab346530.png", style="width: 768px"></td> <td style="border: none"><img src="https://yellow-cdn.veclightyear.com/ab5030c0/78abbbe4-9736-4ecf-9117-b44f6fa7d013.png",style="width: 2048px, height: 1024px"></td> </tr> </table> 文本提示: 从左到右,一座古代中国城市在春、夏、秋、冬四个不同季节的场景 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)。

编辑推荐精选

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多