見出し画像

Stability AI「SDXL 1.0」をGoogle Colabで試す

SDXL 1.0は従来のStable Diffusionモデルを遥かに超える、高性能なモデルになっています。


Google Colabで試す

base

  • ランタイム」から「すべてのセルの実行」で実行

  • ランタイムはGPUに設定されています。

baseコード

ライブラリのインストール▼

!pip install diffusers --upgrade
!pip install invisible_watermark transformers accelerate safetensors

パイプラインでSDXL1.0baseモデルを準備▼

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")

画像生成▼

prompt = "penguin flying in the sky"
n_steps = 30 # デフォルト50

image = pipe(
    prompt=prompt,
    num_inference_steps=n_steps
    ).images[0]

image.save('output.png')
image

base + refiner

  • ランタイム」から「すべてのセルの実行」で実行

  • ランタイムはGPUに設定されています。

denoising_enddenoising_startを同じ値に設定し、num_inference_steps を一定に保つようします。

base + refinerコード

ライブラリのインストール▼

!pip install diffusers --upgrade
!pip install invisible_watermark transformers accelerate safetensors

パイプラインでSDXL1.0baseモデルとrefinerモデルを準備▼

from diffusers import DiffusionPipeline
import torch

# base
base = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16, 
    variant="fp16", 
    use_safetensors=True
)
base.to("cuda")

# refiner
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",
)

# cudaにすると画像生成時にGPU VRAMがオーバーします
# refiner.to("cuda")
refiner.enable_model_cpu_offload()

画像生成▼

prompt = "penguin flying in the sky"

n_steps = 50 # デフォルト50
high_noise_frac = 0.8

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]

image.save('output_refiner.png')
image

比較用の画像生成▼

from PIL import Image, PngImagePlugin
import io
import base64

prompt = "penguin flying in the sky"

# Define how many steps and what % of steps to be run on each experts (80/20) here
n_steps = 50 # デフォルト50
high_noise_frac = 0.8

base_image = base(
    prompt=prompt,
    num_inference_steps=n_steps,
).images[0]

base_image.save('output_base.png')

refiner_image = refiner(
    prompt=prompt,
    num_inference_steps=n_steps,
    # denoising_start=high_noise_frac,
    image=base_image,
).images[0]

refiner_image.save('output_refiner.png')

画像を並べるて表示▼

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

def combine_images_horizontally(image1, image2):

    fig, axes = plt.subplots(1, 2, figsize=(10, 5))

    plt.subplots_adjust(wspace=0)

    # 1つ目の画像を表示
    axes[0].imshow(image1)
    axes[0].axis('off')
    axes[0].set_title("base", fontsize=12, y=-0.1)

    # 2つ目の画像を表示
    axes[1].imshow(image2)
    axes[1].axis('off')
    axes[1].set_title("refiner", fontsize=12, y=-0.1)

    plt.show()

image1 = base_image
image2 = refiner_image
combine_images_horizontally(image1, image2)

参照

この記事が気に入ったらサポートをしてみませんか?