SamSuka
スタジオ真榊
スタジオ真榊

fanbox


インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3

こんばんは、スタジオ真榊です。この記事は、2024年夏時点の環境におけるインペイント機能の活用法まとめです。AIイラスト初心者でこれからインペイントを触る方、NovelAIではなくローカルSDXL環境でインペイントを活用したい方向けに、現環境でインペイントでできることとそのやり方を総覧できる内容になっています。


皆さまご存じの通り、現環境ではNovelAIv3のインペイント性能がずば抜けて高く、これまでこのFANBOXでも「V3インペイント」と呼んで、さまざまな活用法を特集してきました。ただ、最近はローカルSDXLでも、Controlnetのインペイントモデルや関連LoRAの性能が非常に向上してきたことから、V3インペイントでしかできないと思われていたさまざまなテクニックがローカル環境でも再現できるようになってきています。


そこでこの記事では、V3インペイントの基本と応用テクニックをまずまとめた上で、これをどこまでローカル環境で再現できるか?上手に再現するには、どういった設定をすべきか?ということを各種検証し、約1万4000字の大型特集として報告したいと思います。


目次

V3インペイントの基本

V3インペイントでできたこと

ローカルでは二種類のインペイントができる

 【便利技】Inpaint Anythingで「自動マスク」

ローカル環境でできるインペイントテクニック

 ①キャラクターの入れ替え

 ②ポーズ変更+表情変更

 ③背景変更

 ④存在しない「続き」の生成

   - 実験:Anytestで続きを描いてもらえるのでは?

 ⑤部位の修正

 ⑥既存画像へのキャラクター追加

 ⑦イラスト同士の合成

終わりに


V3インペイントの基本

NovelAI v3を使ったさまざまな作例については、これまでの特集を読んで頂くとして、まず簡単にV3インペイントの基本を振り返っておきます。こちらの記事を要約したものですので、頭に入っている方は読み飛ばして頂いてOKです。

NovelAI「V3」が理解る!②「inpaintで簡単差分」「NSFWのコツ」

こんにちは、スタジオ真榊です。12月最初の今回は、「NovelAI『V3』が理解る!プラン選びと基本設定を徹底解説」に引き続き、「NAIDiffusionV3」について検証していきます。 前回はNovelAIの登録方法から基本的な画面の見方、操作方法等についての全体公開記事でしたので、今回はより具体的に、雑塗りi2iやEnhance(強調...


NovelAIの生成画面で「参照用画像を追加(任意)」の横のボタンを押すと、PC内にある画像を1枚入力することができます。画像を選ぶとこのような画面が出るので、インペイントしたい場合は「image2image」を選択します。


すると、画面左側にこのような画面が出ますので、左下の「描いてマスクを追加する」を選択。


あとはこのように、読み込ませた画像の一部を塗りつぶす(マスクする)ことで、その範囲内だけを画像生成で変更することができるようになります。


このように手が崩壊しているのを直したい場合は、「1girl,waving hand」とプロンプト指示して生成すると…

このように、マスクしていない部分はそのままに、狙った部分だけを変更することができます。マスクの「ふち」の部分がすぱっと切れて目立ってしまうと困るので、インペイントには端の部分をぼかしてマスクの内外を自然につなげてくれる機能があります。よって、あまりぎりぎりに囲うのではなく、書き換えたい部分をやや大きめに囲うのがきれいに周囲となじませるコツです。


・「元画像を加える」について

V3インペイントでは、基本的には青く塗りつぶされた部分だけが変化するのですが、「元画像を加える」というトグルボタンがOFFの状態だと、塗りつぶされていない部分がわずかに変化してしまうかわりに、マスクのふちに「継ぎ目」ができて不自然になるのを防いでくれます。「継ぎ目が目立ってもよいのでマスク外の変更をどうしても防ぎたい」という場合は、ここをONにしましょう。



V3インペイントでできたこと

さて、これまでFANBOX記事で紹介してきたV3インペイントでできるテクニックとして、次のようなものがあります。詳しいやり方は、①~⑧それぞれのタイトルをクリックすると該当する解説記事に飛びますが、基本的には変化させたい部分をマスクして、適切なプロンプトを入力するだけで実現できるのがV3インペイントのすごいところです。


①キャラクターの入れ替え

キャラクターの首から上を別のキャラクターに書き換えることができます。初音ミクさんにはツインテールがあるので、このように髪の毛が通りそうな右下にもマスクをしておくと、自然に描くことができます。


②ポーズ変更

キャラクターの書き換えたい部位と「書き換える先」をそれぞれ同時にマスクしてインペイントすると、このようにポーズを変更することができます。


③背景変更

背景を書き換えることもできます。やや面倒ですが、このようにキャラクターに食い込むように背景部分を塗りつぶせばOK。V3インペイントには消しゴム機能があるので、いったん大きいブラシで全体を塗りつぶしてから、キャラクター部分に消しゴムを掛けた方が早いです。


④存在しない「続き」の生成

画像編集ソフトで大きなキャンバスの一部にイラストを配置し、残る部分をインペイントすると、存在しない「続き」を描いてくれます。インペイントに対して「アウトペイント」と呼ばれます。詳しいやり方はリンク先参照。



⑤部位の修正

ごく基本的なやり方。指が増えたり減ったりしがちな画像生成のミスをサクッと直してもらうことができます。


⑥既存画像へのキャラクター追加(写真も可)

個人的に関心があり、しばらく検証していた応用テクニック。インペイントには周囲の形状を察知して、矛盾しないように溶け込ませる機能があるので、このように無人のイラストや写真の椅子を塗りつぶして「1girl sitting...」式のプロンプトを指示することで、キャラクターを座らせることができます。自分の部屋に推しキャラを呼び出すこともできます。


⑦イラスト同士の合成

これは過去検証したことがありませんでしたが、背景変更とアウトペイントができるわけですから、複数のAIイラストを並べて矛盾なくつなげることも当然できます。③と④の合体技ですね。



⑧一貫性のある「同キャラ別カット」の生成

これはインペイントというより、「インペイントを応用したキャラクターの一貫性再現」といった感じのテクニック。LoRAをいちいち作らなくても、画像生成AIの本来持つ性質を応用して、同じキャラの別のイラストを作ってもらう取り組みです。これも複雑なのでリンク先を参照のこと。(※こちらのテクニックがSDXLでできるかの検証は、独立した別の記事で特集します)


以上のように、インペイント機能は間違った部分の修正だけにとどまらず、上手に応用することでさまざまな表現ができるようになる便利機能と言えます。異様な「なじませ力」のあるNAIv3でしかできないと思われていたこれらのテクニックですが、ローカルSDXLでもどれだけやれるのか、早速見ていきましょう。


ローカルでは二種類のインペイントができる

今回の検証では、webUIのデフォルトのインペイント機能(image to imageタブで使えるもの)と、Controlnetのインペイントモデルをそれぞれ使い分けます。記事中では以下、それぞれを「デフォルトインペイント」「CNインペイント」と呼んで区別することにします。


デフォルトインペイントの基本については、こちらの記事で解説しています。

レタッチ(inpaint)機能が理解る!修正&入れ替え徹底解説

こんばんは、スタジオ真榊です。今夜の記事は、image2imageを画像の一部だけに掛けて修正できる「レタッチ機能」についてです!設定値と生成結果が直感的に結びつきにくいので、みんななんとなく体感でなんとかしている(そしてたいていなんとかならない…)のが、このレタッチ機能。いろいろな実験結果と共に、ようやく...


SDXL用Controlnetの基本についてはこちらの記事が参考になると思います。

SDXL用Controlnetが理解る!おすすめモデル&活用例を徹底解説

【2024.10.06更新】スケッチ読み取りCN「XDoG-sketch」を追加しました。 こんにちは、スタジオ真榊です。こちらの記事は、SDXL向けControlnetの基本的知識や導入方法、おすすめのモデル、実際の使い方を紹介する大型特集です。ラフを線画化したり、線画を着色してもらったり、写真をイラスト風に変えたり、特定の部位だ...


使用するcheckpointは例によってAnimagineXL3.1。CNインペイントに使うのは、かたらぎ(@redraw_0)さんが公開しているCNモデル「controlnetXL_inpaint」です。まずはmodel/controlnetフォルダに「Kataragi_inpaintXL-fp16.safetensors」をDLしておきましょう。

(frame embed)



あとはV3インペイントと同じようにControlnet画面で入力画像を読み込み、マスクすればOK。ちなみにマスク画面上にカーソルがある状態で「s」キーを押すことで、キャンバスを画面全体に引き延ばしたり、また戻したりすることができます。(webUIの種類やバージョンによってできないこともあります)

プリプロセッサは「inpaint only」か「inpaint+lama」を選択し、必要なプロンプト指示で生成すればOKです。inpaint onlyはそのまま元画像にインペイントするだけですが、inpaint+lamaは、マスクを施された被写体が背景になじんで消える効果を与えてからインペイントする違いがあります。(結局マスク内は書き換えられるので、そこまで大きな差はありません)


V3インペイントの強みはともかく周囲と生成範囲をなじませる力が異様に強いことですが、ローカル生成にも「AnytestやLineartなど、別のControlnetと併用できる」「好きなCheckpointに各種LoRAを組み合わせられる」「Anlas消費が不要」といった利点があります。V3の場合、マスク内がどう描かれるかはプロンプトと運任せになるわけですが、ローカルでは線画で指定したり、LoRAを利かせたりできるところがNAIにはない強みと言えます。



【便利技】Inpaint Anythingで「自動マスク」

インペイントの範囲指定は、基本的にマウスでおおまかに塗りつぶして行うわけですが、「Inpaint Anything」という拡張機能を使うと、自動で狙ったオブジェクトだけをきっちりマスクすることもできます。インストールは「Install from URL」タブから下記URLを入力するいつもの方法でOK。

(frame embed)


再起動すると、インストールに成功していれば「Inpaint Anything」のタブがこのように画面上部に追加されます。


まず最初に、Inpaint Anythingに必要なモデルをDLする必要がありますので、「Download model」ボタンをクリックしましょう。コマンドプロンプト画面でDL終了を確認したら準備完了です。


自動でマスク範囲を生成したい画像を画面左上から読み込ませ、オレンジの「Run Segment Anything」ボタンを押します。


しばらく待つとこのように「セグメント」化された画像が抽出されます。


これは、画面上のどこに何が描かれているかを自動認識して、種類ごとに色分け指定したものです。それぞれの色には例えば「sky」「wall」「chair」といった情報が対応しており、AIはどこに何が描かれているか理解することができます。(ControlnetでSegmentationを利用する方法については、こちらの記事を参照のこと)

【ControlNet革命】「Segmentation」で構図を支配しよう!

こんばんは、スタジオ真榊です。このところAIと著作権をめぐる投稿が続いてしまったので、しばらくは本題に戻って、いつものStableDiffusionを使ったAIイラスト術について紹介していきたいと思います。今回はControlnet機能の一つ「Segmentation」の活用法についてです! 「ControlNet徹底解説!プロンプト苦難の時代が...


ここからがポイント。抽出されたセグメント画像の上で左クリックをすると、黒いドットが打たれ、その色が塗られた部分を自動選択することができます。ドットは複数打っても構いません。下図では、服の上にだけドットを打ちました。


ドットを打ち終わったら、「Create Mask」ボタンをクリックすると、このようにドットで指定した部位だけが白くマスクされます。


「マスクを反転」にチェックを入れてから「Create Mask」すれば、逆に服以外をすべて選択することもできて便利です。


ドットではなく、このように線を引けば、複数のエリアをまとめてマスクすることも簡単です。


マスク範囲を一定幅で拡張することもできます。「Expand Mask Iterations」欄で各超幅をピクセル指定し、「Expand mask region」をクリックすると、このように10px分広げることができました。


キャンバス上を塗りつぶして、任意にマスクを加えたり削除したりすることもできます。キャンバス上を塗りつぶしたあとに、足したい場合は「Add mask by sketch」、マスクした部分から引きたい場合は「Trim mask by sketch」をクリックすればOK。下図では、ベースのラインにマスクを足しています。


<マスクをどう活用する?>

自動でマスクの範囲選択ができたら、次に、「Inpainting」「Cleaner」「ControlNet Inpaint」「Mask only」の4つのメニューから、このマスクを使ってやりたいことを選びます。通常のインペイントなら「Inpainting」、マスクしたオブジェクトを消したいなら「Cleaner」、マスクをi2i画面に送りたい場合は「Mask only」を選びましょう。(残念ながら、現在はControlnetインペイントをこの画面で行おうとするとエラーが出てしまうようです。i2i画面に移動してControlnetを使いましょう)


Mask onlyで「Get mask」を押すとこのようにマスク画像が得られます。


「Send to img2img inpaint」ボタンでインペイント画面に送ると、このようにマスクを適用した状態でインペイントを始められます。下図は、風景LoRAを使ってマスクした背景部分に空を描いてもらったもの。


こちらは、服部分をオートマスクした後「Expand Mask」機能で10ピクセル拡張し、その範囲にセーラー服を描いてもらったものです。


<注意点>

InpaintAnythingの利点は狙った被写体をきれいにマスクできること、選択範囲を拡縮できることですが、それがそのまま弱点にもなります。上のセーラー服画像では、拡張しないとインペイント範囲にぴったりおさまる変なシルエットのセーラー服になりますし、拡張したらしたでインペイント部分が10px分ベース部分に侵食してしまっているのが分かります。こうした部分は画像編集ないしはControlnetを使った線画指定などで修正する必要があります。


手で雑にマスクしたほうがいいか、InpaintAnythingできれいにマスクした方がいいかは状況によると思います。特に、背景だけをキレイに選択して描き変えたい場合などにInpaintAnythingは便利です。選択肢の一つとして覚えておいて損はないでしょう。




ローカル環境でできるインペイントテクニック

さて、NovelAIとSDXLでできるインペイントの基本についてはここまで。V3インペイントに比べると、SDXLでのインペイントは性能・簡便さで及ばない部分も多いですが、ControlnetやLoRAを使った拡張性はNovelAIにはないストロングポイントです。では早速、本題であるNovelAIv3でできた8つのテクニックと、それをSDXLで再現する方法について検証していきます。


①キャラクターの入れ替え

まずは基本ということで、AIイラストの顔部分だけを変更して別キャラクターに変更する実験です。


【CNインペイント】

まずはControlnet画面でこのように塗りつぶします。マスク範囲はデフォルトは白ですが、右側のパレットから色を付けると分かりやすいです。プリプロセッサはinpaint only+lama、重みは「1」、ControlModeは「Balanced」にします。

ポイントは、変えたい部分はきちんとすべてマスクすること。黒髪の先がちょっとでも残っていると、AIは整合性を計ろうとして、インペイント後のキャラクターも黒髪にしてしまいます。


生成画面はこのような感じ。


そのまま生成するとこのようになりました。頭の大きさや髪の通る位置は、マスクした範囲に大きく影響を受けますので、大きすぎると感じた場合は、マスク範囲を狭めてみましょう。


【デフォルトインペイント】

image to imageタブの中にある「Inpaint」画面でも同様のことができます。このようにインペイント元の画像を読み込ませてマスクすればOK。


設定がややこしいのですが、重要なのは「マスクされたコンテンツ」と「ノイズ除去強度」の部分。元画像をimage2imageで変容させたい場合は「元の画像」を選ぶのですが、ここでは全く元画像を無視して別の被写体に変えてほしいので、「潜在空間でのノイズ」を選び、ノイズ除去強度も最大の「1」にします。


こちらはノイズ除去強度を「0.5」にしてしまった場合の失敗例です。なぜこうなるかというと、「マスクされたコンテンツ」を「潜在空間でのノイズ」にしたから。マスクした範囲をいったんノイズで埋めて、ゼロからノイズ除去を行うのに、強度が必要な半分だとノイズが残ってしまい、まともなイラストにならないということです。(火力が足りなくて生煮えのものが出てきてしまった感じ)


②ポーズ変更+表情変更

次に、ポーズや表情の変更に挑戦してみます。これはマスキングがやや難しく、「変えたい部分」だけをマスクするだけではだめで、「変更後に四肢や体が描かれるべき場所」も同時にインペイントしておかないといけません。


【CNインペイント】

このように、口と手の周辺をマスクしました。この左手を上げさせて、こちらに笑顔で手を振ってもらいたいと思います。


こちらが生成設定です。「1girl,waving hand,smile,school uniform+クォリティ」と、とてもシンプル。


生成結果がこちら。左上はまあまあうまくいきましたが、他はちょっと厳しい出来となりました。マスク範囲が広すぎたため、学校カバンのようなものが出てしまったり、指が崩壊してしまったり。このあたりの性能は、NAIに素直に軍配が上がるところです。


こちらは手修正LoRA「Fixhands_anime_bdsqlsz_V1.safetensors」を適用した結果。ややマシにはなりましたが、100%にはまだ遠い感じですね。


【デフォルトインペイント】

こちらはデフォルトインペイント(潜在空間でのノイズ+除去強度1)でやった場合。さきほどと違うのは、マスク範囲にうまく手がおさまらず、切れてしまっていることです。


これはマスク範囲のふちがスパっときれてしまっているために起きている現象なので、ふちを「ぼかして」あげるとやや改善します。このように、「マスクのぼかし」を4pxから30pxに上げて生成すると…


このように、やや改善傾向がみられます。どうしても切れてしまう場合はマスク範囲を広げることも効果がありますが、広げすぎると手が大きくなりすぎたり、別の要素が映り込んだりもするので、難しいところですね。


③背景変更

今度はキャラクターを残して背景だけを変更してみる実験。Controlnetを使ったインペイントでまず検証したのですが、残念ながらうまくいきませんでした。メインの被写体を一部書き換える方向の学習は多く積んでいるようですが、背景を書き換えるのは苦手なようです。よって、この作業はデフォルトインペイントで行うことにします。


【デフォルトインペイント】

ポイントとして、マスク範囲がキャラクターに食い込むように背景を塗りつぶすわけですが、あまり食い込みすぎるとキャラクターも変容してしまうので、気を付けて塗りつぶす必要があります。(画像によってはInpaintAnythingのExpand機能でマスクした方が楽でしょう)


プロンプトは、背景に関する情報を加えた「1girl,solo, beach,sky,(red-framed eyewear),(navy school uniform,navy serafuku:1.3),upper body,flat eyes,ponytail,short sleeves,navy pleated skirt, shiny skin,open mouth, beautiful purple eyes,black hair,white ribbon, masterpiece, best quality, very aesthetic, absurdres」で生成してみます。


こちらが生成結果。

キャラクターのふちを食い込むように塗りつぶした影響で、ものによってはキャラクターのポーズや髪型が変更されてしまっていますね。


キャラの線画部分をきちんと守りながらインペイントしたい場合は、このようにControlnetでプリプロセッサ「Lineart realistic」を選び、💥ボタンを押します。


学校の背景の線画も抽出されてしまっているので、緑色の「Edit」ボタンを押し、線画の編集画面を起動。このように黒で背景部分を塗りつぶして、「Controlnetに送る」をクリックします。


ポイントは、Controlnetの重みを「0.5」とかなり弱めにすること。1だとControlnetによる線画縛りが強すぎて、意味不明なイラストが生成されてしまいます。最終ステップまで厳格に縛る必要もないので、Ending control stepを0.8程度にしてみるのも良いでしょう。


こちらが生成結果。キャラクターの線画がきちんと守られつつ、背景をビーチにすることができました。


【ちょっと脱線:線画レベルで手修正もできる】

やや面倒な手順ですが、いま使った線画方法を応用して、ポーズ変更をより自然に「直す」こともできます。まず、このように手を上げさせる範囲を塗りつぶしまして…


Controlnet画面で、変更後の「惜しい」イラストを読み込ませます。さきほどのようにEditボタンを押して…


このように、おかしい部分を黒で塗りつぶしたり、白線で描き足したりして修正します。できたら「Controlnetへ送る」をクリック。


重みは「0.5」、EndingStepは「0.8」とします。こちらが生成結果。

よく見ると、右下の一枚は指が書き足されてしまっていますが、おおむね手の位置は守られています。このように、完璧ではなくてもそこそこうまくいったイラストをLineartで拾ってきて、エディタで簡単に修正すると、その先の作業を楽にすることができます。


背景をさらにきちんと統一したい場合は、また先ほどのように背景を塗りつぶして再生成を行うとよいでしょう。



④存在しない「続き」の生成

キャンバスの外の「続き」を生成してもらう、いわゆる「アウトペイント」もできるか試してみます。まずは下準備として、画像編集ソフトで1365x1024pxの横長のキャンバスを作って、元画像をちょうどよい位置に縮小配置します。


あとはこのように残り部分をマスクして生成するだけなのですが…


Controlnetでもデフォルトインペイントでも、簡単にはいきませんでした。たくさんオブジェクトが並ぶ教室はそもそも生成が難しいというのもありますが、ビーチ背景でも似たような、マスク内外が自然になじまない低劣な結果となっています。


一つの解決策として、Controlモードで「my prompt is more important」を選択することでより馴染む(プロンプトをControlnetよりも重視するため、マスク内外のつながりがよくなる)ということを発見しましたが…


これもやや改善する程度で、あまりうまくはいきませんでした。


ちなみに、こちらはV3インペイントで同じことを試みた結果。継ぎ目もほとんど目立たず、やはり強い!


【実験:Anytestで続きを描いてもらえるのでは?】

ここで思い出すのが、月須和・那々さんの万能CN「Anytest」シリーズには、足りない部分を描き足してくれる機能があるということ。こちらの例では、足りない脚部分を生成によって自然に描き足してくれています。ただ、よく見るとスカートや目の色などは変化してしまっているので、描き足してくれているというよりは、意図を読んで全体に「描き直して」くれるような挙動です。



では、これをCNインペイントと組み合わせることによって「元絵を守りつつ足りない部分を補ってもらえるのではないか?」ということが考えられます。まずはこのようにデフォルトインペイント画面でマスクをして、潜在空間でのノイズ+除去強度1に設定。


Controlnet画面でスタイルチェンジが得意な「Anytest v4」を読み込ませます。Anytestはこのように一色で塗りつぶされている部分に「プロンプトに沿って整合性のあるものを描き足したくなる」傾向を持っていますので、インペイントと組み合わせることでアウトペイントができるのではないかと期待します。


こちらが生成結果。窓枠などは崩壊していますが、先ほどまでよりも改善が見られます。

このように、LineartやAnytestといったCNと組み合わせることで、NovelAIにできないコントロールを利かせられるのがローカル版の利点。とはいえ、何も指定せずマスク内外をつなげてくれるNAIはやはり圧倒的に強いですね。


⑤部位の修正

次に、いわゆるミスの修正ができるかについて検証しました。下のイラストの、崩壊した手の部分修正を試みます。方法はさきほどの「waving hand」にしたときと全く同じですね。デフォルトインペイントを使い、FixHands LoRAを適用しておきます。


ここでポイントは、インペイントもとの画像は手の位置がほぼ合っており、全くのノイズからやり直すより、image2imageしたほうがよい結果になりそうだというところ。つまり「潜在空間でのノイズ」から生成するのではなく「元の画像」から強度強めにインペイントしたほうが、手のつながりはうまくいくのではないかということです。

このように、ノイズ除去強度は最大値からやや弱めた「0.85」としました。1とするとほとんど元画像から生成スタートする意味がなくなってしまうためです。プロンプトは「1girl,waving hand,smile,serafuku,masterpiece, best quality, very aesthetic, absurdres, 」です。


こちらが生成結果。

おおむね手の位置はそのままに、精度も高く正しい構造に描き直してもらえました。


ちなみに、これまで通り「潜在空間におけるノイズ」から強度1で生成した場合はこうなりました。間違ってはいないのですが、手がどこにあるかが定まらないので、ときにマスク外に出てしまって指が途切れていることがわかります。(消えている指先をもう一度マスクすれば直せますが、ちょっと面倒ですよね)



⑥既存画像へのキャラクター追加

最近、旅先でこういう「写真にV3インペイントでキャラクターを描き込む」イラストを作るのが楽しみなのですが、これはV3インペイントの異様な強さに頼った作例なので、再現するのが非常に難しいことが想像できます。

(frame embed)



上の画像はただ立っているだけですが、こういう「写真の中の椅子に座らせる」ような芸当はNovelAIにしかできないのではないか…と思いますが、とりあえず実験してみることにします。



まずはデフォルトインペイントで普通に1人分の範囲を塗りつぶして「潜在空間のノイズ」から除去強度「1」で生成してみます。…が、このように大きく崩れてしまいました。


CNインペイントではどうでしょうか。同じようにキャラクターが座るべき場所をマスクして、このように設定します。


NovelAIの作例とほぼ同じプロンプト「1girl,miorine renbran,long hair,gundam suisei no majo,casual wear,white hair,long skirt,boots,beige shirt,smile,sitting,masterpiece, best quality, very aesthetic, absurdres」で生成したのがこちら。

なんと、驚くべきことに結構な精度でできてしまいました。


上の画像では、テーブル部分と膝の整合性がやや不自然ですので、インペイント範囲の指定により気を使い、テーブルに膝が食い込まないようにきれいにマスクしてやり直してみます。また、マスクする際にいすの座面をできるだけ残しておくと、うまく整合性を取ることができるようです。


こちらが生成結果。

おおっ!全く期待していなかったのですが、かなり素晴らしい結果ではないでしょうか。ただ、写真にアニメ絵を合成している手前、背後の壁にはモヤのようなインペイント痕跡が残ってしまっています。


そういうときは、こんなふうに画像編集ソフトで元写真とレイヤーを半透明にして重ね合わせ、キャラクター以外を消しゴムすれば…


このように背景への影響部分だけを消すことができますね。

よく見ると、すこしお尻が浮いているように見えますが、クリスタの歪みツールなどで直したのち、img2imgなどすればより「座っている」ように見せられると思います。




たまたまうまくいっただけなんじゃないかと半信半疑だったので、こちらのベンチの写真でもう一度試してみました。プロンプトは「2girls,suletta mercury and miorine renbran,gundam suisei no majo,red hair,sitting on bench,casual wear,long skirt,boots,beige shirt,smile,sitting,white long hair,eye contact,happy,masterpiece, best quality, very aesthetic, absurdres」です。


高解像度補助を掛けないと画質がかなり低くなりましたが、おおむねガチャをすれば破綻の少ないイラストが得られることが分かりました。うまく座れるかどうかは写真の解像度やサイズにもよるようです。

こちらも、ミオリネさん(向かって右)の脚が浮いているように見えるので、ちゃんとしたイラストにしたい場合はガチャか修正が必要かと思います。(下半身だけをインペイントするなど)



⑦イラスト同士の合成

インペイントを使って、もともと別々のものだったイラストを矛盾なくつなげることもできるはずです。たとえばこちらの画像は、これまで作ってきたガールズバンドクライのキャラクター絵を雑に並べてから、おかしいところをマスクしてV3インペイントしたものです。きちんとプロンプトも組んでおらず、「4girls,aeriel,flying,sky」程度で生成しましたが、このようにおおむね空色でつないでもらうことができます。

正直、最終的にまとめることを考えずに作ったイラストでしたので、画風もライティングも揃っていませんし、コンセプトも謎なイラストになってしまっていますが、技術的にイラスト同士の合成自体はさほど難しいものではないと思います。


やり方は単純で、このようにキャンバス内に別々のイラストを配置し、足りない部分をマスクするだけです。


このように、足りない部分や背景を補うことができます。



では、同じことをローカルSDXLでできるか試してみましょう。一つ目のCNとしてInpaintXLを指定します。


単純にCNインペイントのみでt2iすると、このように崩壊してしまいます。これは、インペイント範囲を深読みしすぎて、「そういう形状の何かがある」と考えすぎてしまうことが原因。前述したとおり、「My promt is more important」を選ぶことで多少は軽減できます。


インペイントで線画がおかしくなる場合、二つ目のCNとしてLineartを使うテクニックもありますが…


「My promt is more important」にしたInpaintと、「Balanced」のLineartを併用しても、正直品質は低いですし、元画像の見切れ部分がそのまま反映されてしまっています。


そこで、線画をLineartで保持するのではなく、さきほど「アウトペイント」の項目でやってみた「原画をAnytestに与えて、足りない部分を補ってもらう」手法を試します。線画維持が得意なv3ではなく、より自由度の高い「Anytest v4」を二つめのCNとして呼び出し、下図のように重み1&「Controlnet is more important」で原画を読み込ませてみました。一つ目のinpaintXLでインペイント範囲を定め、二つ目のAnytestで線画を維持しつつ「続き」との整合性を取るのが狙い。


一つ目のInpaintはこのような感じです。キャラに食い込むように塗りつぶして「My promt is more important」を選択しています。(InpaintAnythingでExpand機能を使ってもよいでしょう)


こちらが生成結果。思った通り、Anytestの「続きを描く」力をControlnet重視で反映できています。ただ、プロンプトの混じりはどうしても起こるので、ミナちゃんの髪色がミオリネさんに近づくなどの現象はおきてしまっています。このあたりはさらに加筆したものをAnytestに放り込むなどすると改善できるかなと思います。


終わりに

以上、意外にもNovelAIでしかできないと思われていたテクニックの大半がSDXLでも再現可能なことが分かりました。特に、写真の中にキャラクターをインペイントする手法は絶対に無理だろうと思いながら実験していたので、それなりにうまく行ったことに驚いています。


NovelAIでできた8つのテクニックのうち、最後の「⑧キャラクターの一貫性を保持する」については、別の独立した記事で特集します。現時点で、この程度までなら似せられることが分かりましたので、さらにいろいろ検証してご報告したいと思っています。(一番左の立ち絵1枚から残り3枚を創出しています)



特に検証したいのが、このように1枚の入力画像から別角度からのカットを5枚分推論してくれるモデルとの併用です。(左上の正面画像一枚を入力)


一枚一枚の画像は細部が低劣なのですが、CoppyLoRAを使った簡易LoRAと組み合わせてimg2imgなどすることで、「同キャラ別カット」をより効率的に創出できるのではないでしょうか。そうなれば、オリジナルキャラクターのさまざまな角度からのカットを効率的に作ることができ、本格的なオリキャラLoRAをより簡単に追加学習させられる可能性があります。(ただ、思ったよりも輪郭が低劣なため、生成結果がこの低劣さに引っ張られてしまうと「同キャラ別カット」に見えなくなってしまう点はクリアしないとなりません)


こちらのURLからデモを試すことができますので、皆様もぜひ試してみてください。

(frame embed)



では、本日はこのへんで。スタジオ真榊でした。







インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3 インペイントが理解る!2024 SDXL用Controlnet vs NovelAIv3

Comments

勉強になりました。 SDwebUIでの⑧キャラクターの一貫性を保持するの特集について興味津々です。 Anytestを使うのかと思いますが、自身でいい感じの手法をまだ見つけられておらず・・・。公開予定はありますでしょうか?

Netoroman

https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main 月須和さんのHFのtest controlnet2のフォルダにあるはずです。

AIイラストが理解る!【スタジオ真榊】

執筆お疲れ様です。最近SDXLに手を出してみたのでとても刺さる内容でした。やはり賢木さんしか勝たんです。一つ質問なのですが、本記事に出てきたanytest V4を私も使ってみたいのですが、どちらで配布されてありますでしょうか?教えていただければ幸いです。

2次元の杜ーAI閣下

おっしゃるとおりで、拡張機能のリンクを張り間違えていました。時間を無駄にさせてしまい、大変申し訳ない限りです。正しいリンクに貼り直しておきます。

AIイラストが理解る!【スタジオ真榊】

すいません、ちょっとinpaint Anythingの導入でつまずいたので報告です。 この記事のURL、uebui用のものじゃないみたいで、導入しても動かなかったです。モデルカードの記述を見たら、webui用の別のページがありまして、そちらでやったらうまくいきました。 URLを以下に貼っておきますので、お手すきの際に更新いただけると、私みたいにこんがらがる初心者さんが減るんじゃないかな~、と思います。 長文失礼しました。 URL https://github.com/Uminosachi/sd-webui-inpaint-anything

kii


More Creators