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)。

编辑推荐精选

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

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

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多