珍しく日中からこんにちは!スタジオ真榊です。
今日はいわゆる「差分」の作り方に関する記事をお届けします。差分と言えば、表情差分やポーズ差分、服装差分や背景差分、セリフ差分など、主にイラストやゲームなどにおける画像バリエーションのことですね。
AIイラストでは、これまでも主にマスク部分のimage2imageを使った差分作りが行われてきましたが、このところControlnetやジェネレーティブ塗りつぶしをはじめとしたさまざまな技術がそろってきましたので、この記事では2023年6月現在の最適解を探ってみたいと思います。
今回元画像として使用するのはこちらのイラスト。

実験では、こちらのイラストの表情差分・服装差分・背景差分・ポーズ差分を作ってみます。ちょこちょこ書き進めていたのですが、ずいぶん長い記事になってしまったので、前後編に分けてお届けしたいと思います。
表情差分
さて、まずは一番簡単で需要も多そうな「表情差分」から。ポーズなどは全く同じで、キャラクターの顔面部分だけを差し替えるのはControlnetの「inpaint+Reference」で可能です。
inpaint+referenceでの顔面移植はこちらの記事で紹介した通り。今回は別キャラの顔を持ってくるのではなく、できるだけ同じキャラの特徴をそのままに変化させる実験とします。
・設定方法
まず、Controlnetでinpaintを起動し、同じ画像をControlnet画面で読み込ませた上で、顔部分をマスクします。表情だけを変えたいので、輪郭はできるだけ塗りつぶさないようにしていますが、場合によっては二重顎(マスク内にもう一つ輪郭ができてしまう)になってしまうことがあるので、その場合は輪郭も含めて塗りつぶしましょう。

プリプロセッサは「inpaint only」、モデルは「inpaint」です。Control typeのメニューから「Inpaint」を選べば、デフォルトでこの状態になります。
次に、2つ目のControlnet画面を開き、また同じ画像を読み込ませます。今度もControltypeから「Reference」を選ぶだけ。忠実度などはデフォルト設定のままで大丈夫です。

ポイントとして、どちらのControlnet画面でもControl modeを「ControlNet is more important」にしておきましょう。「バランス」でもできますが、いろいろと実験した結果、こちらの方が安定するようです。
その他設定はこの通り。プロンプトには、マスクした表情部分に関わる部分のみを入力しています。高解像度補助を掛けても問題ありません。







