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_endとdenoising_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)
参照
この記事が気に入ったらサポートをしてみませんか?