こんばんは、スタジオ真榊です。前回の「Pix2pixでイラストを変化!10種の実験で分かったこと」に引き続き、今回もControlnet1.1でできることを検証していきます。

今回紹介するのは、新モデル「inpaint」。これはその名の通り、マスクした部分を描き直すインペイント機能に特化したControlnetモデルです。とはいえ「image2image画面で通常のインペイントをするのとどう違うの?」というのが最初に覚える疑問。text2textの画面でどうやってインペイントすればいいのかも含め、何ができるようになったのかを検証していきましょう。

なお、この記事では、img2imgタブで利用する従来のinpaint機能を「i2iインペイント」、今回検証するcontrolnet1.1のモデルとしてのinpaintを「inpaintモデル」と呼んで区別することにします。

実験:髪色を変化させる

さて、まずはinpaintモデルを使った描き直しはi2iインペイントとどう違うのか?ということを理解したいので、前回と同様の髪色変化実験を行ってみました。

実験:髪色を変化させる:図版1

まずはtext2textのタブでcontrolnet画面を開きます。モデル画像を読み込ませ、変化させたい部分をマスクしました(画面左)。これはi2iインペイントと同じですね。髪のみを変化させたいので、このようにできるだけ顔面を残しておきます。プリプロセッサは「inpaint global harmonious」、モデルはinpaintモデルを指定します。いまはこれしかありませんが、公式によればのちのち「inpaint_restrict」というプリプロセッサも追加される(かもしれない)そうです。

プロンプトは「red hair」のみ。img2imgではなく、text2textの画面でOKです。

するとこのように、赤い髪の女の子が生成されました。

実験:髪色を変化させる:図版2

元画像と見比べてみましょう。

実験:髪色を変化させる:図版3

背景の色合いを見ると、マスクしていない部分も微妙に変化していることが分かります。今後のアップデートでこれは克服される可能性があるようですが、現状ではこのような影響があることをまず認識しておく必要があります。

さきほどの例では髪がうまくマスクできていませんでしたので、もう一つ、もっとわかりやすいよう髪型自体を変更する実験をします。プロンプトを「twintails」にして、キャンバスサイズも倍の大きさにします。すると…

実験:髪色を変化させる:図版4

このような結果になりました。髪型部分を広く描き直していながら、マスク部分が周囲から浮かないよう、調和してくれることが分かります。このあたり、i2iインペイントでは細かくマスクのぼかしなどを設定しないといけなかったので、お手軽といえばお手軽ですね。

ただ、こちらはi2iインペイントで髪を「red hair」にレタッチしたものなんですが…

実験:髪色を変化させる:図版5

あちらは設定するパラメータが多くて失敗も多いものの、ちゃんと正しい設定値を理解していればもっと自然にできてしまうんですよね。よく見るとマスクの痕跡はあるものの、これもアップスケールしたら消すことが可能。かつ、マスクした部分以外は元のままなので、「やっぱりこっちでいいんじゃないか?」となってしまいます。

さらに言えば、前回紹介した「pix2pix」をi2iインペイントの画面で使ってしまえば、元イラストの輪郭をきちんと残したままレタッチすることができるわけです。当然、マスク部分以外が変色することもありません。

実験:髪色を変化させる:図版6

では、わざわざマスク外に影響を出してまで「調和させるinpaint」を使うアドバンテージはどこにあるのか、いろいろ使い途を探ってみることにします。