
こんばんは、スタジオ真榊です。今回はローカル生成の「バリエーション生成」の基本と応用について掘り下げた特集記事です。単にガチャを繰り返してよくできたものをピックアップするのではなく、意図通りの結果を効率的に得るために「偶然性を意図的に生かす」手法を紹介していきます。
AIは物語性があって正確なイラストを作るのが苦手な代わりに、疲れたり飽きたりしませんから、「数撃ちゃ当たる方式」で大量に画像生成して、よくできたものを採用するのが基本ではあります。ただ、そうしたやり方はあまり効率が良くないですし、どこか「神頼み」「まぐれ当たり」な雰囲気漂う作品作りになってしまいます。
きちんと意図を持ったイラストづくりをするためには、AIの偶然性にもう少し人間が関与することが効果的だと考えています。Controlnetを使って自分が描いた線画をガチガチに固定するなど、偶然性をほぼ排除してしまうのも一つの手ですが、記事後段で紹介するのはバリエーション生成を使って「偶然性をほどよく味方につける」手法。具体的にどういうものか、基本操作と実際のワークフローを見ていきましょう。
目次
バリエーション生成の基本操作
<その他ボタン>
<各パラメータ―の意味>
バリエーション強度でこう変わる
構図を維持してプロンプト変更
実際のワークフロー
1.イメージから初期プロンプトを組む
2.テスト生成でプロンプトを整えていく
3.プロンプトを固定して構図ガチャを引く
4.バリエーション生成で「正解」を引く
5.Anytestで「塗り替え」
終わりに
バリエーション生成の基本操作
バリエーション生成とは、一言で言えば「同じSEED値でちょっとだけ違う画像を生成する」ということ。普通は使用するモデル・プロンプト・SEED値などが全く同じなら、何度生成しても全く同じ画像が出てくるわけですが、こちらの画像のように同じSEED値「11111」でも、バリエーション生成機能で細部が少し異なる画像を出すことができるわけです。(セーラー服の襟や袖のラインに注目してみてください)
ほとんどイメージ通りの画像ができたけれども、衣装の細部が設定と違ったり、指の本数が多かったりと小さなミスで台無しになってしまったときなどに、バリエーション生成をすることで「より当たり確率の高いガチャ」ができるようになるわけですね。
<その他ボタン>
Seed値の入力欄の右側に、ランダム生成を意味する「-1」を入力するサイコロ「🎲」ボタンと、最後に生成した画像のSeed値を入力するリサイクル「♻️」ボタンがあります。そのさらに右側にある「その他」ボタンを押すことで、「バリエーションのシード」などのメニューが現れます。
<各パラメータ―の意味>
「その他」画面に出てくる4つのパラメータの意味は以下の通り。
・バリエーションのシード(以下、variation seed値)
「シード値のシード値」のような概念です。シード値とはそもそも、text to imageの最初の完全ノイズのパターンを決定する背番号のようなものでした。 seed値で生成できる画像に、「variation seed値」で生成できる画像を「バリエーションの強度」に従って混ぜるのが、バリエーション生成ということになります。
画像のように「-1」になっていると、シード値「448782517」に対してランダムな数値で生成した画像を混ぜることになります。
・バリエーションの強度
要するに、バリエーション生成の画像は、二つのSeed値を持つことになるわけですが、「バリエーション強度」の設定によって、どちらのSeed値に近い画像を生成するかを決定することができます。「0」だとSeed値そのもの、「1」だとvariation seed値そのものの生成結果になるため、ここを「0.1」程度に弱めることで、いま生成した画像と「ちょっとだけ違う」バリエーションを出せるようになるわけです。
・元の幅と対応するシードからのサイズ変更
・元の高さと対応するシードからのサイズ変更
デフォルトは0。生成した画像が気に入ったけれども、キャンバスサイズがイメージと違ったので変えたいときに使うパラメータです。例えばこちらの画像は全く同じSeed値、設定、プロンプトで生成した画像ですが、キャンバスサイズが1408x1024pxの縦長か横長かによってここまで違う画像になっています。
同じSeed値を設定してキャンバスサイズを変更したときに、サイズ変更前のキャンバスサイズをこのパラメータに入力すると効果が発動します。結果、このように全く同じとはいかないものの、元画像とやや近い構図を出すことができます。
(※ただ、あまり再現性は高くないため、使う場面は少ないかもしれません。元画像から「アウトペイント」をした方が安定しそう)
バリエーション強度でこう変わる
バリエーション強度を変えるとどのように画像が変化するか、XYZ plotで確かめてみましょう。ここに、同じモデルやプロンプトで出したseed値「11111」と「22222」の画像があります。
このようにseed値を11111、variation seed値を22222とします。バリエーション強度が0だと左の絵に、1だと右の絵に近づくはずです。
ちなみに、XYZ plotではバリエーション強度のことが「Var. strength(変化の強度)」と書かれているので注意が必要です。このように記入すると、0~1まで0.2刻みで比較生成できます。
こちらが比較実験の結果です。
img2imgでノイズ除去強度を高めていくのと違って、なんとも言えない不思議な変化をしていくのが分かると思います。「0.5だとちょうど真ん中」というものでもないようですが、0.2と0.8ならおおよそ各seed値に近いものが出てくれますね。
こちらはプロンプト「1girl」で二つのseed値のバリエーションを出したもの。
ネクタイや髪型の変化が興味深いですが、どのようなものができるかはかなりランダム性が高いので、やはり「低強度でちょっとしたバリエーションを出す」程度の使い方が良いのかなと思います。
実際のワークフロー
バリエーション生成は要するに、「ちょっと変えたいシード値を入力したら、あとはその他タブからバリエーションシードを決めて、バリエーション強度を決めたらおしまい」という非常にシンプルな機能です。どのように使うと効果的かを実際のワークフローで紹介していきましょう。
今回のお題は「ミナちゃんがフットボールを持ってターフ(芝)の上を爆走しているイラスト」。AIイラストは「なんとなく中央に女の子がいて、可愛いポーズを取っていて、エロいかエモいといいね」という感じになりがちなのですが(AIはこういうふんわりしたお題が一番得意)、こういうちょっとお題が変わったものや、意図や文脈に沿ったものも、ちゃんと注文通りに生成したいところです。
1.イメージから初期プロンプトを組む
まずはどんなイラストを作りたいのか、イメージを言語化していきます。「ミナちゃんがボールを抱えて画面中央にカメラ方向にド迫力で走っていて、背景は青空と芝、競技場。視線はカメラ目線ではなく少し外れており、いかにもスポーツの一瞬を切り取ったような雰囲気に。表情は真剣で大汗をかいているのに、いつものセーラー服姿なのがどこかユーモラス…」のような着想で始めたいと思います。
言語化した着想を基に、次のようにプロンプトを組みました。
PP:1girl, solo,running,v-shaped eyebrows, holding american football \(object\), determined,grass,sky,running,speed lines, sweatdrop,(red-framed eyewear,semi-rimless eyewear:1.2),blue eyes,standing,white pupils,school uniform,serafuku,smile,hair between eyes,white shirt,navy_sailor_collar,ponytail,short sleeves,shiny skin,black hair,white bow,red neckerchief, navy pleated skirt,pantyhose,open mouth(+クォリティタグ)
ぱっと出てこないのはフットボール関連のプロンプトですが、拡張機能「SD WebUI Tag Autocomplete」をインストールしている場合、とりあえず「football」などと入力するとこのようにdanbooruタグの候補が出てきます。ただのfootballだとサッカーになってしまうこと、american_footballが関連タグだということが分かりますね。(※ちなみに後ろに「object」とあるタグのは、「フットボールという概念ではなく物体としての楕円形のフットボールであること」を示しています)
あとは、ボールを脇に抱えて走ってほしいのでとりあえず「holding american football \(object\)」と入れただけ。普通にボールを手に持ってしまう可能性もありますが、american_footballの概念をモデルが学習していれば、これだけで小脇に抱えてくれる可能性は結構高いです。
「SD WebUI Tag Autocomplete」のインストールや詳しい使い方はこちらの記事の「⑥意外と知らないショートカットキー」を参照のこと。
ちなみに、ミナちゃんのプロンプトはこのように生成ボタン下のスタイル記憶機能(ペンのボタン)から記憶させているので、ぱっと入力することができます。クォリティタグ、ネガティブプロンプトなど、よく使うタグ群はこのように記録しておきましょう。
【参考】ちなみに、今回は使いませんが、この段階でNiji journeyの構図力の高さを生かして「案出し」をする手法もあります。よりイラストレーティブな作品にしたい場合はこちらも参考になると思います。
2.テスト生成でプロンプトを整えていく
まずはプロンプトが合っているのか、修正したほうがいいのかも分かりませんので、とりあえずテスト生成を行います。ステップ数は本番では30前後ですが、テストなので20前後に弱め、アップスケール設定も何も掛けずに4枚同時生成を行います。
こちらが生成結果。
やはり、「holding american football \(object\)」という概念にはボールを脇に抱えて走るものと学習されていることが確認できました。1枚目はなぜか腕が増えてしまっていますが、全体的にはおおむねイメージ通りです。「speed lines」がいい仕事をして、スピード感が出ていますね。
ただ、少しスピード感が物足りない気がしますので、もっと強調してみます。また、臨場感をもっと出したいので、パースを効かせることにしました。そこで該当部分を「perspective,foreshortening, (speed lines,motion lines:1.2)」と書き換えます。
perspective:パースの利いた構図になる
foreshortening:遠近法。手前のものほど大きく描かれる
speed lines:直線の白いスピード線が描かれる
motion lines:動きを示す線が描かれる
こちらが生成結果。
スピード感が少し強調されましたが、今度はボールが手持ちになってしまいました。ここはプロンプトで直しにいってもいいのですが(ボールを抱く=hugを使うとか?)、正直ガチャ結果(Seed値)が悪かっただけかもしれないので、あえて直しません。迫力が出ているのはいいのですが、左右の手足が揃ってしまったりして、まだちょっと遠い感じがします。また、ただの草原を走っている感じもしますので、「stadium」を加えてガチャを続けます。
かなりイメージに近づいてきましたね。髪の毛が風になびいている感じが「良い」と感じたので、もっと強調するために「wind」を加えます。また、思い付きで「ストッキングがちょっと破れていたら必死にプレーしていた感じが出てかっこいいな」と考え付き、「torn pantyhose」も入れてみます。
ちょっと面白味が足されて良い感じですね。それまで何があったのかを想像させてくれる一枚絵は良い一枚絵だと思います。(手間を掛けるなら、ミナちゃんに抜かれて度肝を抜かれる敵キャラを描いても面白いでしょう)
ただ、ボールの持ち方の打率が低すぎるので、やはり手当をすべきと考えました。「(holding american football \(object\):1.2),hugging object」と該当部分を修正します。hugging_ballなどのタグがあるといいなと思いましたが(なくてもある程度自然言語として効くのですが)、huggingの連想候補の中に「hugging object」が出てきたので、とりあえず適用してみます。
ほぼイメージ通りのものがでてきました。これを見比べて、どれが一番迫力があるかと言えば、左上でしょう。なぜかを考えると、他の3枚に比べてカメラが引きではなく限界までアップだからですね。つまり、カメラをよりアップにするタグを加えればこの迫力を意図的に出せるはずです。このように、AIの繰り出す偶然性から人間が気付きを得て、採否をフィードバックできるのがAI絵の強みだと思います。
どうやってアップにするか、せっかくなので超辞典を眺めて考えましょう。
基本的に、カメラワークは「full body」「upper body」「cowboy shot」などのタグを使いますが、上半身のみを指す「upper body」を入れると下半身が見えず躍動感が失われるのが心配です。しかし、今回はプロンプトに「torn pantyhose」が入っているので、下半身がちょっとは映り込むことは担保されています。「ストッキングが入る画角でupper body中心の画角」と指示することになりますから、結果的にイメージ通りになるはずです。
ただ、upper bodyなどの構図系タグは動きのない止め絵(立ち絵など)が学習データセットに多いので、カメラワーク系タグの「〇〇focus」系の方がより動きが出やすいという経験値があります。ではどこにfocusするかといえば、顔でしょう。「顔にフォーカスが当たり、上半身中心のカメラワークになるが、太ももまでは映ってパース気味」というイメージが理想です。
よって「face focus,upper body」を加えました。
この4枚から感じられるのは何でしょうか。カメラがやや傾いていた方が不安定性が出て、迫力や臨場感が増すということですね。(ホラー映画と同じ理屈)
左上の一枚などはほぼ理想なのですが、さらに(dutch angle,dynamic angle:1.2)を足します。
こちらが生成結果。
ガチャ結果としては失敗気味ですが、盛り込みたい要素はたくさん盛り込めた、良いイラストになってきているはず。
ただ、この記事でお伝えしたいことは、ここで構図完成にしないことがとても大切だということです。
ここまでガチャを繰り返す中で、たまたまAIがお出ししてきた要素(髪が風に揺れてるのいいな、dutch angleのほうがかっこいい)や自分で思いついた要素(ストッキング破れてたらいいな、パースを効かせたい)をフィードバックして作品に盛り込むことができましたが、ここでガチャ要素を入れることをためらわないことがAIイラストの大事なところなのではないかと最近は感じています。
満足できるプロンプトができたこのタイミングでしっかり多数回の取捨選択を繰り返すことで、最終的な品質は各段に上がります。以前の私は、ガチャにどこか「偶然性を利用しておいて、あたかも自分でたどり着いたものかのように出す」姑息なイメージがあったのですが、「できることを尽くしてAI絵の良さを十分引き出すことも人為の大事な役割だ」と最近は思うようになりました。
3.プロンプトを固定して構図ガチャを引く
さて、プロンプトが完成を見たので、少な目にしていたステップ数を本番環境の「30」にアップし、今度は構図目的の4枚ガチャを行います。ここで引き出したいのは全体の迫力ある構図であって、細部の正確さではありません。ボールの形状など、細かいところが間違えていても構いませんので、ひたすら理想の構図を引くまで待ちましょう。
ガチャ中…
…というわけで、数十枚生成して、採用したのはこちらの一枚。Seed値「800316333」です。ようやくここで、この記事で紹介するバリエーション生成を使う段階です。
4.バリエーション生成で「正解」を引く
画面右側でこの画像を選択した状態で「♻️」ボタンを押せば、自動でSeed値「800316333」が左側に入力されます。「その他」からvariation seed値を「-1」、バリエーションの強度を「0.1」とします(他は0)。これで、さきほどの正解イラストを「ランダムに0.1くらい揺らす」バリエーション生成ができます。
今度は最終生成を目指すので、高解像度補助をONにしました。ここは好みですが、ADetailerを先に掛けたい方もいるかなと思います。使用しているモデルや普段の経験でアップスケール設定を自由に決めてください。私は以下のように、15ステップの高解像度補助を掛けて2倍サイズにアップスケールする設定で最終ガチャを開始しました。
「テストガチャ」でAIの偶然性にヒントをもらいながらプロンプトを練り、「構図ガチャ」で理想の構図を引き、最後にここで細部目的の「バリエーションガチャ」の3段階にするところが今回の記事のポイント。それぞれの生成回数はさほど多くなくて構いません。人間の意図を3段階で「盛る」ことで、ガチャを繰り返すほどに偶然性が高まるのではなく、むしろ自分の意図に近づいていくワークフローを狙っています。
このように、バリエーション強度「0.1」なので、画面上では少しだけ違う最終ガチャが繰り返されます。もし、もう少し変化があってもよいなと感じた場合は生成途中で0.15~0.2程度まで上げても構いません。逆に、狙った構図から離れてしまう場合は0.05くらいまで落としてもよいでしょう。
こちらがバリエーション強度「0.1」の4枚。
こちらがバリエーション強度「0.2」の4枚です。
わかりにくいですが、ボールだけ、ストッキングの破れ具合だけを見比べると、ぶれの大きさが違っていることが実感できるかと思います。
この最終ガチャの主な目的は、面倒な加筆修正作業をできるだけ少なくすることです。袖や襟の白いライン、リボンタイの結び目の色、フットボールのデザイン、背景のスタジアムの正確さなどがチェックするポイントになります。もちろん、ミナちゃんの表情や顔のアップ度も強度「0.2」だと結構変わるので、そのあたりも含めて採否を決めたいところ。
ここで気になるのが、そもそものフットボールのデザインですね。Google検索で確かめると、左右に白いラインが入ったほうがそれらしいことが分かります。ラインくらいは自分で描き入れることも簡単ですが、せっかくディティール目的の最終ガチャをしているので、できるだけ加筆の必要がないものを採用しましょう。
できたものを眺めながら、最終的な仕上げ、つまりエフェクト加工をどうするかの着想を得るのも大事な作業です。エフェクト加工にもいろいろありますが、移動ぼかしや放射ぼかしでスピード感を出したり、逆光にしてみたり、カラーを整えたり、文字入れをしたりといったところでしょうか。
こちらが少しエフェクトを掛けたもの。ただ、普段使いの賢木モデルはX向けのちょっとした漫画や記事解説用のちびキャラに特化したモデルのため、フラットな塗りすぎるのが玉に瑕。加筆で迫力を盛りたくても、シンプルすぎるタッチとバッティングしてしまっているのが気になります。
5.Anytestで「塗り替え」
そこで、これをimage2imageで「塗り替え」することにしました。月須和・那々さんが公開している汎用Controlnet「AnytestV4」を使うと、このイラストの線画部分を保持しながら大胆に塗りだけを変えられるので、塗りが繊細なIllustrious系モデルに切り替えてimage2imageします。描き込み量を増やすため、Flat LoRAをマイナス適用してみましょう。
こちらが生成結果。
このように、線画部分はしっかり守られながら、塗りだけがより高精細かつアニメチックになりました。
やり方はごく単純。プロンプトは完全にそのままで、モデルをより高精細なアニメモデルに交換し、あとは単にAnytestV4を強さ1で掛けただけです。image2imageのノイズ除去強度は「1」で、線画だけを守ってくれれば色合いは好きに描いてね、という設定。
普段使いの賢木モデルからすれば「ここまでオレにたくさん下書きさせておいて、結局最後は人気モデルに塗らせるのかよ~!」と怒られそうですが、そこで妥協しないのもAI絵の大事なところだと思います。
あとは光や音を加工して完成。間違いの修正は、ボールの継ぎ目周りが少しノイズ感あったのと、目の細部を直したくらいです。
光のエフェクトや文字は好みなので、「こうあったほうがいい」という答えはないのですが、最後の段階でしっかり人間の手を入れることで、ガチャで積み重ねてきた意図がよくまとまると思います。行き当たりばったりなワークフローのようでいて、AIの出してくる偶然を人間が見てきちんと反応することこそ創意なのかなと思うようになりました。
終わりに
こちらは漫画家の「うめ(小沢 高広)」さんが学会誌「情報処理」2025年1月号に投稿されたコラムです。
このコラムでは、生成AIのアイデアに混じる「もっともらしいウソ」は、一般的にはネガティブな要素だけれども、創作の場面ではポジティブな面もあるという考えが紹介され、次のように結ばれています。
【映画監督は,自分でカメラを回さず,役者として演技をするわけでもない.自らもアイデアを出すが,現場のアイデアも取り入れる.そして完成した映画を監督は自らの作品と呼ぶ.つまり創作のプロセスにおいて最も重要なのは「決断と責任」だ.これは生成AI時代でも変わらない.どんなにAIがサポートしようと,どのアイデアやビジュアルが作品にふさわしいか.何を面白いとするか.決めるのは,あくまで人間だ.】
ーとあり、今回紹介したワークフローにも符合するお話かなと感じています。
AIイラストや「AI絵師」という言葉に対する悪印象は、もちろん著作物の学習を無許諾で行えることへの反感も大きかったと思いますが、「偶然性のみに根ざしてできたものを創作として扱うこと」への反発もあったのではないかと思います。マスピ顔もその一つで、AIの出してくるものを否定せずそのまま受け入れるところに、非創作性を感じ取る人も少なくないのではないでしょうか。
画像生成は着実に進化しており、あからさまなマスピ顔や、意図の香らないイラストしか出せない状況は過去のものになりつつあります。バリエーション生成はAIに創作性を付与するさまざまな手法の一つに過ぎませんが、こうした積み重ねでAIも創作ツールの一つとして受け入れられていけばと思っています。
最後はちょっと固い話になってしまいましたが、そんなわけで、"バリエーション生成の基礎と応用 意図を込める「3段ガチャ」ワークフロー"でした。
それでは今日はこの辺で。スタジオ真榊でした。
Attachments (30)

vtdoSVFs0IP8DfZgWMysYeK2.jpeg

GEkFqH0yfI3wUoPFwzRtXWkS.png

k6GsBlJ7lxdrNuL1gJlbhJ1M.jpeg

nqBMhhkikOBw2W054iaj0YMm.jpeg

7tozgvfvez8hDdjT2e1PiM5S.jpeg

hAmPPutPRMARLrXNBlgjEfa2.png

VGiIjlz8bWZ9LPswmFfs96iq.png

KM0XeXfdO5tfCmOrESsmocU9.png

fP89L5YRfAb2kew2wrSxTjaH.png

rgmEpTgZxVzxFZpPBta1IF3P.png

d53EocTvRlXafue5earaVAAf.png

anlEkOZBXwTnaqVWtWUqOLdf.png

rNwGg9KFxgNyJ4XSQIprCidK.png

Arxqj07qxwsK9riKGV7De6dr.png

3LnBabslguTUsRNLhwil0Sph.png

CVngzluZfMQMHJwn0wkD5o75.png

QzfEctssZdkiuuw8rQiYtw9L.png

TTR74hCMTqotKoM6xeRfu0rP.png

i1tZDVvNaTyqZFzSy8q5jRuH.png

BEonycGerDNOAT4dLmgq2sJq.png

DmAYXgL5xxH8f2NVKLBSxLfx.png

aPSpddsg6wv1LTEbtg5dyzGa.png

Rp2geWaEPIky470hjEPSH0XF.png

6MvY94f2zOJKxiBfDfwRZWEX.png

JiQnpbILEio87jb9sVvFUqW6.png

MH92Wexqb1UknkXN3UrVVm5i.png

U5AJHKU3ytI0Hw4hfrVRH1J6.png

BqsdGVnB5c1GFVAFqzvcDkiA.jpeg

V4dtavnFnRRGSy3E7sb0DKR7.png

9gzQjAZkkVuE99G0PapZ7xqv.png
