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。
以下を読んでおけばドヤれます。
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
あたりは覚えておいて損はないかと思います。
おわり
コメントを残す