稳定扩散
稳定扩散是一个文本到图像的潜在扩散模型。查看此 博客文章 以获取更多信息。
如何生成图像?
要在 Gaudi 上使用稳定扩散生成图像,您需要实例化两个实例
- 一个带有
GaudiStableDiffusionPipeline
的管道。此管道支持文本到图像生成。 - 一个带有
GaudiDDIMScheduler
的调度器。此调度器已针对 Gaudi 优化。
在初始化管道时,您必须指定use_habana=True
以将其部署在 HPU 上。此外,为了获得尽可能快的生成速度,您应该使用use_hpu_graphs=True
启用HPU 图表。最后,您需要指定一个 Gaudi 配置,该配置可以从 Hugging Face Hub 下载。
from optimum.habana.diffusers import GaudiDDIMScheduler, GaudiStableDiffusionPipeline
model_name = "CompVis/stable-diffusion-v1-4"
scheduler = GaudiDDIMScheduler.from_pretrained(model_name, subfolder="scheduler")
pipeline = GaudiStableDiffusionPipeline.from_pretrained(
model_name,
scheduler=scheduler,
use_habana=True,
use_hpu_graphs=True,
gaudi_config="Habana/stable-diffusion",
)
然后,您可以调用管道以从一个或多个提示生成图像
outputs = pipeline(
prompt=["High quality photo of an astronaut riding a horse in space", "Face of a yellow cat, high resolution, sitting on a park bench"],
num_images_per_prompt=10,
batch_size=4,
output_type="pil",
)
输出可以是 PIL 图像或 Numpy 数组。查看 此处 您可设置的所有参数,以便根据您的喜好调整生成。
查看官方 Github 存储库中提供的 示例。
稳定扩散 2
稳定扩散 2 可以使用完全相同的类。这是一个示例
from optimum.habana.diffusers import GaudiDDIMScheduler, GaudiStableDiffusionPipeline
model_name = "stabilityai/stable-diffusion-2-1"
scheduler = GaudiDDIMScheduler.from_pretrained(model_name, subfolder="scheduler")
pipeline = GaudiStableDiffusionPipeline.from_pretrained(
model_name,
scheduler=scheduler,
use_habana=True,
use_hpu_graphs=True,
gaudi_config="Habana/stable-diffusion-2",
)
outputs = pipeline(
["An image of a squirrel in Picasso style"],
num_images_per_prompt=10,
batch_size=2,
height=768,
width=768,
)
稳定扩散 2 有两个不同的检查点
- 使用 stabilityai/stable-diffusion-2-1 生成 768x768 图像
- 使用 stabilityai/stable-diffusion-2-1-base 生成 512x512 图像
超分辨率
稳定扩散上采样扩散模型由 CompVis、Stability AI 和 LAION 的研究人员和工程师创建。它用于将输入图像的分辨率提高 4 倍。
查看 此处 以获取更多信息。
如何提升低分辨率图像?
要在 Gaudi 上使用稳定扩散上采样生成 RGB 和深度图像,您需要实例化两个实例
- 一个带有
GaudiStableDiffusionUpscalePipeline
的管道。 - 一个带有
GaudiDDIMScheduler
的调度器。此调度器已针对 Gaudi 优化。
在初始化管道时,您必须指定use_habana=True
以将其部署在 HPU 上。此外,为了获得尽可能快的生成速度,您应该使用use_hpu_graphs=True
启用HPU 图表。最后,您需要指定一个 Gaudi 配置,该配置可以从 Hugging Face Hub 下载。
import requests
from io import BytesIO
from optimum.habana.diffusers import (
GaudiDDIMScheduler,
GaudiStableDiffusionUpscalePipeline,
)
from optimum.habana.utils import set_seed
from PIL import Image
set_seed(42)
model_name_upscale = "stabilityai/stable-diffusion-x4-upscaler"
scheduler = GaudiDDIMScheduler.from_pretrained(model_name_upscale, subfolder="scheduler")
url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd2-upscale/low_res_cat.png"
response = requests.get(url)
low_res_img = Image.open(BytesIO(response.content)).convert("RGB")
low_res_img = low_res_img.resize((128, 128))
low_res_img.save("low_res_cat.png")
prompt = "a white cat"
pipeline = GaudiStableDiffusionUpscalePipeline.from_pretrained(
model_name_upscale,
scheduler=scheduler,
use_habana=True,
use_hpu_graphs=True,
gaudi_config="Habana/stable-diffusion",
)
upscaled_image = pipeline(prompt=prompt, image=low_res_img).images[0]
upscaled_image.save("upsampled_cat.png")
提示
为了加速您的 Stable Diffusion 管线,您可以以完整的 *bfloat16* 精度运行它。 这也将节省内存。 您只需要在实例化您的管道时将 `torch_dtype=torch.bfloat16` 传递给 `from_pretrained`。 以下是如何操作
import torch
pipeline = GaudiStableDiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4",
scheduler=scheduler,
use_habana=True,
use_hpu_graphs=True,
gaudi_config="Habana/stable-diffusion",
torch_dtype=torch.bfloat16
)
文本反转微调
文本反转 是一种使用仅 3-5 个示例在您自己的图像上个性化 Stable Diffusion 等文本到图像模型的方法。
您可以在 此处 找到一个实现此训练方法的示例脚本。
< > 更新 在 GitHub 上