Controlnetでジェネレーティブ塗りつぶし?「InpaintOnly」の真価 (Pixiv Fanbox)
Content
こんばんは、スタジオ真榊です。このところ「ジェネレーティブ塗りつぶし」関連の記事が続いていますが、今回はControlnetに実装された新プリプロセッサ「InpaintOnly」で、疑似的にジェネレーティブ塗りつぶしができるのか?という検証記事です。
そもそもInpaintOnlyはこれまでのControlnet「Inpaint」と何が変わったのか、本当にジェネレーティブ塗りつぶしのように使うことができるのか、photoshopよりもinpaint onlyをあえて使うアドバンテージはあるか…等々を、4つの実験で検証していきたいと思います。
InpaintOnlyとは
「InpaintOnly」は、「Inpaint」モデルと組み合わせることで、マスクされた領域だけをインペイントできるシンプルなプリプロセッサです。
というと「マスクされた部分だけをインペイントするのは当たり前じゃない?」と言われそうですが、これまでCN「Inpaint」モデルと組み合わせられるプリプロセッサは「Inpaint global harmonious」のみで、こちらにはマスクしていない領域も色調や細部が変更されるものだったのですね。公式からは「いずれinpaint_restrict(制限)というプリプロセッサを追加するつもり」とアナウンスされていましたが、それがこの「InpaintOnly」になります。
分かりにくいのですが、もちろんimage2imageのインペイント画面で利用すれば、どちらのプリプロセッサを使おうとマスクされた領域しか変容しません。あくまでt2i画面で、Controlnetで読み込ませた画像の一部をマスクして変更したい場合に、この2つのプリプロセッサを使い分けられるようになったわけです。このあたりの説明はこちらの記事をご参照ください。
新モデル「inpaint」でイラストの続きを描いてもらおう!【Controlnet1.1検証】
こんばんは、スタジオ真榊です。前回の「Pix2pixでイラストを変化!10種の実験で分かったこと」に引き続き、今回もControlnet1.1でできることを検証していきます。 今回紹介するのは、新モデル「inpaint」。これはその名の通り、マスクした部分を描き直すインペイント機能に特化したControlnetモデルです。とはいえ「ima...
Image2imageインペイントとの違い
これもおさらいになりますが、CNインペイントは「細かい設定をしなくても、マスク外に描かれているものと上手につなげてくれる」力があります。これはまさにジェネレーティブ塗りつぶしの特徴そのものなのですが、マスクした部分だけをただi2iするだけの通常インペイントとCNインペイントの最大の違いはここです。
さきほどの記事では、こちらの右側の女の子を花束に変える実験を行いました。
通常インペイントで入れ替えようとするとこのようになってしまうわけですが、
t2i画面でこのようにControlnetを起動し、「inpaint global harmonius+Inpaint」をONにして生成すると、
女の子がいた形跡もなくキレイに差し替えてもらうことができます。ただ、4つの画像のリボン部分をよく見くらべてみると、マスク領域外なのに微妙に色味が変化してしまっていることが見て取れます。
さて、ここからが本番。Inpaint global harmoniusの代わりに今回追加された「InpaintOnly」をプリプロセッサに指定すると…
マスク以外はしっかりそのままに、CNインペイントのアドバンテージを生かすことができるようになりました。快挙!
ジェネレーティブ塗りつぶしには「インサート」「リムーブ」「アウトペイント」の三種の機能があると紹介しましたが、InpaintOnlyの追加によって少なくとも「インサート」についてはほぼ同じことがSDwebUI上でもできるようになったわけですね。
商用利用可能になった「生成塗りつぶし」AIイラストにどう役立つ?
【更新情報:この記事は2023年6月6日に投稿されたものを、Adobe Fireflyの商用利用開始に伴い、2023年9月14日にアップデートしたものです】 こんばんは、スタジオ真榊です。今夜はadobeの「ジェネレーティブ塗りつぶし」(生成塗りつぶし、Generative fill)についての特集です。2023年9月13日、ついに商用利用可能にな...
ジェネレーティブ塗りつぶしと何が違うのか
「ジェネレーティブ塗りつぶしがあるなら、わざわざSDwebUIで似たようなことをやる必要なんてないんじゃないの?」と言われそうですが、そんなことはありません。ジェネレーティブ塗りつぶしの画像生成はFirefly依存なので、そもそも我々が普段使っている学習モデルのようなイラストチックな画風で生成することが大の苦手です。
例えば、この表情を「angry face」に書き替えさせようとすると…
こんなとんでもないことになってしまいます。
「SDwebUI版ジェネレーティブ塗りつぶし」のようなことができるのであれば、Adobe版と違って「表情の書き換え」や「崩壊した部分の描き直し」などが同じ画風でカジュアルにできるようになります。Adobe版と異なり、キャンバスが大きくなると崩壊してしまう問題はありますが、768x512pxくらいの大きさで生成する分には問題ないでしょう。
せっかくなので、さきほどの「笑顔→怒り顔」の表情変換をInpaintOnlyで試してみます。画像をt2i画面のControlnetで読み込ませ、「inpaint only」を指定。「1girl,angry,red glasses,face,purple eyes,looking at viewer」のプロンプトで4枚生成すると…
チェリーピックなしでもこの精度で表情差分を作ることができます。
ただ、メガネあるあるなのですが、グラスの周辺で目が4つに見えてしまう部分がありますね。Controlnetでは、ここからジェネレーティブ塗りつぶしでは絶対にできない「ヒット率を上げる方法」があります。そう、Referenceプリプロセッサです!
さきほどと設定は全く同じで、Multi controlnet機能を使って2つめのCN画面を有効化。元画像を「Reference_adain+attn」で読み込ませてみましょう。。
こちらがその結果。元画像の笑顔のミナちゃんの目鼻立ちをしっかり参照しつつ、怒り顔に変換してくれています。
キャラクター修正はInpaintOnly、無機物や背景の追加・除去・修正はジェネレーティブ塗りつぶし、細かな破綻除去はLamaCleanerという「AI修正黄金トリオ」が完成したと言えるのではないでしょうか。
例えば、このような画像生成フローが成り立ちます。
「SDwebUIでまず小さいサイズで構図を確定→キャラクターの表情や手など、生物部分をCNインペイントでt2i修正→できたものをPhotoshopβで読み込み、主に無生物や背景をジェネレーティブ塗りつぶしで修正→Tileアップスケール」
小さな破綻がたくさんある場合は、LamaCleanerで先にきれいにしてから進めてもよいでしょう。
また、さきほどReferenceと同時発動させたように、CNインペイントには他のCNモデルと組み合わせられるという圧倒的アドバンテージがあります。ジェネレーティブ塗りつぶしの結果はプロンプト指示によるランダム結果ですが、CNインペイントならLineartAnimeやdepthなど別のCNと組み合わせられるわけですから、より意図にそった結果にインペイントすることが可能になります。
メリット・デメリットを分かりやすくまとめると、こんな感じでしょうか。
①ジェネレーティブ塗りつぶし
背景や無生物を自由に差し替えたり、つなげたりできるが、キャラクターは無理。プロンプト指示できるが、細かな指示は不可能。画風が合わない場合、あとでi2iアップスケールなどを挟む必要がある。
②CNインペイント(InpaintOnly)
キャラクター部分も背景も問わず、差し替えたりつなげたりできる。ほかのControlnetと組み合わせることで、より意図に沿った結果にできる。SDwebUI上で完結するのもメリット。
実験1:InpaintOnlyで「リムーブ」はできる?
おおむね利点が理解できたので、さっそく実験をしていきましょう。さきほどの花束の実験で「インサート」ができることは確認できたので、今度は「リムーブ」を試します。
ジェネレーティブ塗りつぶしの記事で実施した「メイドさんリムーブ実験」をInpaintOnlyで試します。
CN画面のポイントは「Control mode」で「Controlnetがより重要」を選択すること。
t2i設定も独特です。いろいろ試したのですが、「消す」つまり人物を描かず背景で埋めてもらうためには、プロンプトをこのようにシンプルにし、ネガティブプロンプトもなしにするのが効果的でした。高解像度補助も効かせています。
以上の設定で生成したのがこちら。これでも頑張った方なのですが、うーん…な出来ですね。
こちらはジェネレーティブ塗りつぶしでメイドさんを消した前回の実験結果。広範囲のリムーブはadobeに軍配が上がりそうです。何より何一つ設定しないでこの結果が出るのはすごいですね。
実験2:InpaintOnlyで「アウトペイント」はできる?
次に、「アウトペイント」です。過去の記事で「Inpaint global harmonius」を使ったアウトペイントは実用化できていましたので、まずはそのおさらいから。
元画像を縮小してキャンバスの中央に配置し、余白部分をマスクで塗りつぶします。いきなり大きなサイズでt2i生成すると大崩壊するので、あくまで長辺768px程度で生成するのがコツ。「高解像度補助」を掛けて2倍にしても良いですし、あとでアップスケールするのでもOKです。
プロンプトは「beautiful sky, beautiful beach, panorama」とし、768✕512を2倍設定で「高解像度補助」したところ、このようなビーチ画像が得られます。
中央の女の子は、残念ながら「inpaint global harmonius」の影響で別人になっています。が、そこは元画像と画像編集ソフトでコラージュすればこのとおり。多少人力でインチキしてますが、しっかりアウトペイントはできています。
さて、InpaintOnlyの登場で、この人力マージ作業はもう不要になったはず。プロンプトや設定は以下のようにし、InpaintOnlyでアウトペイントしてみます。
こちらが生成結果。かなりのど迫力で、かつキャラクターがしっかり保全されています。チェリーピックなしの一発生成でこれは素晴らしい!継ぎ目もまったくわかりません。
ちなみにこちらが「ジェネレーティブ塗りつぶし」でアウトペイントした結果。よくできていますけど、面白みはさほどありませんね。膝から下も相当頑張ってくれていますが、イラストとしてはちょっと不自然な感じです。
実験3:InpaintOnlyで手の修正はできる?
こちらも毎度おなじみの実験ですね。
このように手を塗りつぶしてInpaintOnly。プロンプトは「1girl,perfect hand,4fingers 1thumb,peace sign」としました。LoraやNegativeEnbeddingsは未使用です。
こちらが生成結果。
まあ、闇雲に通常インペイントするよりはマシなくらいでしょうか。今度はNegativeEmbeddingsで人気の「badhandv4」を掛けます。
NegativeEmbeddingsは顔面も含め全体に影響してしまうため、あまり強く掛けにくいのですが、マスクが掛かっているのが手だけなので強力に掛けられます(こちらの例はbadhandv4:1.5)。ただ、リアルタッチから程遠い2Dデザインなので、打率は今ひとつ。depthライブラリを使うか、むしろジェネレーティブ塗りつぶしでリアルタッチでもよいのできちんとした手を召喚したあとi2iアップスケールを掛けた方が安定するかもしれません。
その他EmbeddingsやハイポリLoRAなどをもろもろ合わせ掛けてみましたが、せいぜいこの程度で、一発でうまくいくほどの精度にはなりませんでした。そう簡単にはいきませんね。
実験4:2つのイラストを合体できる?
本日最後の実験です。先日Twitterに投稿したこちらのイラストは、ジェネレーティブ塗りつぶしで2つのイラストを上手につないでもらったものでした。これをInpaintOnlyでできるかどうか試してみましょう。
スレッタとミオリネの別々のイラストを画像編集ソフトで一つのキャンバスに合体させ、余白部分をこのようにマスクします。
プロンプトなどは以下の通り。キャンバスの大きさをよく確かめて、同じ比率になるようにしましょう。
こちらが生成結果です!
これはすごいですね!しっかり2つのイラストをつなぐことができています。右下に謎の構造物が出てしまった以外は、かなり自然につなげているのではないでしょうか。特に左下は上手にできています。
「無生物や背景のつなぎはジェネレーティブ塗りつぶしが有利」というのがこれまでの認識でしたが、InpaintOnlyを使うだけでこれほど簡単にSDwebUI上でも似た運用ができ、「キャラクター不可」の制限も取れるとなると、他にもいろいろな活用方法が思いつける気がします。例えば、この方のツイートのようにLoRA必須キャラを次々に「インサート」していって、集合イラストのようなことができるかもしれません。
夜遅くなってきたのでそうした実験は次回に譲るとして、それにしてもInpaint一つで非常にまた絵作りの幅が広がった感がありますね。Controlnet「Tile」にも新プリプロセッサが到着しているので、引き続き検証を続けたいと思います。
それでは今夜はこのあたりで。再見!