Diffusers 文档
Stable Diffusion 管线
并获得增强的文档体验
开始使用
Stable Diffusion 管线
Stable Diffusion 是一个文本到图像的潜在扩散模型,由 CompVis、Stability AI 和 LAION 的研究人员和工程师创建。潜在扩散在较低维度的潜在空间上应用扩散过程,以减少内存和计算复杂度。这种特定类型的扩散模型在 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 版本和任务的官方检查点可以在 CompVis、Runway 和 Stability 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 上以获得永久链接。