見出し画像

Stable Diffusionの仕組みに向き合おうとした話

Stable Diffusionはなぜ、こんなに時間を消費する仕組みであるのか、調べていたら、有益そうな情報を見つけたので共有しておく


なぜ、プロンプトで思い描いた画像は出ないのか

別にseed値やControlnetを使うことを否定するわけではない。でも、大抵は自分の好みの画像を生み出すまでに、promptの変更による調整と同一promptの実行の繰り返しで大半の時間を浪費しているのではないだろうか

自分の場合はうまくいかないと10枚~20枚に1枚、期待した(好みの)画像が出てくる始末だ。ネット界隈ではprompt(指示)を呪文として捉え、確率を上げるための(適格なワードを紹介する)記事が出回っている。ある程度、解決する部分もあるのだが、鵜呑みにしたら失敗することも多い

scrapboxのリンク先にある内容の引用(一部抜粋)すごい分かりやすい

Scrapboxの記事を見て、そもそも、Stable Diffusionの仕組上、Promptで自分の期待した画像を生成(コントロール)できると思っているのが間違いではないのかと考えた

出来事から振り返る

例えば、Prompt Aに対して期待していた、もしくは好ましいImage Bが1発で出たとしよう、これは確実なプロンプトであるか?

$$
Prompt A \to Image B
$$

次に Prompt Cに対してImage Bを期待したが、Image Dが出たとしよう。これは失敗例であるか?

$$
Prompt C \to Image D
$$

どちらも試行回数が1回しか行っていない場合は不正解である。仮に1/2、1/3の精度であればOKと評価するのであれば、最低限、同一プロンプトを2回、3回と回した方がよいのだが、それは人間的な評価であって、Stable Diffusionの評価とは異なるのではないか

要は、Prompt Cの方がImage Bを出すのに向いている可能性はあるのだ。恐らく、うまくいったプロンプトだから確実、うまくいかなかったプロンプトだから失敗という、人間的な感覚(試行して理解しようすること)でStable Diffusionを理解しようとするのだから、常に錯覚を起こしている様な状態で、前に使ったプロンプトを試しなおすなんてことが起こり、ループ状態が発生し時間を浪費しているのではないだろか。少なくても自分はその感覚がある

仮説

スタートが全然違うので辿り着いたところも全然違う

Stable Diffusionのシードとプロンプトの関係

つまり、Promptから推論されるStable Diffusionの着地点と、Promptから人間が思い描く着地点には一致もあれば不一致(Promptから描ける人が想定していなかったバリエーションの存在)もあると考えた方が自然なのではないだろうか

Stable Diffusionの方が人間の想像よりも遥かに様々な形の異なるイメージを思い描けているのではないだろうか

体感的な理解と収穫について

Stable Diffusionを感覚的に理解しようとすればするほど興味深いのは、特定の単語を与えても、何で違う画像が出てくるんだ!という感覚も分かるのだが、ふと冷静になって単語の意味を調べてみたり、出力された画像からStable Diffusionの意図を組もうとすると納得できてしまう部分もある。確かにその単語ならばその解釈は分かるという感覚。つまり、自分が思っているより指示は限定的(明確)ではない。

正確に言葉を伝えるには?という試行が、言語を学んでいる感覚、状況描写を伝える訓練をしている様で、別次元の取り組みに思えてくる

補足的な話でいえば、学習されたモデルによっても、学習内容により同じpromptですら回答が異なる可能性があるので余計に注意が必要だ。モデル作成者ではないため予め図る術を持たないのでPromptによる指示はリスクが大きい

どう取り組むべきか

ここからは自分のための対策案とはなるので、適宜、各人の目的に合わせてに検討をしてほしい

考え方を改める

要は、「promptの結果で一喜一憂せず、Stable Diffusionをpromptを自分な意味付けで必ずしも捉えてくれるとは解釈しない、確率的に捉えることを辞める」ことで精神的負担が減る

Stable Diffusionは、画像を生成するために、ランダムなノイズから始まって、徐々にノイズを減らすというプロセスを採用しているからです。このプロセスは、画像の最終的な結果を予測するのが困難になるため、確率的に捉えることが難しいのです。

Google Bard

プロンプトを辞書化する

今まで試したプロンプトで許容できる範囲(精度)のプロンプトを辞書化する、Dynamic Prompt単体ではPromptの影響を受けるので効率化は期待できないが、自分の試した結果から構築する分にはマシになる

特に実感したのは、Promptで同時に起こりえないことは省くことで精度が上がった経験がある、これはシーンへの理解に繋がることだ。なおかつ、この取り組みは自分の好みに合わせた内容だからの良さはある

ビジネスとして難しいのは、画像のリテイクが効きにくいことだろう、promptを書き直してということはムリゲーかと、仮にSeed値を1ずらしても必ず自分が期待した画像になるとは限らない。そもそも、詳細においてまで意図通りの画像を思い描くことが出来たとしても、意図通りのものを描くことは困難である。だから、ざっくり結果に許容を持てることで個人ユースには向いていると思われる。後は想像していなかった結果を楽しめる方がポジティブではあると思う

オフィシャルの解説にもあるように、上記のディレクトリに辞書を格納する
自分の辞書を格納

まとめ

如何に時間を無駄にしないかが鍵となるため、これからも並行作業をして欲しい画像が手に入る作業を検討していく

おわり!