HiDiffusion

HiDiffusion

无需训练即可提升扩散模型分辨率和速度的方法

HiDiffusion是一种提高预训练扩散模型分辨率和速度的方法,无需额外训练。通过添加单行代码即可集成到现有扩散管道中。它支持文本到图像、图像到图像和修复等多种任务,适用于Stable Diffusion XL、Stable Diffusion v2等主流模型。HiDiffusion还兼容ControlNet等下游任务,为图像生成提供更高质量和效率。

HiDiffusion扩散模型高分辨率AI绘图图像生成Github开源项目
<!-- # 💡 HiDiffusion --> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/8ab4aafb-e193-4cad-8391-612466779ff0.jpg" height=120> </div>

<div align="center">💡 HiDiffusion: 释放预训练扩散模型更高分辨率的创造力和效率</div>

<div align="center">Shen Zhang, Zhaowei Chen, Zhenyu Zhao, Yuhao Chen, Yao Tang, Jiajun Liang</div> <br> <div align="center"> <a href="https://hidiffusion.github.io/"><img src="https://img.shields.io/static/v1?label=项目主页&message=Github&color=blue&logo=github-pages"></a> &ensp; <a href="https://arxiv.org/abs/2311.17528"><img src="https://img.shields.io/static/v1?label=论文&message=Arxiv:HiDiffusion&color=red&logo=arxiv"></a> &ensp; <a href="https://colab.research.google.com/drive/1EiBn9lSnPZTU4cikRRaBBexs429M-qty?usp=sharing"><img src="https://img.shields.io/static/v1?label=演示&message=Colab&color=purple&logo=googlecolab"></a> &ensp; <a href="https://openbayes.com/console/public/tutorials/SaPYcYCaWSA"><img src="https://img.shields.io/static/v1?label=演示&message=OpenBayes&color=green"></a> &ensp; </div> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/f8fe1892-7663-45c7-bd21-599e936a7a7a.jpg" width="800" ></img> <br> <em> (不同扩散模型、分辨率和宽高比的HiDiffusion样本选择。) </em> </div> <br>

👉 为什么选择HiDiffusion

  • 一种无需训练即可提高预训练扩散模型分辨率和速度的方法
  • 设计为即插即用的实现。只需添加一行代码即可集成到扩散管道中!
  • 支持各种任务,包括文本到图像、图像到图像、图像修复
<div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/9aaf030f-e65d-49d1-ba0e-5d33bfd33db8.jpg" width="800" ></img> <br> <em> (更快速,更好的图像细节。) </em> </div> <br> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/46fc2b90-4fa5-4a70-b5e3-aa06400d0518.jpg" width="800" ></img> <br> <em> (ControlNet和图像修复任务的2K结果。) </em> </div> <br>

🔥 更新

  • 2024.8.15 - 💥 Diffusers文档已添加HiDiffusion,详见此处。感谢Diffusers团队!

  • 2024.7.3 - 💥 被ECCV 2024接收!

  • 2024.6.19 - 💥 已集成到OpenBayes,查看演示。感谢OpenBayes团队!

  • 2024.6.16 - 💥 支持PyTorch 2.X。

  • 2024.6.16 - 💥 修复非方形图像生成问题。现在HiDiffusion支持更多图像尺寸和宽高比。

  • 2024.5.7 - 💥 支持图像到图像任务,详见此处

  • 2024.4.16 - 💥 发布源代码。

📢 支持的模型

注意:HiDiffusion还支持基于这些仓库的下游扩散模型,如Ghibli-DiffusionPlayground等。

💣 支持的任务

  • ✅ 文本到图像
  • ✅ ControlNet,包括文本到图像、图像到图像
  • ✅ 图像修复

🔎 主要依赖

本仓库在以下环境中测试通过

  • Python==3.8
  • torch>=1.13.1
  • diffusers>=0.25.0
  • transformers
  • accelerate
  • xformers

🔑 安装HiDiffusion

安装主要依赖中的包后,安装HiDiffusion:

pip3 install hidiffusion

从源码安装

或者,您可以从github源码安装。克隆仓库并安装:

git clone https://github.com/megvii-model/HiDiffusion.git cd HiDiffusion python3 setup.py install

🚀 使用方法

使用HiDiffusion生成输出非常简单,基于🤗 diffusers您只需添加一行代码

文本到图像生成

Stable Diffusion XL

from hidiffusion import apply_hidiffusion, remove_hidiffusion from diffusers import StableDiffusionXLPipeline, DDIMScheduler import torch pretrain_model = "stabilityai/stable-diffusion-xl-base-1.0" scheduler = DDIMScheduler.from_pretrained(pretrain_model, subfolder="scheduler") pipe = StableDiffusionXLPipeline.from_pretrained(pretrain_model, scheduler = scheduler, torch_dtype=torch.float16, variant="fp16").to("cuda") # # 可选。enable_xformers_memory_efficient_attention可以节省内存使用并提高推理速度。enable_model_cpu_offload和enable_vae_tiling可以节省内存使用。 # pipe.enable_xformers_memory_efficient_attention() # pipe.enable_model_cpu_offload() # pipe.enable_vae_tiling() # 用一行代码应用hidiffusion。 apply_hidiffusion(pipe) prompt = "站立在废墟中,一个石头傀儡苏醒了,藤蔓和花朵从它身体的缝隙中生长出来。" negative_prompt = "模糊,丑陋,重复,画得很差的脸,变形,马赛克,人工痕迹,畸形的肢体" image = pipe(prompt, guidance_scale=7.5, height=2048, width=2048, eta=1.0, negative_prompt=negative_prompt).images[0] image.save(f"golem.jpg")
<details> <summary>输出:</summary> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/f39316d9-1b67-4916-9f8d-6dc9c67e3ce4.jpg" width="800" ></img> </div> </details>

设置height = 4096,width = 4096,您可以得到4096x4096分辨率的输出。

Stable Diffusion XL Turbo

from hidiffusion import apply_hidiffusion, remove_hidiffusion from diffusers import AutoPipelineForText2Image import torch pretrain_model = "stabilityai/sdxl-turbo" pipe = AutoPipelineForText2Image.from_pretrained(pretrain_model, torch_dtype=torch.float16, variant="fp16").to('cuda') # # 可选。enable_xformers_memory_efficient_attention可以节省内存使用并提高推理速度。enable_model_cpu_offload和enable_vae_tiling可以节省内存使用。 # pipe.enable_xformers_memory_efficient_attention() # pipe.enable_model_cpu_offload() # pipe.enable_vae_tiling() # 用一行代码应用hidiffusion。 apply_hidiffusion(pipe) prompt = "在神秘森林的深处,一只机器猫头鹰用夜视镜头般的眼睛监视着夜间的生物。" image = pipe(prompt, num_inference_steps=4, height=1024, width=1024, guidance_scale=0.0).images[0] image.save(f"./owl.jpg")
<details> <summary>输出:</summary> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/94473fdf-1887-4ad9-b807-2c150db0686d.jpg" width="800" ></img> </div> </details>

Stable Diffusion v2-1

from hidiffusion import apply_hidiffusion, remove_hidiffusion from diffusers import DiffusionPipeline, DDIMScheduler import torch pretrain_model = "stabilityai/stable-diffusion-2-1-base" scheduler = DDIMScheduler.from_pretrained(pretrain_model, subfolder="scheduler") pipe = DiffusionPipeline.from_pretrained(pretrain_model, scheduler = scheduler, torch_dtype=torch.float16).to("cuda") # # 可选。enable_xformers_memory_efficient_attention 可以节省内存并提高推理速度。enable_model_cpu_offload 和 enable_vae_tiling 可以节省内存使用。 # pipe.enable_xformers_memory_efficient_attention() # pipe.enable_model_cpu_offload() # pipe.enable_vae_tiling() # 使用单行代码应用 hidiffusion。 apply_hidiffusion(pipe) prompt = "一只可爱快乐的棕色边境牧羊犬坐在床上,高细节。" negative_prompt = "丑陋,平铺,画面外,面部画得不好,多余的肢体,畸形,变形,身体超出画面,模糊,解剖结构不佳,模糊不清,人工痕迹,比例不当。" image = pipe(prompt, guidance_scale=7.5, height=1024, width=1024, eta=1.0, negative_prompt=negative_prompt).images[0] image.save(f"collie.jpg")
<details> <summary>输出:</summary> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/4d579825-7545-45d0-9069-41e1b3132f24.jpg" width="800" ></img> </div> </details>

设置 height = 2048,width = 2048,您可以获得 2048x2048 分辨率的输出。

Stable Diffusion v1-5

from hidiffusion import apply_hidiffusion, remove_hidiffusion from diffusers import DiffusionPipeline, DDIMScheduler import torch pretrain_model = "runwayml/stable-diffusion-v1-5" scheduler = DDIMScheduler.from_pretrained(pretrain_model, subfolder="scheduler") pipe = DiffusionPipeline.from_pretrained(pretrain_model, scheduler = scheduler, torch_dtype=torch.float16).to("cuda") # # 可选。enable_xformers_memory_efficient_attention 可以节省内存并提高推理速度。enable_model_cpu_offload 和 enable_vae_tiling 可以节省内存使用。 # pipe.enable_xformers_memory_efficient_attention() # pipe.enable_model_cpu_offload() # pipe.enable_vae_tiling() # 使用单行代码应用 hidiffusion。 apply_hidiffusion(pipe) prompt = "厚重笔触,明亮色彩,一只奇异的狐狸,可爱,Q版卡哇伊。细致的毛发,超高细节,大而有反光的眼睛,童话风格,ArtStation,居中构图,完美构图,居中,鲜艳色彩,柔和色调,高细节,8K。" negative_prompt = "丑陋,平铺,面部画得不好,画面外,畸形,变形,模糊,解剖结构不佳,模糊不清。" image = pipe(prompt, guidance_scale=7.5, height=1024, width=1024, eta=1.0, negative_prompt=negative_prompt).images[0] image.save(f"fox.jpg")
<details> <summary>输出:</summary> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/2afd7d46-1d51-4801-b2ff-1aac60f599d1.jpg" width="800" ></img> </div> </details>

设置 height = 2048,width = 2048,您可以获得 2048x2048 分辨率的输出。

移除 HiDiffusion

如果您想移除 HiDiffusion,只需使用 remove_hidiffusion(pipe)

ControlNet

文本到图像生成

from diffusers import StableDiffusionXLControlNetPipeline, ControlNetModel, DDIMScheduler import numpy as np import torch import cv2 from PIL import Image from hidiffusion import apply_hidiffusion, remove_hidiffusion # 加载 assets 文件中的 Yoshua_Bengio.jpg。 path = './assets/Yoshua_Bengio.jpg' image = Image.open(path) # 获取 Canny 边缘图像 image = np.array(image) image = cv2.Canny(image, 100, 200) image = image[:, :, None] image = np.concatenate([image, image, image], axis=2) canny_image = Image.fromarray(image) # 初始化模型和管道 controlnet_conditioning_scale = 0.5 # 推荐用于良好的泛化 controlnet = ControlNetModel.from_pretrained( "diffusers/controlnet-canny-sdxl-1.0", torch_dtype=torch.float16, variant="fp16" ) scheduler = DDIMScheduler.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler") pipe = StableDiffusionXLControlNetPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", controlnet=controlnet, torch_dtype=torch.float16, scheduler = scheduler ) # 使用单行代码应用 hidiffusion。 apply_hidiffusion(pipe) pipe.enable_model_cpu_offload() pipe.enable_xformers_memory_efficient_attention() prompt = "小丑,高面部细节,高细节,柔和色彩,8K" negative_prompt = "模糊,丑陋,重复,画工差,变形,马赛克。" image = pipe( prompt, controlnet_conditioning_scale=controlnet_conditioning_scale, image=canny_image, height=2048, width=2048, guidance_scale=7.5, negative_prompt = negative_prompt, eta=1.0 ).images[0] image.save('joker.jpg')
<details> <summary>输出:</summary> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/2206f1d4-2081-4fbc-b7c9-fbb103481a1e.jpg" width="800" ></img> </div> </details>

图像到图像生成

import torch import numpy as np from PIL import Image from diffusers import ControlNetModel, StableDiffusionXLControlNetImg2ImgPipeline, DDIMScheduler from hidiffusion import apply_hidiffusion, remove_hidiffusion import cv2 controlnet = ControlNetModel.from_pretrained( "diffusers/controlnet-canny-sdxl-1.0", torch_dtype=torch.float16, variant="fp16" ).to("cuda") scheduler = DDIMScheduler.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler") pipe = StableDiffusionXLControlNetImg2ImgPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", controlnet=controlnet, scheduler = scheduler, torch_dtype=torch.float16, ).to("cuda") # 使用单行代码应用 hidiffusion。 apply_hidiffusion(pipe) pipe.enable_model_cpu_offload() pipe.enable_xformers_memory_efficient_attention() path = './assets/lara.jpeg' ori_image = Image.open(path) # 获取 Canny 边缘图像 image = np.array(ori_image) image = cv2.Canny(image, 50, 120) image = image[:, :, None] image = np.concatenate([image, image, image], axis=2) canny_image = Image.fromarray(image) controlnet_conditioning_scale = 0.5 # 推荐用于良好的泛化 prompt = "棕发的劳拉·克罗夫特,穿着背心和棕色背包。房间昏暗,装饰古朴,地板有图案,墙壁右侧有拱形设计和深色区域,柔和色调,高细节,8K高清获奖作品" negative_prompt = "曝光不足,手部画得不好,重复的手,曝光过度,糟糕的艺术,初学者,业余,抽象,畸形,变形,特写,奇怪的颜色,水印" image = pipe(prompt, image=ori_image, control_image=canny_image, height=1536, width=2048, strength=0.99, num_inference_steps=50, controlnet_conditioning_scale=controlnet_conditioning_scale, guidance_scale=12.5, negative_prompt = negative_prompt, eta=1.0 ).images[0] image.save("lara.jpg")
<details> <summary>输出:</summary> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/aa837f40-a077-4805-af4a-439d6b5d0d72.jpg" width="800" ></img> </div> </details>

图像修复

import torch from diffusers import AutoPipelineForInpainting, DDIMScheduler from diffusers.utils import load_image from hidiffusion import apply_hidiffusion, remove_hidiffusion from PIL import Image scheduler = DDIMScheduler.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler") pipeline = AutoPipelineForInpainting.from_pretrained( "diffusers/stable-diffusion-xl-1.0-inpainting-0.1", torch_dtype=torch.float16, variant="fp16", scheduler=scheduler ) # 使用单行代码应用hidiffusion。 apply_hidiffusion(pipeline) pipeline.enable_model_cpu_offload() # 如果未安装xFormers,请删除以下行 pipeline.enable_xformers_memory_efficient_attention() # 加载基础图像和蒙版图像 img_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-text2img.png" init_image = load_image(img_url) # 加载assets文件中的mask_image.jpg。 mask_image = Image.open("./assets/mask_image.png") prompt = "一位蒸汽朋克探险家,戴着皮质飞行员帽和护目镜,手持黄铜望远镜,站在巨大的古树中间,树根与复杂的齿轮和管道交织在一起。" negative_prompt = "模糊、丑陋、重复、画工差、变形、马赛克" image = pipeline(prompt=prompt, image=init_image, mask_image=mask_image, height=2048, width=2048, strength=0.85, guidance_scale=12.5, negative_prompt = negative_prompt, eta=1.0).images[0] image.save('steampunk_explorer.jpg')
<details> <summary>输出:</summary> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/2a73099f-12dd-4004-90f9-47a6491da385.jpg" width="800" ></img> </div> </details>

集成到下游模型

HiDiffusion支持基于支持的模型的模型,如Ghibli-DiffusionPlayground等。

Ghibli-Diffusion

from diffusers import StableDiffusionPipeline import torch from hidiffusion import apply_hidiffusion, remove_hidiffusion model_id = "nitrosocke/Ghibli-Diffusion" pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16) pipe = pipe.to("cuda") # 使用单行代码应用hidiffusion。 apply_hidiffusion(pipe) prompt = "吉卜力风格的金发魔法公主" negative_prompt="模糊、丑陋、重复、脸部画工差、变形、马赛克、瑕疵、四肢不良" image = pipe(prompt, height=1024, width=1024, eta=1.0, negative_prompt=negative_prompt).images[0] image.save("./magical_princess.jpg")
<details> <summary>输出:</summary> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/649c3f83-3be8-45eb-bbaf-e47f6e51b049.jpg" width="800" ></img> </div> </details>

Playground

from diffusers import DiffusionPipeline import torch from hidiffusion import apply_hidiffusion, remove_hidiffusion pipe = DiffusionPipeline.from_pretrained( "playgroundai/playground-v2-1024px-aesthetic", torch_dtype=torch.float16, use_safetensors=True, add_watermarker=False, variant="fp16" ) pipe.to("cuda") pipe.enable_xformers_memory_efficient_attention() # 使用单行代码应用hidiffusion。 apply_hidiffusion(pipe) prompt = "小女孩骑自行车,在宫崎骏风格的美丽动画场景中:一个下雪的东京城市,蓝天中漂浮着巨大的宫崎骏式云朵,阳光明媚的城市雪景令人着迷,宫崎骏式的风景意境,日本艺术" negative_prompt="模糊、丑陋、重复、画工差、变形、马赛克" image = pipe(prompt=prompt, guidance_scale=3.0, height=2048, width=2048, negative_prompt=negative_prompt).images[0] image.save('girl.jpg')

注意:您可以将guidance scale从3.0调整到5.0,并设计适当的negative prompt以生成令人满意的结果。

<details> <summary>输出:</summary> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/5ab756ab-d8db-420a-adf3-5d81491a2a59.jpg" width="800" ></img> </div> </details>

🙏 致谢

此代码库基于tomesddiffusers。感谢!

🎓 引用

@article{zhang2023hidiffusion,
  title={HiDiffusion: Unlocking Higher-Resolution Creativity and Efficiency in Pretrained Diffusion Models},
  author={Zhang, Shen and Chen, Zhaowei and Zhao, Zhenyu and Chen, Yuhao and Tang, Yao and Liang, Jiajun},
  journal={arXiv preprint arXiv:2311.17528},
  year={2023}
}

编辑推荐精选

讯��飞智文

讯飞智文

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

下拉加载更多