Stable Diffusion txt2imgのパラメータ一覧

Stable Diffusionのtxt2imgには多くのパラメータが存在します。
様々な方がまとめて下さってますが
僕自身もきちんと調べてみたくなり実際に動かしながら検証してみました。
サンプルやちょっとした嬉しさも載せていますのでご参考まで。

検証環境

内容 詳細
OS Windows 11 Pro
CPU 12th Gen Intel(R) Core(TM) i5-12400 2.50 GHz
メモリ 32.0 GB (31.8 GB 使用可能)
GPU NVIDIA GeForce RTX 3060 12GB
Stable Diffusion https://github.com/CompVis/stable-diffusion
使用モデル v1-5-pruned-emaonly.ckpt
https://huggingface.co/runwayml/stable-diffusion-v1-5

Prompt

最も有名なパラメータです。
このプロンプトからStable Diffusionが画像を生成してくれます。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –prompt "XXXXXX"
形式 文字列
デフォルト値 a painting of a virus monster playing guitar
ヘルプ the prompt to render
ヘルプ(日本語) 描画用文字列です

サンプル

その他

プロンプトをさくっと作成したい場合はLexicaを使えばよいと思います。
画像検索やPromptから似た雰囲気のものを探してくれるので便利。
自分の作ったプロンプトを検索すれば実行前に雰囲気確認することもできます。

outdir

画像ファイルの出力先です。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –outdir "C:\output"
形式 文字列
デフォルト値 outputs/txt2img-samples
ヘルプ dir to write results to
ヘルプ(日本語) 結果の出力先です

skip_grid

グリッドを省略するかどうかを指定します。
グリッドとは個別の出力画像を一枚にまとめたものです。

グリッドは9枚程度のサンプルを見るには便利ですが一度にたくさん出すと見づらくなります。
また処理速度にも関係しますので不要ならこのパラメータを有効にするのが良いと思います。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –skip_grid
デフォルト値 指定なし(グリッドを生成する)
ヘルプ do not save a grid, only individual samples. Helpful when evaluating lots of samples
ヘルプ(日本語) 個別のサンプルのみの出力でグリッドを保存しません。多くのサンプルを評価するときに役に立ちます。

グリッドについて

以下のように出力した個別の画像を1枚の画像にまとめてくれます。

skip_save

個別の画像を保存するかどうかを指定します。
有効にすると個別の画像が保存されません。
速度を計測するための機能のようです。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –skip_save
デフォルト値 指定なし(個別サンプルを生成する)
ヘルプ do not save individual samples. For speed measurements.
ヘルプ(日本語) 個別のサンプルを保存しません。速度測定用。

速度比較

速度計測結果(W×H=640×320)
画像サイズによるかもしれませんが速度に大差はなさそうです。

グリッド 個別サンプル 測定結果(msec)
有り 有り 135687.7855
無し 有り 133221.5039
無し 無し 131840.1731

使用コマンド

Command->python scripts/txt2img.py --prompt "cat" --skip_grid --skip_save --n_iter 3 --W 640 --H 320 --seed 1 --ddim_steps 75 --plms

ddim_steps

DDIMステップ数
DDIM = Denoising Diffusion Implicit Models(拡散陰解法モデルのノイズ除去)

数値を大きくすると処理時間が長くなりますが画質が良くなります。
ですが大きすぎると特に効果はなくなります。
75~100あたりを指定しておくのがおすすめです。
ご興味がある方は比較動画を参照ください。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –ddim_steps 75
デフォルト値 50
ヘルプ number of ddim sampling steps
ヘルプ(日本語) DDIMサンプリングのステップ数

比較

Stable Diffusion のステップ数による画像変化【AIアート】

plms

PLMSというサンプラーを使用するかどうかを指定します。
指定しない場合はDDIMサンプラーが選択されます。
違うのはわかりますが"どう違うのか""どうすれば良くなるのか"はわかりませんでした。
PLMSの方が良い気がする・・・程度です。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –plms
デフォルト値 指定なし(DDIMサンプラーを使用)
ヘルプ use plms sampling
ヘルプ(日本語) PLMSサンプラーを使用する

比較

DDIMはマスクされた画像が混じってるのでPLMSの方が成功率は高いのかもしれません。
とはいえ、どっちもどっちというのが僕の感想です。

補足

僕が使用しているリポジトリはPLMSとDDIMの二種類ですが、
他のStable Diffusionのフォークには以下のようなものも用意されているようです。
おそらく乱数のばらつきの違いだと考えていますが詳しい方教えていただけるとうれしいです。

  • PLMS
  • DDIM
  • Euler a
  • Euler
  • LMS
  • Heun
  • DPM2
  • DPM2 a

laion400m

LAION400Mモデルを使用するかどうかを指定します。実はうまく使えていません。
それ以前にウチの貧弱なネット環境ではデータセットがとってこれない。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –laion400m
デフォルト値 指定なし
ヘルプ uses the LAION400M model
ヘルプ(日本語) LAION400Mモデルを使用する

その他

DataSetの場所

https://www.kaggle.com/datasets/romainbeaumont/laion400m?resource=download

fixed_code

付けておいても動作しますがどういう効果があるのかよくわかりません。
付けない方が無難と考えます。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –fixed_code
デフォルト値 指定なし
ヘルプ if enabled, uses the same starting code across samples
ヘルプ(日本語) 有効の場合、サンプル全体で同じ開始コードを使用します

比較画像

違いは特に見受けられませんでした。

ddim_eta

DDIMの時に動作可能です。PLMSを使用している場合は動作しません。
動作させるためには–plmsを外して実行します。
どういう効果があるのかは今一つわかりませんでした。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –ddim_eta 0.0
デフォルト値 0.0
ヘルプ ddim eta (eta=0.0 corresponds to deterministic sampling
ヘルプ(日本語) eta=0.0 は決定論的サンプリングに対応します

比較

以下にサンプルを挙げておきます。
出力画像に違いはあるのですが良い悪いが判断できずコントロールが難しそうです。

実行時間

実行時間について言及しているページがあったので2回実行時間を測定してみました。
1回目の実行時間に開きがあったので気にはなりましたが
2回目を見る限り特に違いはなさそうです。

eta 1回目(msec) 2回目(msec)
0 68749.1178 48675.4745
0.1 60979.1617 47967.4621
0.2 48816.5254 49276.0908
0.3 47567.0222 47728.6869
0.4 48042.2307 50124.0174
0.5 46940.6572 47772.0492
0.6 46493.4092 47452.4922
0.7 47508.7066 47029.8756
0.8 50406.5024 48410.439
0.9 47980.4782 46894.527

n_iter

指定した回数分画像を出力します。
後述のn_samples×n_iter数分個別の画像が出力されます。
大きい値を指定すると時間はかかりますが必要なVRAM数は増えないので便利です。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –n_iter 1
デフォルト値 2
ヘルプ sample this often
ヘルプ(日本語) 出力する回数

サンプル

H

出力する画像の高さです。64の倍数で指定します。
画像サイズによって品質が変わりますので結構重要です。
ただし大きすぎるとVRAM不足で動作しないという問題に悩まされます。
【参考】Stable Diffusionの画像サイズとクオリティ【AIアート】

概要

項目 詳細
コマンド例 python scripts/txt2img.py –H 640
デフォルト値 512
ヘルプ image height, in pixel space
ヘルプ(日本語) 画像の高さ、ピクセル空間

W

出力する画像の幅です。64の倍数で指定します。
こちらも画像サイズによって品質が変わりますので結構重要です。
ただし大きすぎるとVRAM不足で動作しないという問題に悩まされます。
【参考】Stable Diffusionの画像サイズとクオリティ【AIアート】

概要

項目 詳細
コマンド例 python scripts/txt2img.py –W 320
デフォルト値 512
ヘルプ image width, in pixel space
ヘルプ(日本語) 画像の幅、ピクセル空間

C

使用するモデルによって固有値がある模様。
僕が使っているモデルは4なので4以外は動かせず。
configの中にチャネルが指定されているようですがそれ以上のことはわかりませんでした。
ビット深さとかそういう話なのかなぁ・・・わかりません。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –C 4
デフォルト値 4
ヘルプ latent channels
ヘルプ(日本語) 潜在チャネル ← 翻訳をそのまま採用したがたぶん違う

f

ダウンサンプリング
入力された点を間引くものです。
数値を上げると画質が悪化します。数値を下げるとVRAMが足りなくなります。
使い方は難しく数値を下げるとVRAMが足りなくなり
数値を上げるとmodel固有のサンプリング数があるようで動かなかったりします。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –f 8
デフォルト値 8
ヘルプ downsampling factor
ヘルプ(日本語) ダウンサンプリング係数

比較

f = 8(デフォルト値)

f = 10

※とりあえずデフォルトの8と10だけ動きました。

n_samples

一度に出力する画像数。
副次的な効果としてこの値を減らすとVRAM使用量が減り
少し大きい画像が作成できる場合もあります。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –n_samples 3
デフォルト値 3
ヘルプ how many samples to produce for each given prompt. A.k.a. batch size
ヘルプ(日本語) 特定のプロンプトごとに生成するサンプルの数。別名バッチサイズ。

その他

n_samplesとn_itrの関係です。

n_rows

グリッド1行に含まれる画像の数を指定します。
ちょっと公式のヘルプの説明がおかしい気もします。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –n_rows 3
デフォルト値 0
ヘルプ rows in the grid (default: n_samples)
ヘルプ(日本語) グリッド1行に含まれる画像の数(デフォルト:n_samplesの値)

サンプル

以下はn_samples=3 n_rows=2を指定したものです。

scale

ガイダンススケールと呼ばれるものです。
プロンプトをどの程度順守するかを意味するという説明もみかけました。
ただあまりコントロールできるものではなさそうというのが僕の感想です。
デフォルト値付近がおよそ良さげな画像を出してくれます。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –scale 8
デフォルト値 7.5
ヘルプ unconditional guidance scale: eps = eps(x, empty) + scale * (eps(x, cond) – eps(x, empty))
ヘルプ(日本語) 無条件ガイダンス スケール: eps = eps(x, empty) + scale * (eps(x, cond) – eps(x, empty))

比較

from-file

プロンプトを指定ファイルから読み出し実行します。
改行により複数のプロンプトを含むこともできます。
1回の実行時間で複数のプロンプトを試せるので結構便利です。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –from-file "C:\test.txt"
デフォルト値 無し –promptの値が優先される
ヘルプ if specified, load prompts from this file
ヘルプ(日本語) 指定されている場合、このファイルからプロンプトを読み込みます

実行結果

実行に使用したファイルの内容

cat
dog
rabbit

config

configファイルのパスを指定できるようです。
デフォルトのconfigファイルは以下デフォルト値のパスに格納されています。
別のモデルを使用する際に切り分けるのには便利そうです。
中身を見ても中々自分でチューニングするのは難しそうです。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –config "c:/stable-diffusion/v1-inference.yaml"
デフォルト値 configs/stable-diffusion/v1-inference.yaml
ヘルプ path to config which constructs model
ヘルプ(日本語) モデルを構築する config へのパス

ckpt

AIの頭脳ともいえるckptファイル。
複数の頭脳をお持ちの方は任意のタイミングで頭脳を入れ替えたいと思います。
その際、このパラメータを使用すると良いと思います。
.ckptはcheckpointの略。これ豆ちしき。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –config "c:/stable-diffusion/v1-inference.yaml"
デフォルト値 models/ldm/stable-diffusion-v1/model.ckpt
ヘルプ path to checkpoint of model
ヘルプ(日本語) モデルチェックポイントのパス

seed

少し統計を触られてる方はわかると思いますが乱数の発生のさせ方です。
この数字を一致させることで出力画像を再現することができます。
逆に色んなものを出したい場合は別の数値に変更すればよいです。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –seed 42
デフォルト値 42
ヘルプ the seed (for reproducible sampling)
ヘルプ(日本語) シード (再現可能なサンプリング用)

その他

ちなみにデフォルトとして使用されている意味深な42。
以下を読んでおけばドヤれます。

Qiita – なぜ乱数のシード値は42なのか?

precision

選択肢は"full"と"autocast"の二択です。
fullにしても出力されるものは同じでした。メリットがよくわかっていません。
実行時間はfullの方がのびますので特にこだわりがなければ未指定(autocast)が良いと考えます。

概要

項目 詳細
コマンド例 python scripts/txt2img.py –precision "full"
デフォルト値 autocast
ヘルプ evaluate at this precision
ヘルプ(日本語) この精度で評価する

比較

実行時間

Precision 1回目(msec) 2回目(msec)
full 85156.0573 85707.6356
autocast 66009.5727 65711.0321

まとめ

ほぼデフォルトで良さそうですが、
画像のバリエーションを変化させるseed
品質が絡むHやW,ddima_steps
VRAMの使用量が増減するn_samples
作業効率化が狙えるn_itr,save_grid,from-file,ckpt
あたりは覚えておいて損はないかと思います。

おわり

PR

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です