見出し画像

Stable Diffusionでの検証のやり方

皆様、こんにちは!
彼女に作品見せたら「胸でかいのとパンツ見えそうなの下品」と言われたのにこれから大きくても垂れない胸をどうやったら描けるか検証しようとしているStmic | AIGirl_Photoです!
今回は普段、僕がしている検証をどのような流れで行なっているかをマニュアルのような形で残しておこうと思います!
自分でも気になることを検証してみたいという方のお役に立てれば幸いです。
今後、僕と一緒に共同研究的な感じで検証を手伝ってもらえる人を募集しようかな〜と思っているので、その時の手順書にでもなればなと思っています!

検証の手順

①DinamicPromptsをExtensionに追加
②題材の決定
③基本となるプロンプト(固定するプロンプト)を決める
④DinamicPrompts or XYZ plotでSeedを固定して検証する

①DinamicPromptsをExtensionに追加

DynamicPromptsは{}で括った単語の中を自動選択してくれる機能です。
シードを固定した状態で、プロンプトをどんどん変えていきたいという時に大活躍します!

前は別のExtensionsにWildCardsという機能があって、
WildCardsはあらかじめ用意したテキストファイルに羅列された単語の内どれか一つをプロンプト実行時にランダムに選択するという機能だったのですが、DynamicPromptsにも同様の機能が追加されたようで、競合していたので、DynamicPromptsを追加するだけでいいです!
詳しくは別note参照!

/stable-diffusion-webui/extensions/にDynamicPromptsのリポジトリを追加すればOKです。
こんな感じ↓ /stable-diffusion-webuiまでのPATHは自分の環境に合わせて下さい!

#Extensions追加系コード
!git clone https://github.com/adieyal/sd-dynamic-prompts.git /content/stable-diffusion-webui/extensions/sd-dynamic-prompts

WildCard機能はextensions/sd-dynamic-prompts/wildcards
にWildCardのtxtを追加すれば使えます。

この2つを使えば、__hair__とか{bottoms | skirts}などの書き方ができます。
__hair__はhair.txtに書かれている髪型のうちどれかがランダムに選択されます。
{bottoms | skirts}はズボンかスカートかが50%50%で選択されます。
ちなみに{bottoms | }にすれば、ズボンか何もなしが50%50%で選択されます。

この機能と後述するXYZ plotという機能を使えば簡単に条件を少しずつ変えながら大量の画像を出力することができます。

題材の決定

題材はなんでもいいのですが、実際にプロンプトを書いて取り組む前にある程度、簡単なシナリオ、例えばどんな変数で検証しようか等を考えておいた方がいいです。
いきなりプロンプト書き出すと条件の漏れだったりが起きて、あとで整理するときに分けわかんなくなります笑

例えば「色んな感情の顔がどんなプロンプトで出るのか検証」したいとします。
そこで大まかに2通りのアプローチを考えます。(検証によってはもっと場合分け多い方がいい時もあります)
①happy, sadなど実際に感情の単語を入力するアプローチ
②口角を上げる、眼尻を下げるなど顔のパーツを操作するアプローチ

次に、①の考えられる感情をWildCardsで使うために列挙します
Happy, joyful, sad, angry, serious, apathetic・・・
これをemotion.txtファイルに書いておきます。
単純に__emotion__と書いてもいいですし、__emotion__face、__emotion__eyesとか書いてもいいですし、全部書いてもいいです。

②の顔のパーツも同様です。分かりやすさのため、日本語で書きます。
口角、眼尻、眉毛、・・・
これをface.txtファイルに書いておきます。
これは上げ下げするので__face__{up|down}みたいに書けば、口角を上げたとき、下げたとき・・・みたいなプロンプトがランダムで選択されます。
眉間{狭い|広い}とかもありですね。

①と②の全部の組み合わせを総当たりにすると爆発するので、
どっちかだけにして効果があるのか検証とかでも十分役立つ情報になります。

基本となるプロンプト(固定するプロンプト)を決める

これはみなさんが普段使っているプロンプトでOKです。
僕は↓のプロンプトをベースに検証してます。
1girl, solo, best quality, masterpiece, ultra high res, (photorealistic:1.4), looking at viewer,
ここで大事なのは、ベースをあまり長いプロンプトにしないことです。
プロンプトは長くなればなるほど、一単語の影響力は落ちていきます。
なので検証するプロンプトの影響力を大きくするためにも、
ベースは出来るだけシンプルな方がいいです。

Settingでプロンプトをテキストで出るように変更

ちょっとずつ条件を変えて大量に画像を生成しても、どの画像がどのプロンプトだったかあとでわからなくなってしまうことを防ぐために便利な設定があります。

Create a text file next to every image with generation parameters.
って設定です。
チェックをつけると画像の同じ名前のテキストファイルが生成されて、そこにプロンプトや各種設定が書かれます。
なので、後からこの写真のプロンプトなんだったっけ?となっても同じ名前のテキストファイルを見たら、分かるというわけです!

Seedを固定して検証する

いよいよ検証ですね!
まず検証で大事なのはSeedを固定することです。
これにより、プロンプトや他の設定値などの変化のみを可視化して、
何が画像にどれくらいの影響を与えたのかを検証することができます。

シードを固定する方法2つあります。
・XYZ plot
・DinamicPrompts

XYZ plotはこのように使います。

このように入力すると、
ステップ数が「20, 24, 28, 33」の場合、
CFG Scaleが「5, 5.5, 6, 6.5, 7, 7.5, 8」の場合、
Denoising strengthが「0.4, 0.45. 0.5, 0.55, 0.6, 0.65, 0.7, 0.75」の場合
を総当たりで実行してくれます。

画像ではX ,Y,Z3つとも入力していますが、1つでも、2つでも大丈夫です。
ただ1つだけだと何故かSeedの値が変わっていきます。バグ?
2つだと固定された状態で総当たりです。

XYZはプロンプトは固定で、他の設定値を変えたい時に便利です。
ただ今回はプロンプトを変更していきたいので、もう一つの方法を使います。

それがDinamicPromptsで固定する方法です。
↓の画像はDynamicPromptsをExtensionsに追加したら出てきます

下の方にある「fixed seed」にチェックを入れたらSeedが固定されます。
この状態で、上から二つ目のCombinatorial generationにチェックを入れると
{}で記述された組み合わせを総当たりで実行してくれます。

例えば{りんご|みかん},{大きい|小さい}とプロンプトに書いてれば、
りんご大きい、りんご小さい、みかん大きい、みかん小さいを実行してくれます。batch size, countは両方1で大丈夫です。

まとめ

いかがだったでしょうか?
DynamicPromptsさえ入れてしまえば、誰でも簡単に検証出来るので、是非やってみて下さい!
ちなみに整理する作業はめっちゃ大変です笑
でも、結構意外な発見があったり、Twitterで発表したらみんな褒めてくれたりするんで、好奇心強い人や承認欲求に飢えてる僕みたいな人にはオススメです!

それでは、また!よきAIライフを!

最後をまでお読み頂きありがとうございます! Twitter、Instagramなどで作品を投稿しているので偉そうに検証しているやつの作品がどんなもんか是非お確かめ下さい! 結構露出が多い画像が多いので、苦手な人は苦手を克服するチャンスだと思って是非遊びに来てください!