見出し画像

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")



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