見出し画像

Google Colab ではじめる Imagic Stable Diffusion - diffusers v0.7.0 版

Google Colab でdiffusers v0.7.0版の「Imagic Stable Diffusion」を試したのでまとめました。Colab 無料版ではVRAMが足りなかったので、Colab Pro/Pro+プレミアムで試しています。

・diffusers 0.7.0

1. Imagic

「Imagic」は、テキストだけで画像を編集する手法です。オバマさんの画像を入力し、「A photo of Barack Obama smiling with a big grin」 (満面の笑顔で微笑むバラク・オバマの写真) と指示するだけで、オバマさんの画像を維持したまま笑顔にすることができます。

2. ライセンスの確認

以下のモデルカードにアクセスして、ライセンスを確認し、「Access Repository」を押し、「Hugging Face」にログインして(アカウントがない場合は作成)、同意します。

3. Colabでの実行

Colabでの実行手順は、次のとおりです。

(1) メニュー「編集→ノートブックの設定」で、「GPU」の「プレミアム」(Colab Pro/Pro+のみ)を選択。

(2) GPUの確認。

# GPUの確認
!nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.32.03    Driver Version: 460.32.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  A100-SXM4-40GB      Off  | 00000000:00:04.0 Off |                    0 |
| N/A   43C    P0    45W / 400W |      0MiB / 40536MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+

(3) パッケージのインストール。

# パッケージのインストール
!pip install --upgrade diffusers[torch] transformers scipy

(4) HuggingFaceにログイン。

# HuggingFaceにログイン
from huggingface_hub import notebook_login
notebook_login()

(5) パイプラインの準備。
カスタムパイプライン「imagic_stable_diffusion」を利用します。

import requests
from PIL import Image
from io import BytesIO
import torch
from diffusers import DiffusionPipeline, DDIMScheduler

# パイプラインの準備
pipe = DiffusionPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4",
        safety_checker=None,
    use_auth_token=True,
    custom_pipeline="imagic_stable_diffusion",
    scheduler = DDIMScheduler(
        beta_start=0.00085, 
        beta_end=0.012, 
        beta_schedule="scaled_linear", 
        clip_sample=False, 
        set_alpha_to_one=False)
).to("cuda")

# ジェネレータの準備
generator = torch.Generator("cuda").manual_seed(0)

(6) 入力パラメータの準備。
画像はHuggingFaceのサンプル画像をDropBoxから読み込んでいます。

# 入力パラメータの準備
seed = 0
prompt = "A photo of Barack Obama smiling with a big grin"
url = 'https://www.dropbox.com/s/6tlwzr73jd1r9yk/obama.png?dl=1'
response = requests.get(url)
init_image = Image.open(BytesIO(response.content)).convert("RGB")
init_image = init_image.resize((512, 512))

# 画像の表示
init_image

(7) 学習の実行。
6分ほどかかります。Imagicでは結果出力のためにモデルの学習が必要になります。

# 学習の実行
res = pipe.train(
    prompt,
    init_image,
    guidance_scale=7.5,
    num_inference_steps=50,
    generator=generator)

(8) 推論の実行。
alphaを少しずつ変えて出力します。alphaが大きいほど変化します。今回はalhpa=1.5がちょうどよい変化具合になります。

# alpha=1 の画像生成
res = pipe(alpha=1)
image = res.images[0]
image.save("imagic_image_alpha_1.png")

# 画像の表示
image
# alpha=1.5 の画像生成
res = pipe(alpha=1.5)
image = res.images[0]
image.save("imagic_image_alpha_1_5.png")

# 画像の表示
image
# alpha=2 の画像生成
res = pipe(alpha=2)
image = res.images[0]
image.save("imagic_image_alpha_2.png")

# 画像の表示
image

4. 関連



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