Google Colab ではじめる Stable Diffusion 1.5
「Google Colab」で「Stable Diffusion」によるテキストから画像を生成する方法をまとめました。
・Stable Diffusion 1.5
・HuggingFace Diffusers 0.8.1
1. Stable Diffusion
「Stable Diffusion」は、2022年8月に無償公開された画像生成AIです。ユーザが画像内容を説明するテキスト(プロンプト)を指定することで、それに応じて画像が自動生成されます。
2. HuggingFace Diffusers
「HuggingFace」は、人工知能のライブラリ、モデル、データセットの共有サイトです。「HuggingFace Diffusers」は、「Stable Diffusion」をはじめとする拡散モデルの各種実装およびモデルを、共通インタフェースで簡単に利用するためのパッケージになります。
3. Colabでの実行
Colabでの実行手順は、次のとおりです。
(1) メニュー「編集→ノートブックの設定」で、「ハードウェアアクセラレータ」に「GPU」を選択。
(2) パッケージのインストール。
# パッケージのインストール
!pip install diffusers[torch]==0.8.1 transformers(3) パイプラインの準備。
from diffusers import StableDiffusionPipeline
import torch
# パイプラインの準備
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16,
revision="fp16"
).to("cuda")(4) 推論の実行。
# 推論の実行
prompt = "cute cat ear maid"
image = pipe(prompt).images[0]
# 画像の保存と表示
image.save("output.png")
image画像が出力されます。

4. StableDiffusionPipelineの引数
「StableDiffusionPipeline」の引数は、次のとおり。
・prompt (str or List[str]) - プロンプト
・height (int, optional, defaults to 512) - 画像幅 (pixel)
・width (int, optional, defaults to 512) - 画像高さ (pixel)
・num_inference_steps (int, optional, defaults to 50) - ノイズ除去ステップ数。通常、ノイズ除去ステップを増やすと、推論が遅くなるが、画像の品質が高くなる
・guidance_scale (float, optional, defaults to 7.5) - ガイダンススケール。通常、ガイダンススケールを増やすと、画質が低下するが、プロンプトに関連した画像が生成されやすくなる
・negative_prompt (str or List[str], optional) - ネガティブプロンプト
・num_images_per_prompt (int, optional, defaults to 1) - プロンプトごとに生成する画像数
・eta (float, optional, defaults to 0.0) - DDIMのパラメータ eta (η)。schedulers.DDIMScheduler にのみ適用
・generator (torch.Generator, optional) - 生成を決定論的にするtorchジェネレータ。
・latents (torch.FloatTensor, optional) - 画像入力として使用するPre-generated noisy latents
・output_type (str, optional, defaults to "pil") - 画像出力形式 (PIL.Image.Image or np.array)
・return_dict (bool, optional, defaults to True) - Tupleの代わりに StableDiffusionPipelineOutputを返すかどうか
・callback (Callable, optional) - 推論中にcallback_stepsステップごとに呼び出される関数。callback(step: int, timestep: int, latents: torch.FloatTensor)
・callback_steps (int, optional, defaults to 1) — コールバック関数の呼び出し頻度
5. Stable Diffusionモデルの一覧
「Stable Diffusion」のモデルには、標準モデルの他に、追加学習が行われた数多くのモデルが提供されています。基本的に上記と同じ手順で、パイプラインを書き換えるだけで利用できます。
diffusers対応モデルは、以下のサイトで確認できます。

◎ Waifu Diffusion 1.3
2次元絵が得意で有名なモデルです。

パイプラインの作成手順は、次のとおりです。
from diffusers import StableDiffusionPipeline
import torch
# パイプラインの準備
pipe = StableDiffusionPipeline.from_pretrained(
"hakurei/waifu-diffusion",
torch_dtype=torch.float16,
revision="fp16"
).to("cuda")◎ Trinart Diffusion v2
「Trinart Diffusion」は、やわらかいタッチの2次元絵が得意なモデルです。

パイプラインの作成手順は、次のとおりです。revisionには、diffusers-60k / diffusers-95k / diffusers-115k を指定する必要があります。
from diffusers import StableDiffusionPipeline
# パイプラインの準備
pipe = StableDiffusionPipeline.from_pretrained(
"naclbit/trinart_stable_diffusion_v2",
torch_dtype=torch.float16,
revision="diffusers-115k",
).to("cuda")◎ shirayu/sd-tohoku-v1
東北ずん子プロジェクトのキャラクターイラストを用いて学習したモデルです。

以下の5名のキャラクターのキーワードを使えます。
・itako : 東北イタコ
・zunko : 東北ずん子
・kiritan : 東北きりたん
・zundamon : ずんだもん (人間形態)
・metan : 四国めたん
パイプラインの作成手順は、次のとおりです。DiffusionPipelineを使います。
from diffusers import DiffusionPipeline
# パイプラインの準備
pipe = DiffusionPipeline.from_pretrained(
"shirayu/sd-tohoku-v1"
).to("cuda")