稳定扩散管道
稳定扩散是由来自 CompVis、Stability AI 和 LAION 的研究人员和工程师创建的一种文本到图像潜在扩散模型。潜在扩散在较低维的潜在空间上应用扩散过程,以减少内存和计算复杂度。这种特定类型的扩散模型在 使用潜在扩散模型进行高分辨率图像合成 中提出,作者为 Robin Rombach、Andreas Blattmann、Dominik Lorenz、Patrick Esser、Björn Ommer。
稳定扩散在来自 LAION-5B 数据集子集的 512x512 图像上训练。该模型使用冻结的 CLIP ViT-L/14 文本编码器来对模型进行文本提示条件化。凭借其 860M UNet 和 123M 文本编码器,该模型相对轻量级,可以在消费级 GPU 上运行。
有关稳定扩散的工作原理以及它与基础潜在扩散模型的不同之处的更多详细信息,请查看 Stability AI 的 公告 和我们自己的 博客文章,以获取更多技术细节。
您可以在 CompVis/stable-diffusion 中找到稳定扩散 v1.0 的原始代码库,以及 Stability-AI/stablediffusion 中的稳定扩散 v2.0 以及用于各种任务的原始脚本。不同稳定扩散版本和任务的其他官方检查点可以在 CompVis、Runway 和 Stability AI Hub 组织中找到。探索这些组织以找到最适合您用例的检查点!
下表总结了可用的稳定扩散管道、它们支持的任务和交互式演示
管道 | 支持的任务 | 🤗 空间 |
---|---|---|
StableDiffusion | 文本到图像 | |
StableDiffusionImg2Img | 图像到图像 | |
StableDiffusionInpaint | 修复 | |
StableDiffusionDepth2Img | 深度到图像 | |
StableDiffusionImageVariation | 图像变体 | |
StableDiffusionPipelineSafe | 过滤后的文本到图像 | |
StableDiffusion2 | 文本到图像、修复、深度到图像、超分辨率 | |
StableDiffusionXL | 文本到图像、图像到图像 | |
StableDiffusionLatentUpscale | 超分辨率 | |
StableDiffusionUpscale | 超分辨率 | |
StableDiffusionLDM3D | 文本到 RGB、文本到深度、文本到全景 | |
StableDiffusionUpscaleLDM3D | ldm3d 超分辨率 |
提示
为了帮助您充分利用稳定扩散管道,以下是一些提高性能和可用性的提示。这些提示适用于所有稳定扩散管道。
探索速度和质量之间的权衡
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 创建网页演示
Stable Diffusion 管道在 Gradio 中自动支持,Gradio 是一个让在网页上轻松创建漂亮且用户友好的机器学习应用的库。首先,确保你已安装 Gradio。
pip install -U gradio
然后,围绕任何基于 Stable Diffusion 的管道创建网页演示。例如,你可以使用 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("runwayml/stable-diffusion-v1-5")
gr.Interface.from_pipeline(pipe).launch()
默认情况下,网页演示在本地服务器上运行。如果你想与他人共享它,你可以通过在 launch()
中设置 share=True
来生成一个临时的公共链接。或者,你可以在 Hugging Face Spaceshttps://huggingface.co/spaces 上托管你的演示,以获得一个永久链接。