Stable Diffusion を触り始めてから 3日目の記事 です。
今回は Seed についての記事になります。
パイプラインを実行すると毎回ランダムで画像が作られますが、
生成された画像にはシードが割り振られています。
シードを固定すると生成される画像が 少しだけ 固定されるっぽいです。
※まだ全然上手く使えていません。
この記事では、そのシード値を調べたりしてみます。
- シード値の設定方法
- もう一度実行してみる
- プロンプトをちょっと変えてみる
- solo も追加してみる
- ランダムシードで値を確認してみる
- 上記で出力されたシード値を使用して同じプロンプトを実行してみる
- まとめ
シード値の設定方法
パイプラインに torch の Generator を渡します。
generator = torch.Generator() generator.manual_seed(123) prompt = "super fine illustration,masterpiece,best quality,cute ghost" negative_prompt = "worst quality,ugly" image = pipe( prompt, negative_prompt=negative_prompt, generator=generator, # これを追加してます width=768, height=512, ).images[0] image
※パイプラインの準備は前の記事をご確認ください。
実行結果
コンソールログに以下が出力されました。
もう一度実行してみる
同じ画像が出力されました。
プロンプトをちょっと変えてみる
1匹になってほしかったので 1 cute ghost
にしてみました。
generator = torch.Generator() generator.manual_seed(123) print(f"Seed: {generator.initial_seed()}") - prompt = "super fine illustration,masterpiece,best quality,cute ghost" + prompt = "super fine illustration,masterpiece,best quality,1 cute ghost" negative_prompt = "worst quality,ugly" image = pipe( prompt, negative_prompt=negative_prompt, generator=generator, # これを追加してます width=768, height=512, ).images[0] image
実行結果
コンソールログに以下が出力されました。
Seed: 123
1匹にはなってくれませんでしたが、同じような見た目で出力されました。
solo
も追加してみる
- prompt = "super fine illustration,masterpiece,best quality,1 cute ghost" + prompt = "super fine illustration,masterpiece,best quality,1 cute ghost,solo"
実行結果
全然違う見た目になってしまいました
ランダムシードで値を確認してみる
シード値をランダムに設定しつつ、値を確認したい場合は以下のようにします。
generator = torch.Generator() - generator.manual_seed(123) + generator.seed() print(f"Seed: {generator.initial_seed()}")
実行結果
Seed: 17432345433372292963
上記で出力されたシード値を使用して同じプロンプトを実行してみる
generator = torch.Generator() - generator.seed() + generator.manual_seed(17432345433372292963) print(f"Seed: {generator.initial_seed()}")
実行結果
同じ画像が出力されました。
まとめ
同じパラメータであれば同じ画像が出力されるが、
プロンプトや画角など変えてしまうと、シード値を固定しても別の画像が出力されてしまい、
今のところ自分は上手く扱えませんでした。