2024/12/01(日) [n年前の日記]
#1 [cg_tools] Inpaint anythingを試用
画像生成AI Stable Diffusion web UI reForge の img2img を使っていて、人物と背景をマスクで塗り分けるのが面倒臭いなと感じてきた。こういう作業こそAIでどうにかしてほしい…。何か良いツールは無いものか…。
ググってみたら、Stable Diffusion web UI用の拡張、Inpaint anything が使えそうな気がしてきた。
_Uminosachi/sd-webui-inpaint-anything: Inpaint Anything extension performs stable diffusion inpainting on a browser UI using masks from Segment Anything.
_Stable Diffusionで指定部分だけ変更できる拡張機能『Inpaint Anything』の使い方! | romptn Magazine
_【Stable Diffusion】Inpaint Anythingの使い方!特定の領域に自動でマスクを作成 | イクログ
_【超便利】Inpaint Anythingの使い方 前編【stable diffusion】 - YouTube
_【超便利】Inpaint Anythingの使い方 後編【stable diffusion】 - YouTube
Windows10 x64 22H2 + Stable Diffusion web UI reForge で使ってみた。 *1
マスク領域の上には、マウスクリックやマウスドラッグで何かしらを描いていける。このレイヤーをスケッチと呼んでいるららしい。
3つのボタンの意味は以下。
マスク領域ができたら、Inpainting で、マスク領域内を別の画像上で置き換えることができる。
ただ、この Inpainting をするためには、更にモデルデータが必要で…。どれかしらを選んで処理をすると、もしかするとモデルデータをダウンロードして処理してくれるのかもしれない。
ただ、どこにモデルデータが配置されるのか分からなかった。README.md には、以下に置いてある、と書いてあるのだけど…。中を覗いても見当たらない…。
Mask only を使えば、Get mask でマスクを作成して、img2img に送ることもできる。
ググってみたら、Stable Diffusion web UI用の拡張、Inpaint anything が使えそうな気がしてきた。
- 画像に対して、自動でセグメントで分割してくれる。(領域を分けてくれる)
- どの領域を使いたいかを、スケッチと呼ばれるレイヤー上で、点や線で描き込むことで指示する。
- その領域をマスクにして、そのマスク内を Inpaint して差し替えることができる。
_Uminosachi/sd-webui-inpaint-anything: Inpaint Anything extension performs stable diffusion inpainting on a browser UI using masks from Segment Anything.
_Stable Diffusionで指定部分だけ変更できる拡張機能『Inpaint Anything』の使い方! | romptn Magazine
_【Stable Diffusion】Inpaint Anythingの使い方!特定の領域に自動でマスクを作成 | イクログ
_【超便利】Inpaint Anythingの使い方 前編【stable diffusion】 - YouTube
_【超便利】Inpaint Anythingの使い方 後編【stable diffusion】 - YouTube
Windows10 x64 22H2 + Stable Diffusion web UI reForge で使ってみた。 *1
◎ インストールとモデルデータのダウンロード :
インストールは、Stable Diffusion web UI の拡張機能タブから行える。リストを読み込んで「anything」と検索欄に打ってやればリストアップされるので、インストールボタンを押す。インストールができたら Stable Diffusion web UI reForge を再起動。
インストールに成功すると Inpaint anythingタブが追加されるのでそれを選択。
セグメントで分けるためにはモデルデータが必要になるので、使いたいモデルデータを選んでダウンロードボタンを押す必要がある。モデルデータは、以下の場所に配置される。
今回ダウンロードしたモデルデータは以下。
インストールに成功すると Inpaint anythingタブが追加されるのでそれを選択。
セグメントで分けるためにはモデルデータが必要になるので、使いたいモデルデータを選んでダウンロードボタンを押す必要がある。モデルデータは、以下の場所に配置される。
Stable Diffusion web UI reForgeインストールフォルダ\extensions\sd-webui-inpaint-anything\models\
今回ダウンロードしたモデルデータは以下。
sam2_hiera_base_plus.pt | 308.5MB | 323493298 byte |
sam2_hiera_small.pt | 175.8MB | 184309650 byte |
sam_vit_l_0b3195.pth | 1.2GB | 1249524607 byte |
sam_vit_b_01ec64.pth | 357.7MB | 375042383 byte |
sam_hq_vit_l.pth | 1.2GB | 1254865805 byte |
sam_hq_vit_b.pth | 361.8MB | 379335069 byte |
FastSAM-x.pt | 138.2MB | 144943063 byte |
FastSAM-s.pt | 22.7MB | 23832055 byte |
mobile_sam.pt | 38.8MB | 40728226 byte |
- huge, large, base のモデルデータがあって、_h, _l, _b とファイル名につけてある。ファイルサイズは、huge > large > base になっている。
- あるいは、large > base > small > tiny の順になっている場合もある。
- hq とついているのは高品質な結果を出す、らしい。
- Fast とついているのは、処理が早い。精度は甘くなる。
◎ 使い方 :
- 画像をエクスプローラ等からドラッグアンドドロップすれば読み込まれる。
- セグメント分割するためのモデルデータを選んで、Run Segment Anything ボタンをクリック。
- そこそこ時間がかかって処理が行われる。セグメントで分割された画像が出てくる。
- マスクとして使いたい領域の上でマウスの左クリック。もしくはドラッグ。点や線で指示されたセグメントが選択された領域扱いになる。
- Create Mask をクリック。マスク領域が作成される。
マスク領域の上には、マウスクリックやマウスドラッグで何かしらを描いていける。このレイヤーをスケッチと呼んでいるららしい。
3つのボタンの意味は以下。
- Expand mask region : マスク領域を1ドット広げる。
- Trim mask by sketch : マスク領域から、スケッチに描かれた分を取り除く。
- Add mask by sketch : マスク領域に、スケッチに描かれた分を追加する。
マスク領域ができたら、Inpainting で、マスク領域内を別の画像上で置き換えることができる。
ただ、この Inpainting をするためには、更にモデルデータが必要で…。どれかしらを選んで処理をすると、もしかするとモデルデータをダウンロードして処理してくれるのかもしれない。
ただ、どこにモデルデータが配置されるのか分からなかった。README.md には、以下に置いてある、と書いてあるのだけど…。中を覗いても見当たらない…。
C:\Users\(USERNAME)\.cache\huggingface\hub\
Mask only を使えば、Get mask でマスクを作成して、img2img に送ることもできる。
◎ 出力フォルダ :
インストール直後は、生成画像は以下に記録されるらしい。
ただ、設定を変更すれば、img2img の出力フォルダに切り替えることもできる。設定 → Inapint anything。
.\outputs\inpaint-anything\
ただ、設定を変更すれば、img2img の出力フォルダに切り替えることもできる。設定 → Inapint anything。
*1: ハードウェアスペックは、CPU : AMD Ryzen 5 5600X, RAM : 32GB, GPU : NVIDIA GeForce GTX 1060 6GB。
[ ツッコむ ]
以上、1 日分です。