「Stable Diffusion web UI(ステーブル・ディフュージョン・ウェブ・ユーアイ)」には特定の箇所を修正するための「Inpaint(インペイント)」と呼ばれる機能が標準で搭載されています。「Stable Diffusion web UI」を使い始めて間もない方は、この機能を一度使ってみてはいかがでしょうか。
AIイラストを生成していると全体的には良いイラストであっても、よく見てみると特定の部位にだけ問題があるといったことは枚挙に暇がありません。そういうときに「Inpaint」をうまく活用することで、画像の一部を修正することができるのです。
この「Inpaint」は先頃の「ControlNet」バージョンアップによって「ControlNet 1.1」にも追加されました。できることは標準のものと同様ですが、使い方が異なる上に生成される画像にも差があります。そこで、ここでは両方の「Inpaint」を利用して生成された画像を簡単に比較してみます。
↓ちびキャラの記事も見てね!
標準の「Inpaint」機能を活用する
「Inpaint」を使うための準備
「txt2img」内でプロンプトを入力・変更しながら画像を生成していると、全体的に良さそうなイラストが生成されることがあります。
しかし、細部を見てみると問題があることも少なくありません。手指の描写は問題が特に出やすいところです。以下の画像も指先(中指)の表現にやや違和感が残っています。
なお、こちらの画像の解像度は512×512です。高解像度補助(Hires.fix)は行っていません。
ここではこの画像を例に「Inpaint」を利用して修正してみます。「img2imgに転送」をクリックすることで、画像が「img2img」に転送されます。
「inpaintに転送」をクリックしても問題ないと思います。こちらの環境では画像を直接「inpaintに転送」すると、転送後の画像がおかしくなったので上記の手順で進めています。
画像を「img2img」に転送してから「Inpaint」に移動します。
画面内に「Start drawing」とありますが、マウスカーソルを画像の上に持っていくと黒いペン(ブラシ)に切り替わります。
画像の右上にある「やり直し」ボタンをクリックすると マスクを除去することができます。「×」は画像の削除です。 「ペン」ボタンはペンの太さをスライダーで変更することが できます。 |
画像の右上にあるボタンはどれもよく使います。
描き直したい箇所を上の例のように黒く塗っていきます。
マスクをかける範囲はどういう風に描き直すかによっても変わりますので、何度かチャレンジして上手くいかなければ改めて塗り直してみてください。
こちらが設定画面です。いくつかの項目を変更する必要があります。
「Inpaintを行う領域」は特定の部分のみを描き直すときは「画像全体」から「マスクのみ」に変更しておきます。「サンプリング方法」を適当なものに変更します。「ノイズ除去強度」は「0.5~0.75」あたりで適当な数値に変更します。特定の部位をごくわずかに変更するときは「0.5」程度でも問題ないようです。
その他の項目はとりあえずそのままの設定でもいけるようです。「マスクのぼかし」の程度を変更するとこで画像も微妙に変わります。また、「幅」と「高さ」は必要に応じて変更します。
なお、画像のプロンプトは以下のとおりです。誰でも再現しやすいように最低限のプロンプトで試しています。LoRA 等も使用していません。モデルは「anything-v4.0」です。
手指のみを描き直す場合は特に変更しなくても問題ありません。効果があるかどうかは別として「perfect fingers」などのプロンプトを追加してもよいかもしれません。
この他に、顔を黒く塗りつぶして表情を変更すると言うときには表情のプロンプトを追加または変更します。また、手に持っているものを別のものに変更するといった場合には持ち物のプロンプトを追加または変更します。
ここまで「Inpaint」を利用するための準備はできました。それでは実際に画像を生成してみましょう。
「Inpaint」を利用した手指の修正 その1(ノイズ除去強度0.5)
ここでは「Inpaintを行う領域」を「マスクのみ」、サンプリング方法は「DPM++2M Karras」に変更した上で、「ノイズ除去強度」は「0.5」に設定しています。
元の画像 | 修正例1 |
修正例2 | 修正例3 |
画像の生成を繰り返し行ってパッと見て違和感の少ないものを取り上げてみました。「Inpaint」はとても便利な機能ではありますが万能ではありません。今回は時間の都合上、画像の生成を20回程度しか行っていませんが、実際には納得のいく修正ができるまでガチャを回す必要があります。
「Inpaint」を利用しても数回で修正が完了とはいきません。けれども、「Inpaint」機能は元のイラストを活かすことができるという最大のメリットがあります。
削除するには惜しいという画像を「Inpaint」で部分的に修正することで視聴に耐えるものにすることは十分に可能です。
「Inpaint」を利用した手指の修正 その2(ノイズ除去強度0.6)
今度は「ノイズ除去強度」を「0.6」に設定しています。
元の画像 | |
修正例1 | 修正例2 |
こちらも画像の生成を数回しか行っていませんが、パッと見た感じでは最初の画像よりマシになっていると思います。そのあたりは生成回数をもっと増やせば何とかなるでしょう。
このように「Inpaint」を活用することで手指の描写に後から修正を加えることができます。それなりに時間をかけると満足のいく結果を得られるのではないかと思います。
そうはいっても、大幅な修正は難しいこともあります。そういうときは画像をさっさと削除するというかたちで割り切ることも必要です。
「ControlNet 1.1」の「Inpaint」機能を活用する
「ControlNet 1.1」の導入
「ControlNet」内の「Inpaint」機能は「ControlNet 1.1」から導入されています。したがって、「ControlNet 1.1」を事前に導入しておく必要があります。
「ControlNet」の導入と利用については以下の解説をご覧ください。
「ControlNet 1.1」の「Inpaint」を利用するための準備
「txt2img」内の拡張機能から「ControlNet v1.1.X.X.X」をクリックします。
こちらの画面内でいくつかの設定を行います。
まず「有効化」をクリックします。「低VRAM」や「Pixel Perfect」も必要に応じてチェックを入れます。
次に「プリプロセッサ」から「inpaint_global_harmonic」を、「モデル」から「control_v11p_sd15_inpaint」を選びます。
「Control Mode」は「Balanced」でも構いませんが、修正したい内容に応じて別の設定に変更します。その他の項目はとりあえずデフォルトのままで大丈夫です。
プロンプトは最初と同じです。
プロンプトは修正または変更に応じて追加または変更してもよいと思います。
「ControlNet 1.1」の「Inpaint」を利用した手指の修正
上記の設定で画像を何度か生成してみました。時間の都合上、生成回数はそこまで多くはありません。
元の画像 | 修正例1 |
修正例2 | 修正例3 |
「ControlNet 1.1」の「Inpaint」でも先ほどと同じように特定の部位の修正を行うことができます。
こちらの「Inpaint」を利用した場合には、先ほどまでと違ってマスク部分以外にも微妙な変化が生じています。画像を連続で表示すると全体的に変わっていることが分かります。ここではパッと見ただけでは分からないかもしれませんが、たとえばヘッドホンの光沢をそれぞれ比較してみてください。
また、いずれの画像も元の画像と色味が変わっています。この点はそういうものなのかもしくは設定が悪かったのかは分かりません。時間のあるときに使い込んでみて何か分かったらまた追記します。
「Inpaint」は特定の部位に対する軽微な修正であれば期待に応えてくれるでしょう。けれども、元の画像よりもひどい画像が出てくることも多々あります。そういったこともあって、画像の生成は何度も行う必要があります。時間対効果を考慮するならば、画像を厳選してどうしても修正を加えたいものだけを「Inpaint」にかけることが妥当といえます。
なお、簡単な修正は「Lama Cleaner」が重宝します。Web版はインストール不要で利用できます。詳しくは以下のページをご覧ください。
本格的な画像編集は以下の拡張機能を追加することで実現可能です。これはむちゃくちゃ便利です!!