🌊

SDXL-Turbo Modelで高速で画像を生成してみる

2024/03/23に公開

https://huggingface.co/stabilityai/sdxl-turbo

SDXL-Turboは、単一のネットワーク評価でテキストプロンプトからフォトリアルな画像を合成できる高速の生成型Text to Imageモデル。Adversarial Diffusion Distillation (ADD) と呼ばれる新しい訓練方法に基づいており、1~4ステップで高画質な画像をサンプリングできます。
paper:https://stability.ai/research/adversarial-diffusion-distillation

以下、Google Colabでサクッと試します。Notebookはこちら。
https://colab.research.google.com/drive/1z_sy73cGqCnbX0U3KFTGKLO7bqMHE0tT?usp=sharing

まずGPUをアクセラレータとして設定します。(筆者はColab Pro+利用です)

Text-to-Image:

SDXL-Turboはguidance_scaleやnegative_promptを使用しないため、guidance_scale=0.0で無効にします。
このモデルは512x512サイズの画像を生成するが、それ以上の画像サイズでも機能する上、高品質の画像を生成するには、1ステップで十分とのことです。

pip install diffusers transformers accelerate --upgrade -q
from diffusers import AutoPipelineForText2Image
import torch

pipe = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")

# ここを好きに変える
prompt = "XXXXXXXXX"

image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]
image

上記のpromptを変えることで出力できます。
初回の読み込み以降は大体5秒くらいで1枚作成可能。
品質そこそこでめっちゃ早いのが売りかな。

prompt = "A cinematic shot of a baby hamster wearing an intricate italian priest robe."

prompt = "A cinematic shot of a cute girl wearing an intricate maid outfit."

prompt = "A hyper-realistic portrait of a suave and dandy vampire"

Image-to-Image:

from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image
import torch

pipe = AutoPipelineForImage2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")

# ここの画像を元画像として好きな画像を指定する
init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png").resize((512, 512))

# ここのプロンプトを変える
prompt = "A cute cat ridding on a horse"

image = pipe(prompt, image=init_image, num_inference_steps=2, strength=0.5, guidance_scale=0.0).images[0]
image

上記はTutorialのコードそのままです。持ってきている画像はこれ。

出来上がりはこれ

promptを変えてみると・・

prompt = "A cat wearing an intricate maid outfit"

prompt = "An animetic picture of a cute cat"


これはあんまり変わっていないような・・。

prompt = "A cute cat ridding on a horse"


お、ちゃんと馬に乗ってる。

ちなみに
「このモデルは、人物や出来事の事実または真実の表現となるように訓練されていないため、そのようなコンテンツを生成するためにモデルを使用することは、このモデルの能力の範囲外です。このモデルは、Stability AI の利用規定に違反するような方法で使用しないでください。」
とのことです。つまり、歴史上の人物とか作るのやめてねってことですね。(どこぞのモデルはそれで炎上してるので・・)

Discussion