当ブログにはプロモーション、アフィリエイト広告が含まれます。

【Stable Diffusion】Inpaint Anythingの使い方!特定の領域に自動でマスクを作成

Stable Diffusion Web UIの便利な拡張機能紹介記事です。

今回は領域ごとに自動でマスクをかけられるInpaint Anythingについてご紹介します。

Inpaint Anythingとは?

Inpaint Anythingは、画像をいくつかの領域に分けて、特定の領域にマスクを作成し、そこにプロンプトを反映できる拡張機能です。

簡単に言うとinpaintのマスクを作る作業を、自動でできるというものです。

以下は左から元画像、領域分け、服にマスク、マスクをかけた部分にプロンプトを反映させたものになります。

ペンツールでマスクを作成する必要がないため、inpaintの作業効率化が可能。

さらにControlNetとの併用、背景切り抜きなど、さまざまな機能が使えます。

Inpaint Anythingのインストール

Extensions→Install from URL→URL for~に下記URLを入力し、Installボタンをクリックしてください。

https://github.com/Uminosachi/sd-webui-inpaint-anything.git

リスタート、または再起動するとInpaint Anythingというタブが追加されているので、これでインストール完了です。

Inpaint Anythingの使い方

モデルのダウンロード

初回のみ、画像を領域分けするモデルが必要です。

Segment Anything Model IDから使用したいモデルを選択して、Download modelをクリックしてください。

今回は「sam_vit_h_4b8939.pth」というモデルを使用してみます。

モデルの違いについてはSAMが高クオリティ、Fastやmobileは高速で処理できるモデルのようです。

またSAMもHuge・Large・Baseに分かれ、Hugeが一番高クオリティのモデルになります。

モデルによってVRAM消費量やクオリティが異なりますが、処理速度についてはそこまで大きな差を感じませんでした。

Hugeなら髪色と服の色が同じ場合だったとしても別の領域として検出してくれるので、クオリティ重視の場合はhugeがおすすめです。

用途や環境に合わせて変えてみてください。

マスクの作成

マスクを作成したい画像を取り込んで、Run Segment Anythingをクリックします。

そうすると画像が領域ごとに色分けされるので、ペンツールを使ってマスクを作成したい部分に印をつけます。

印をつければその部分の色が全て選択されるので、塗りつぶす必要はありません。

この状態でCreate Maskを押すと、印をつけた部分の色にマスクが作成されます。

マスク作成時に設定できるオプション

Invert mask

チェックを入れるとマスクが反転し、印を入れた箇所以外にマスクがかかります。

背景にマスクをかけて変更したい場合などはこちらを使うと簡単です。

Ignore black area

黒い領域を無視するかどうかです。

チェックすると黒い領域に印をつけてもマスクは作成されません。

マスクの調整

もし外側に黒い線などが残っていた場合は、「Expand mask region」をクリックするとマスクを拡張できます。

拡張する割合については下のExpand Mask Iterationsで指定可能です。

またチェック以外の部分にマスクがかかっている場合は、ペンツールで塗ったあとに「Trim mask by sketch」をクリックすれば削除できます。

例)髪のマスクを削除したい場合

Inpainting

マスクを作成したら、左側の画面にあるInpaintingタブの「Inpainting Prompt」に反映させたいプロンプトを入力します。

もしtxt2imgやimg2imgに生成時のプロンプトが残っていれば、右側のボタンで取り込めます。

今回「dress」で生成したので、そこをwhite dressにしてみました。

なお、txt2imgなどから取り込んでもサンプラーやシード値などは反映されないので、変更したい場合は「Advanced options」を開いて手動で設定してください。

あとはInpainting Model IDで使用モデルを選択し、Run Inpaintingをクリックすれば生成が始まります。

こちらのモデルも初回のみダウンロードが必要です。

Inpainting Model IDによって結果が異なるので、うまくプロンプトが反映されない場合はいろいろ試してみてください。

ただファイルサイズが大きいので、全モデルをダウンロードすると容量が圧迫されます。

Windowsの場合は以下のパスに保存されるので、不要なモデルは削除するなど調整してみてください。

C:\Users\username.cache\huggingface\hub

Cleaner

Cleanerはマスクをかけた部分を削除できる機能です。

マスクを掛けてRun Cleanerを実行すれば、その部分を削除できます。

ただ削除対象や背景との重なり、使用モデルなどで結果が異なります。

こちらの画像だとコップは削除できず、後ろの葉っぱも一部残ってしまいました。

コップ

葉っぱ

削除したい対象によってうまくできたりできなかったりなので、いろいろ試してみてください。

何らかのオブジェクトを削除するだけであれば、lama cleanerの方が使いやすいかもしれません。

ControlNet Inpaint

ControlNet Inpaintは、マスク部分に対してControlNetのInpaintが使える機能です。

事前にControlNetをインストールしておく必要があります。

なお、最近リリースされたforgeだとControlNetがビルドインされており、ControlNet Inpaintは使えませんでした。

使い方はInpaintingと同じで、プロンプトを入力して実行すれば、それがマスク部分に反映されます。

なお通常のInpaintingと違い、ControlNet optionsでIP-AdapterやReference-Onlyの使用、Control Modeやweightなどの調整が可能です。

IP-AdapterとReference-Onlyは画像をセットした場合のみONになります。

Mask only

Mask onlyはマスク部分のみ抽出できる機能です。

服の部分にマスクをかけてGet mask as alpha of imageを押すと服以外が透過されます。

get maskはマスクのみ保存が可能です。

人物にマスクをかけて背景を切り抜いたり、画像の一部を抽出して他の画像の合成したりといった使い方が可能です。

xformersの有無

Inpaint Anythingをxformersなしで動かしたところ、最後の生成部分で10分~15分程度かかりました。

xformersを有効化して使用すると、20秒~30秒に短縮できます。

pytorch2.0だとあまり意味がないという情報を見て使用していなかったのですが、Inpaint Anything使用時は結構影響するみたいです。

もし私と同じVRAM8GB使用者で生成速度が遅いと感じたら、xformersを試してみてください。

webui-user.batを右クリックして、set COMMANDLINE_ARGSに「--xformers」を追加すれば有効化できます。

set COMMANDLINE_ARGS=--xformers

Inpaint Anythingの使い方まとめ

今回は画像の領域ごとに自動でマスクを作成できる「Inpaint Anything」をご紹介しました。

まだ使用して間もないのですが、現時点では正直なところ手動でやった方がミスも少なくクオリティも高い印象です。

自動でマスクをかけられる点については非常に便利なのですが、マスクの微調整やプロンプトをうまく反映させるのが少し難しく、慣れるまで時間がかかるかもしれません。

画像によってどのモデルを使用したらいいかなども把握する必要があるので、いろいろ試行錯誤してみてください。

使いこなせれば手動より作業効率化できるかと思います。

コメント

タイトルとURLをコピーしました