Google Colab ではじめる Imagic Stable Diffusion - diffusers v0.7.0 版
Google Colab でdiffusers v0.7.0版の「Imagic Stable Diffusion」を試したのでまとめました。Colab 無料版ではVRAMが足りなかったので、Colab Pro/Pro+のプレミアムで試しています。
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. 関連
この記事が気に入ったらサポートをしてみませんか?