Home Artists Posts Import Register

Content

珍しく日中からこんにちは!スタジオ真榊です。


今日はいわゆる「差分」の作り方に関する記事をお届けします。差分と言えば、表情差分やポーズ差分、服装差分や背景差分、セリフ差分など、主にイラストやゲームなどにおける画像バリエーションのことですね。


AIイラストでは、これまでも主にマスク部分のimage2imageを使った差分作りが行われてきましたが、このところControlnetやジェネレーティブ塗りつぶしをはじめとしたさまざまな技術がそろってきましたので、この記事では2023年6月現在の最適解を探ってみたいと思います。


今回元画像として使用するのはこちらのイラスト。

実験では、こちらのイラストの表情差分・服装差分・背景差分・ポーズ差分を作ってみます。ちょこちょこ書き進めていたのですが、ずいぶん長い記事になってしまったので、前後編に分けてお届けしたいと思います。


表情差分

さて、まずは一番簡単で需要も多そうな「表情差分」から。ポーズなどは全く同じで、キャラクターの顔面部分だけを差し替えるのはControlnetの「inpaint+Reference」で可能です。

キャラの顔移植が可能に?「ReferenceOnly+inpaint」の進化

こんばんは、スタジオ真榊です。StableDiffusionwebUIとControlnetのアップデートが同時に来て、またもプリプロセッサの数が増えました!Controlnet画面はすっきり見やすく整理され、タイプごとにモデルやプリプロセッサを一発呼び出しできる大変親切なUIに進化しています。 新しいプリプロセッサの検証も進めているとこ...

inpaint+referenceでの顔面移植はこちらの記事で紹介した通り。今回は別キャラの顔を持ってくるのではなく、できるだけ同じキャラの特徴をそのままに変化させる実験とします。


・設定方法

まず、Controlnetでinpaintを起動し、同じ画像をControlnet画面で読み込ませた上で、顔部分をマスクします。表情だけを変えたいので、輪郭はできるだけ塗りつぶさないようにしていますが、場合によっては二重顎(マスク内にもう一つ輪郭ができてしまう)になってしまうことがあるので、その場合は輪郭も含めて塗りつぶしましょう。

プリプロセッサは「inpaint only」、モデルは「inpaint」です。Control typeのメニューから「Inpaint」を選べば、デフォルトでこの状態になります。


次に、2つ目のControlnet画面を開き、また同じ画像を読み込ませます。今度もControltypeから「Reference」を選ぶだけ。忠実度などはデフォルト設定のままで大丈夫です。


ポイントとして、どちらのControlnet画面でもControl modeを「ControlNet is more important」にしておきましょう。「バランス」でもできますが、いろいろと実験した結果、こちらの方が安定するようです。


その他設定はこの通り。プロンプトには、マスクした表情部分に関わる部分のみを入力しています。高解像度補助を掛けても問題ありません。

生成結果

このように、周囲と馴染んだ形で表情変化をさせることができました。


表情のwildcardを使って、ランダムな表情で生成した結果がこちら。たまたま「不機嫌」「悲しい」「怯え」「思案顔」とネガティブ系ばかり選ばれたので、あんまりバリエーション感が出ませんでしたが、周囲との違和感なく表情変化ができていますね。


次に、今度は首から上をそのままに、服装だけを変えることができるか実験します。より広範囲をマスクする上、元のセーラー服に引っ張られてしまうので、image2imageのインペイントではなかなか難しかったのですよね。


服装差分

さて、こちらのイラストのセーラー服をバニースーツに変えてみたいと思います。


pix2pixを使う実験も試みたのですが、あまりうまくいかなかったので、先程と同じ「inpaint+Reference」でやってみましょう。inpaintで塗りつぶす範囲を服装全体に変更します。ポーズが大きく変わらないよう、流用できそうな部分をなるべく残します。マスク範囲が広すぎて、解釈の幅が大きすぎるとポーズが安定しなくなるからです。


referenceで着せたい服の画像を入力します。今回は昔作ったバニーさんのイラストを利用します。ポーズが異なるので、プリプロセッサは弱めのreference onlyとしました。(※毎度のことながら、アニメ公式画像をはじめ他人の著作物をReferenceさせる行為には高い危険性が伴います。リスクをよく理解して自己防衛しましょう)


あとはプロンプトを変えればOKです。今度もマスク部分に関係するプロンプトのみに絞り、高解像度補助を掛けています。

生成結果

これは驚きました。かなりマスク範囲が広いのに、見事に参照イラストの服装が再現できています。Controlnet版「ジェネレーティブ塗りつぶし」と言ってよい出来なのではないでしょうか。しかし、別キャラのバニーさんの画像を「reference」させてこのクォリティということは、同一人物をreferenceさせればより安定するのでは…?


せっかく思いついてしまったので、今度は今生成できたこのバニー服ミナちゃんのイラストをさらに「reference」させてみましょう。今度はポーズが同じなので、「reference adain+attn」を使用します。

基本的には、先程読み込ませたバニーさん画像をこれに変え、プリプロセッサを変更しただけです。すると…

生成結果

座り方が固定されて、さきほどより高品質のガチャになっているのが分かるでしょうか。さきほどはランダマイズの幅が大きかったので、ナナメに浮いてしまってちゃんとベンチに座れていないイラストも混じっていたのですが、こちらはきちんと座れている感じ。バニー袖の残滓が残っている(恐らくプロンプトの影響)ので、LamaCleanerで消してもよいですし、もし「あり/なし」を固定したい場合はプロンプトでsleeveについて指示するとよいでしょう。


また、このバニーイラストではさほど感じないのですが、服装差分では首から下のサイズと頭のサイズがうまく合わないことが結構起きます。そうした場合も、うまくバランスの取れた一枚をチェリーピックしてこのように「Reference adain+attn」に掛ければ安定することが分かってきました。次の実験をご覧ください。


服装差分(LoRA使用)

こちらは、LoRAが使用できるか試すために同じ要領でプラグスーツを着せてみたもの。これはReferenceを使うまでもなく、InpaintOnlyのみで着せ替えできました。

ただ、このように首から下のサイズが合わないものが多く出ました。右下はまだバランスが取れているので、この1枚をさきほどのように「Reference adain+attn」に掛けましょう。


するとこのように、頭と体のバランスがうまくとれた状態で、また別のイラストを生成することができます。

ただ、右手が破綻しているものを参照させているので、やはり破綻した部分はそのままになっていますね。


これはもう、右手だけをマスクしてピンポイントで修正してしまいましょう。プロンプトは「perfect hand,1girl, souryuuasukalangley, wearing plugsuit,red,sitting,masterpiece, extremely detailed CG, official art, high resolusion(+LoRA)」です。

生成結果

一発で出したには悪くない感じ。ぱっと見、右上か右下がよさそうですね。


あとはジェネレーティブ塗りつぶしやLamaCleanerで手の形を直したり、腕の赤くなっている部分や右肩の破綻、胸の文字などを修正すれば…

あっという間にできてしまいました。修正に5分も掛かっていません。(02の部分をミナちゃんの校章にしたのはお遊びです)


せっかくなので差分イラストとして投稿してみました。


終わりに

Text2textにおけるCN「inpaint+reference」の効能はだいぶ前から研究しているのですが、高解像度補助を掛けても破綻しないことには気づいていませんでした。特にControl modeを「ControlNet is more important」にしておくことや、いったん出したものをさらにReferenceさせて安定させる方法などは、非常に簡単な操作でありつつ、意図した結果を容易に導いてくれるので大変有用だと感じています。ジェネレーティブ塗りつぶしでできない部分を上手に補ってくれており、「ここまではSDwebUI上でやって、あとはPhotoshopで…」というワークフローが固まりつつありますね。



こちらはついでに作ったお遊びイラスト。衣装チェンジと表情チェンジが簡単にできるので、ストーリー性のある連作がかなり容易になったと感じています。


次回はopenposeを使った指定ポーズへの変更と、背景部分の変更について検証したいと思います!スタジオ真榊でした。


Files

Comments

No comments found for this post.