说明文档
SD-XL 1.0-base 模型卡

模型

SDXL 由一个用于潜在扩散的专家组合管道组成: 在第一步中,基础模型用于生成(带噪声的)潜在表示, 然后进一步使用精炼模型(可在此处获取:https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/)进行处理,该模型专门用于最终的降噪步骤。 请注意,基础模型可以作为独立模块使用。
或者,我们可以使用两阶段管道,如下所示: 首先,基础模型用于生成所需输出大小的潜在表示。 在第二步中,我们使用专门的高分辨率模型,并对第一步生成的潜在表示应用一种称为 SDEdit 的技术(https://arxiv.org/abs/2108.01073,也称为"img2img"), 使用相同的提示词。与第一步相比,这种技术稍慢,因为它需要更多的函数评估。
源代码可在 https://github.com/Stability-AI/generative-models 获取。
模型描述
- 开发者: Stability AI
- 模型类型: 基于扩散的文本到图像生成模型
- 许可证: CreativeML Open RAIL++-M License
- 模型描述: 这是一个可用于根据文本提示词生成和修改图像的模型。它是一个潜在扩散模型,使用两个固定的预训练文本编码器(OpenCLIP-ViT/G 和 CLIP-ViT/L)。
- 更多信息资源: 查看我们的 GitHub 仓库 和 arXiv 上的 SDXL 报告。
模型来源
出于研究目的,我们推荐使用我们的 generative-models GitHub 仓库(https://github.com/Stability-AI/generative-models),它实现了最流行的扩散框架(训练和推理),并将随时间添加新的功能(如蒸馏)。
Clipdrop 提供免费的 SDXL 推理服务。
- 仓库: https://github.com/Stability-AI/generative-models
- 演示: https://clipdrop.co/stable-diffusion
评估
上图评估了用户对 SDXL(带和不带精炼)与 SDXL 0.9 及 Stable Diffusion 1.5 和 2.1 的偏好。
SDXL 基础模型的性能明显优于之前的版本,而结合精炼模块的模型实现了最佳整体性能。
🧨 Diffusers
请确保将 diffusers 升级到 >= 0.19.0:
pip install diffusers --upgrade
此外,请确保安装 transformers、safetensors、accelerate 以及隐形水印:
pip install invisible_watermark transformers accelerate safetensors
要仅使用基础模型,您可以运行:
from diffusers import DiffusionPipeline
import torch
pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to("cuda")
# 如果使用 torch < 2.0
# pipe.enable_xformers_memory_efficient_attention()
prompt = "An astronaut riding a green horse"
images = pipe(prompt=prompt).images[0]
要使用完整的基础模型 + 精炼管道作为专家组合,您可以运行:
from diffusers import DiffusionPipeline
import torch
# 加载基础模型和精炼模型
base = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
)
base.to("cuda")
refiner = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
vae=base.vae,
torch_dtype=torch.float16,
use_safetensors=True,
variant="fp16",
)
refiner.to("cuda")
# 在此定义每个专家运行的步数以及步数百分比(80/20)
n_steps = 40
high_noise_frac = 0.8
prompt = "A majestic lion jumping from a big stone at night"
# 运行两个专家
image = base(
prompt=prompt,
num_inference_steps=n_steps,
denoising_end=high_noise_frac,
output_type="latent",
).images
image = refiner(
prompt=prompt,
num_inference_steps=n_steps,
denoising_start=high_noise_frac,
image=image,
).images[0]
当使用 torch >= 2.0 时,您可以通过 torch.compile 将推理速度提高 20-30%。只需在运行管道之前用 torch compile 包装 unet:
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
如果您的 GPU 显存受限,您可以通过调用 pipe.enable_model_cpu_offload 来启用 CPU 卸载,而不是 .to("cuda"):
- pipe.to("cuda")
+ pipe.enable_model_cpu_offload()
有关如何使用 diffusers 的 Stable Diffusion XL 的更多信息,请查看 Stable Diffusion XL 文档。
Optimum
Optimum 提供了一个与 OpenVINO 和 ONNX Runtime 都兼容的 Stable Diffusion 管道。
OpenVINO
安装带有 OpenVINO 所需依赖的 Optimum:
pip install optimum[openvino]
要加载 OpenVINO 模型并使用 OpenVINO Runtime 运行推理,您需要将 StableDiffusionXLPipeline 替换为 Optimum 的 OVStableDiffusionXLPipeline。如果您想加载 PyTorch 模型并即时将其转换为 OpenVINO 格式,可以设置 export=True。
- from diffusers import StableDiffusionXLPipeline
+ from optimum.intel import OVStableDiffusionXLPipeline
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
- pipeline = StableDiffusionXLPipeline.from_pretrained(model_id)
+ pipeline = OVStableDiffusionXLPipeline.from_pretrained(model_id)
prompt = "A majestic lion jumping from a big stone at night"
image = pipeline(prompt).images[0]
您可以在 optimum 文档中找到更多示例(如静态重塑和模型编译)。
ONNX
安装带有 ONNX Runtime 推理所需依赖的 Optimum:
pip install optimum[onnxruntime]
要加载 ONNX 模型并使用 ONNX Runtime 运行推理,您需要将 StableDiffusionXLPipeline 替换为 Optimum 的 ORTStableDiffusionXLPipeline。如果您想加载 PyTorch 模型并即时将其转换为 ONNX 格式,可以设置 export=True。
- from diffusers import StableDiffusionXLPipeline
+ from optimum.onnxruntime import ORTStableDiffusionXLPipeline
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
- pipeline = StableDiffusionXLPipeline.from_pretrained(model_id)
+ pipeline = ORTStableDiffusionXLPipeline.from_pretrained(model_id)
prompt = "A majestic lion jumping from a big stone at night"
image = pipeline(prompt).images[0]
您可以在 optimum 文档中找到更多示例。
使用
直接使用
该模型仅用于研究目的。可能的 研究领域和任务包括:
- 艺术品生成以及在设计和其他艺术过程中的应用。
- 教育或创意工具中的应用。
- 生成模型研究。
- 安全部署可能生成有害内容的模型。
- 探查和理解生成模型的局限性和偏见。
下文描述了排除的使用场景。
范围外使用
该模型并未训练为事实性或真实的人物或事件表示,因此使用该模型生成此类内容超出了该模型的能力范围。
局限性和偏见
局限性
- 该模型无法实现完美的照片级真实感
- 该模型无法渲染可辨认的文字
- 该模型在更复杂的组合性任务中表现困难,例如渲染"蓝色球体上的红色立方体"对应的图像
- 人脸和一般人物可能无法正确生成。
- 模型的自动编码部分是有损的。
偏见
虽然图像生成模型的能力令人印象深刻,但它们也可能加强或加剧社会偏见。
stabilityai/stable-diffusion-xl-base-1.0
作者 stabilityai
创建时间: 2023-07-25 13:25:51+00:00
更新时间: 2023-10-30 16:03:47+00:00
在 Hugging Face 上查看