ジャコ Lab

プログラミング関連のメモ帳的ブログです

今更ながら Stable Diffusion を初めて触ってみた

Stable Diffusion は知っているが、使ったことがない。
Stable Diffusion について調べてみると色々な情報 (Stable Diffusion から派生したモデル?)が出てきてよくわからん。
Stable Diffusion Web UI の情報ばかりが出てきて困る。

そんな人が 2024 年に入って初めて触れてみたという記事です。

はじめに

Stable Diffusion は画像生成AI ですが、Stable Diffusion Web UI を使用すれば誰でも簡単に利用することができます。
しかし、自分は「画像生成」が目的ではなく、生成AI を触ってみたい。Web UI でポチポチするものではなくコードで学ぶのが目的でした。

Stable Diffusion について

色々調べていると「Web UI」と「diffusers」の2択になると思われます。
ちょうどよく?「Web UI」は Google Colab から利用すると怒られるようなので、「diffusers」とやらを利用することになりそうです。

Google Colab とは

正式名称は Google Colaboratory となっていますが Google Colab と呼んでいます。
GPU 環境をある程度無料で利用することができます。

Google Colab で Stable Diffusion v2.1 を実行してみる

Google Colab のノートブックを作成する

colab.research.google.com

上記の Google Colab トップページにアクセスすると以下のような「ノートブックを開く」のダイアログが表示されます。

ノートブックを開くダイアログ

ここから「ノートブックを新規作成」ボタンをクリックして、Google Colab 用のファイルを作ります。
ここで作成したファイルは「Google Drive」に保存されます。

もしくは、以下のように Google Drive から新規作成することも可能です。

Google Drive からファイルを作成

GPU を使えるようにノートブックを設定する

  1. メニュー -> ランタイム -> ランタイムタイプの変更を選択する
    ランタイムタイプの変更
  2. ランタイムタイプを GPU にする
    ランタイムタイプを変更ダイアログ

パッケージをインストールする

!pip install --upgrade diffusers[torch]

パイプラインを用意する

from diffusers import StableDiffusionPipeline
import torch

pipe = StableDiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-2-1",
    torch_dtype=torch.float16,
    revision="fp16"
)
pipe.to("cuda")

※「torch_dtype=torch.float16」は、半精度の浮動小数点で使用メモリを半分にできるらしい
※「revision="fp16"」は、半精度ブランチらしい

画像生成して表示する

prompt = "cute ghost"
image = pipe(prompt).images[0]
image

すべてのセルを実行してみる

生成された画像

まとめ

たぶん、可愛いゴーストが生成されました。

以下とか確認すると StableDiffusionPipeline ではなくて、
AutoPipelineForText2Image を使ってるけど、新しいものは AutoPipelineForText2Image なのかな?? huggingface.co