こんばんは、スタジオ真榊です。今回はローカル生成の「バリエーション生成」の基本と応用について掘り下げた特集記事です。単にガチャを繰り返してよくできたものをピックアップするのではなく、意図通りの結果を効率的に得るために「偶然性を意図的に生かす」手法を紹介していきます。

AIは物語性があって正確なイラストを作るのが苦手な代わりに、疲れたり飽きたりしませんから、「数撃ちゃ当たる方式」で大量に画像生成して、よくできたものを採用するのが基本ではあります。ただ、そうしたやり方はあまり効率が良くないですし、どこか「神頼み」「まぐれ当たり」な雰囲気漂う作品作りになってしまいます。

きちんと意図を持ったイラストづくりをするためには、AIの偶然性にもう少し人間が関与することが効果的だと考えています。Controlnetを使って自分が描いた線画をガチガチに固定するなど、偶然性をほぼ排除してしまうのも一つの手ですが、記事後段で紹介するのはバリエーション生成を使って「偶然性をほどよく味方につける」手法。具体的にどういうものか、基本操作と実際のワークフローを見ていきましょう。

バリエーション生成の基本操作

バリエーション生成とは、一言で言えば「同じSEED値でちょっとだけ違う画像を生成する」ということ。普通は使用するモデル・プロンプト・SEED値などが全く同じなら、何度生成しても全く同じ画像が出てくるわけですが、こちらの画像のように同じSEED値「11111」でも、バリエーション生成機能で細部が少し異なる画像を出すことができるわけです。(セーラー服の襟や袖のラインに注目してみてください)

バリエーション生成の基本操作:図版1

ほとんどイメージ通りの画像ができたけれども、衣装の細部が設定と違ったり、指の本数が多かったりと小さなミスで台無しになってしまったときなどに、バリエーション生成をすることで「より当たり確率の高いガチャ」ができるようになるわけですね。

<その他ボタン>

Seed値の入力欄の右側に、ランダム生成を意味する「-1」を入力するサイコロ「🎲」ボタンと、最後に生成した画像のSeed値を入力するリサイクル「♻️」ボタンがあります。そのさらに右側にある「その他」ボタンを押すことで、「バリエーションのシード」などのメニューが現れます。

その他ボタン:図版1

<各パラメータ―の意味>

「その他」画面に出てくる4つのパラメータの意味は以下の通り。

・バリエーションのシード(以下、variation seed値)

「シード値のシード値」のような概念です。シード値とはそもそも、text to imageの最初の完全ノイズのパターンを決定する背番号のようなものでした。 seed値で生成できる画像に、「variation seed値」で生成できる画像を「バリエーションの強度」に従って混ぜるのが、バリエーション生成ということになります。

画像のように「-1」になっていると、シード値「448782517」に対してランダムな数値で生成した画像を混ぜることになります。

・バリエーションの強度

要するに、バリエーション生成の画像は、二つのSeed値を持つことになるわけですが、「バリエーション強度」の設定によって、どちらのSeed値に近い画像を生成するかを決定することができます。「0」だとSeed値そのもの、「1」だとvariation seed値そのものの生成結果になるため、ここを「0.1」程度に弱めることで、いま生成した画像と「ちょっとだけ違う」バリエーションを出せるようになるわけです。

・元の幅と対応するシードからのサイズ変更

・元の高さと対応するシードからのサイズ変更

デフォルトは0。生成した画像が気に入ったけれども、キャンバスサイズがイメージと違ったので変えたいときに使うパラメータです。例えばこちらの画像は全く同じSeed値、設定、プロンプトで生成した画像ですが、キャンバスサイズが1408x1024pxの縦長か横長かによってここまで違う画像になっています。

各パラメータ―の意味:図版1

同じSeed値を設定してキャンバスサイズを変更したときに、サイズ変更前のキャンバスサイズをこのパラメータに入力すると効果が発動します。結果、このように全く同じとはいかないものの、元画像とやや近い構図を出すことができます。

(※ただ、あまり再現性は高くないため、使う場面は少ないかもしれません。元画像から「アウトペイント」をした方が安定しそう)

各パラメータ―の意味:図版2

バリエーション強度でこう変わる

バリエーション強度を変えるとどのように画像が変化するか、XYZ plotで確かめてみましょう。ここに、同じモデルやプロンプトで出したseed値「11111」と「22222」の画像があります。

バリエーション強度でこう変わる:図版1

このようにseed値を11111、variation seed値を22222とします。バリエーション強度が0だと左の絵に、1だと右の絵に近づくはずです。

バリエーション強度でこう変わる:図版2

ちなみに、XYZ plotではバリエーション強度のことが「Var. strength(変化の強度)」と書かれているので注意が必要です。このように記入すると、0~1まで0.2刻みで比較生成できます。

バリエーション強度でこう変わる:図版3

こちらが比較実験の結果です。

バリエーション強度でこう変わる:図版4

img2imgでノイズ除去強度を高めていくのと違って、なんとも言えない不思議な変化をしていくのが分かると思います。「0.5だとちょうど真ん中」というものでもないようですが、0.2と0.8ならおおよそ各seed値に近いものが出てくれますね。

こちらはプロンプト「1girl」で二つのseed値のバリエーションを出したもの。

バリエーション強度でこう変わる:図版5

ネクタイや髪型の変化が興味深いですが、どのようなものができるかはかなりランダム性が高いので、やはり「低強度でちょっとしたバリエーションを出す」程度の使い方が良いのかなと思います。

実際のワークフロー

バリエーション生成は要するに、「ちょっと変えたいシード値を入力したら、あとはその他タブからバリエーションシードを決めて、バリエーション強度を決めたらおしまい」という非常にシンプルな機能です。どのように使うと効果的かを実際のワークフローで紹介していきましょう。

今回のお題は「ミナちゃんがフットボールを持ってターフ(芝)の上を爆走しているイラスト」。AIイラストは「なんとなく中央に女の子がいて、可愛いポーズを取っていて、エロいかエモいといいね」という感じになりがちなのですが(AIはこういうふんわりしたお題が一番得意)、こういうちょっとお題が変わったものや、意図や文脈に沿ったものも、ちゃんと注文通りに生成したいところです。