ITADN
SusungHong/SEG-SDXL
SusungHong/SEG-SDXL · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

SDXL 的平滑能量引导 (NeurIPS`24)

SEG 论文SEGSEG+ControlNet
Open In ArXivOpen In ColabOpen In Colab

Smoothed Energy Guidance: Guiding Diffusion Models with Reduced Energy Curvature of Attention 的官方实现,作者为 Susung Hong

🏔️ 什么是平滑能量引导?它如何工作?

平滑能量引导(SEG) 是一种无需训练且无条件的方案,它利用自注意力机制的能量视角来提升图像生成质量。

关键点:

  • 不依赖于在数值变大时会产生副作用的引导尺度参数
  • 允许对自注意力背后的能量景观的原始曲率和最大衰减曲率进行连续控制
  • 引入了一种查询模糊方法,相当于在不显著增加计算成本的情况下模糊整个注意力权重

详情请参阅 我们的论文

🔍 与其他工作的比较

SEG 在提升生成质量的同时(即使没有提示词),也不会严重受到使整体图像变灰或显著改变原始结构等副作用的影响。

无提示词的非条件生成

无提示词的 ControlNet 生成

🛠️ 安装

我们使用以下版本的 torchdiffusers

- torch 2.0.1
- diffusers 0.27.2

🚀 快速开始

使用我们的 Jupyter notebook 演示快速上手:

  1. sdxl_seg.ipynb:使用 SDXL 的基础用法
  2. sdxl_controlnet_seg.ipynb:与 ControlNet 的集成

这是一个 Python 脚本示例:

from pipeline_seg import StableDiffusionXLSEGPipeline
pipe = StableDiffusionXLSEGPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
)

device = "cuda"
pipe = pipe.to(device)
prompts = [""]
seed = 10

generator = torch.Generator(device="cuda").manual_seed(seed)
output = pipe(
    prompts,
    num_inference_steps=25,
    guidance_scale=1.0,
    seg_scale=3.0,
    seg_blur_sigma=100.0,
    seg_applied_layers=['mid'],
    generator=generator,
).images

参数:

  • seg_scale:SEG 的尺度。我们通常将此参数固定为 3.0。如果无限模糊的结果仍不满意,请增加该值。
  • seg_blur_sigma:我们模糊注意力权重的程度。将此值设置为大于 9999.0 会导致无限模糊,这意味着查询是均匀的。经验表明,以指数方式控制它(例如,1, 4, 16, ...)是有效的。
  • seg_applied_layers:我们模糊注意力权重的层。我们默认使用 ['mid']

🙏 致谢

本项目建立在以下优秀工作的基础上:

📚 引用

如果您在研究或项目中使用 Smoothed Energy Guidance,请引用以下内容:

@article{hong2024smoothed,
  title={Smoothed Energy Guidance: Guiding Diffusion Models with Reduced Energy Curvature of Attention},
  author={Hong, Susung},
  journal={arXiv preprint arXiv:2408.00760},
  year={2024}
}