Diffusers 文档

Stable Diffusion 管线

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Stable Diffusion 管线

Stable Diffusion 是一个文本到图像的潜在扩散模型,由 CompVisStability AILAION 的研究人员和工程师创建。潜在扩散在较低维度的潜在空间上应用扩散过程,以减少内存和计算复杂度。这种特定类型的扩散模型在 Robin Rombach、Andreas Blattmann、Dominik Lorenz、Patrick Esser、Björn Ommer 的 High-Resolution Image Synthesis with Latent Diffusion Models 中提出。

Stable Diffusion 在 LAION-5B 数据集子集的 512x512 图像上进行训练。此模型使用冻结的 CLIP ViT-L/14 文本编码器,以文本提示为模型提供条件。凭借其 8.6 亿 UNet 和 1.23 亿文本编码器,该模型相对轻巧,可以在消费级 GPU 上运行。

有关 Stable Diffusion 如何工作以及它与基础潜在扩散模型有何不同的更多详细信息,请查看 Stability AI 的公告和我们自己的博客文章,了解更多技术细节。

您可以在 CompVis/stable-diffusion 找到 Stable Diffusion v1.0 的原始代码库,以及在 Stability-AI/stablediffusion 找到 Stable Diffusion v2.0 的原始代码库,以及它们用于各种任务的原始脚本。其他 Stable Diffusion 版本和任务的官方检查点可以在 CompVisRunwayStability AI Hub 组织上找到。探索这些组织以找到最适合您用例的检查点!

下表总结了可用的 Stable Diffusion 管线、它们支持的任务以及交互式演示

管线 支持的任务 🤗 Space
StableDiffusion 文本到图像
StableDiffusionImg2Img 图像到图像
StableDiffusionInpaint 图像修复
StableDiffusionDepth2Img 深度到图像
StableDiffusionImageVariation 图像变体
StableDiffusionPipelineSafe 过滤后的文本到图像
StableDiffusion2 文本到图像、图像修复、深度到图像、超分辨率
StableDiffusionXL 文本到图像、图像到图像
StableDiffusionLatentUpscale 超分辨率
StableDiffusionUpscale 超分辨率
StableDiffusionLDM3D 文本到 RGB、文本到深度、文本到全景
StableDiffusionUpscaleLDM3D ldm3d 超分辨率

提示

为了帮助您充分利用 Stable Diffusion 管线,这里有一些提高性能和可用性的提示。这些提示适用于所有 Stable Diffusion 管线。

探索速度和质量之间的权衡

StableDiffusionPipeline 默认使用 PNDMScheduler,但 🤗 Diffusers 提供了许多其他兼容的调度器(其中一些速度更快或输出质量更好)。例如,如果您想使用 EulerDiscreteScheduler 而不是默认的

from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler

pipeline = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)

# or
euler_scheduler = EulerDiscreteScheduler.from_pretrained("CompVis/stable-diffusion-v1-4", subfolder="scheduler")
pipeline = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", scheduler=euler_scheduler)

重用管线组件以节省内存

为了节省内存并在多个管线中使用相同的组件,请使用 .components 方法以避免多次将权重加载到 RAM 中。

from diffusers import (
    StableDiffusionPipeline,
    StableDiffusionImg2ImgPipeline,
    StableDiffusionInpaintPipeline,
)

text2img = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
img2img = StableDiffusionImg2ImgPipeline(**text2img.components)
inpaint = StableDiffusionInpaintPipeline(**text2img.components)

# now you can use text2img(...), img2img(...), inpaint(...) just like the call methods of each respective pipeline

使用 Gradio 创建 Web 演示

Stable Diffusion 管线在 Gradio 中得到自动支持,Gradio 是一个库,可以轻松地在 Web 上创建美观且用户友好的机器学习应用程序。首先,请确保您已安装 Gradio

pip install -U gradio

然后,围绕任何基于 Stable Diffusion 的管线创建一个 Web 演示。例如,您可以使用 Gradio 的 Interface.from_pipeline 函数,用一行代码创建一个图像生成管线

from diffusers import StableDiffusionPipeline
import gradio as gr

pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")

gr.Interface.from_pipeline(pipe).launch()

这将在您的浏览器中打开一个直观的拖放界面

类似地,您可以使用以下代码为图像到图像管线创建一个演示

from diffusers import StableDiffusionImg2ImgPipeline
import gradio as gr


pipe = StableDiffusionImg2ImgPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")

gr.Interface.from_pipeline(pipe).launch()

默认情况下,Web 演示在本地服务器上运行。如果您想与他人分享,可以通过在 launch() 中设置 share=True 来生成一个临时的公共链接。或者,您可以将您的演示托管在 Hugging Face Spaceshttps://huggingface.co/spaces 上以获得永久链接。

< > 在 GitHub 上更新