🦊inpainting
inpaintingは画像の一部分のみを編集するタスクですが、細かく見ると2種類に分けることができます
1. マスクされた部分のみのimage2image
2. マスクされた部分を周りの情報をもとに埋める
1. マスクされた部分のみのimage2image
https://gyazo.com/3b4d37c9bb4a46d514f2fc77234718f8
マスクを作る方法はいろいろありますが、まずは以下の方法を
画像上で右クリック → Open in MaskEditor からペンで塗りつぶし → Save to node
https://gyazo.com/f8509abf64985a00066d18daa6c5bbda
2. マスクされた部分を周りの情報をもとに埋める
周りの情報をもとにinpaintingとはどういう意味なのでしょうか?
さて、試しに上のworkflowのdenoiseを1.00にしてみましょう
https://gyazo.com/51ded9dd3f6c933e4f8b2f35fb37957fhttps://gyazo.com/da4aaecca947510887be73d7e729c3a3
うわぁぉホラー画像
これはマスク部分(右画像)をキャンバスにしただけのtext2imageに近いです
そのため、画像全体として一貫性のある画像はできません
これでは困りますね、全体の雰囲気を見つつ、マスクされた部分を描いてもらう方法はないでしょうか?
inpaintingモデルを使う
モデルのダウンロード
https://gyazo.com/1aae8934d37e87afab7afb8bbf83935c
髪の色を変えるくらいなら上のimage2imageでも対応できますが、なにかものを描き加えるといったimage2imageでは対応できない場面で真価を発揮します
https://gyazo.com/d0749b470961faaea05304345bc339bb
Inpaintingモデルのほかにも手法があるので見てみましょう
🦊FLUX.1 Tools
Fluxの開発元からinpaintingモデルのようなものが発表され、かなり高いクオリティでinpaintingすることができます
ControlNet Inpaintを使う
inpaintingモデルを使う方法の弱点は、inpaintingモデルを使わないといけないことです(当たり前)
ベースであるStable Diffuison 1.5ではなく、ファインチューニングされた好きなモデルを使いたい場合もあるでしょう
先取りになりますが、ControlNetを使うことでノーマルモデルでもinpaintigできるようになります 🪢カスタムノード
モデルのダウンロード
$ ComfyUI\models\controlnet
https://gyazo.com/502405e34be5d221292df10ea3d6383e
一番上で紹介したworkflowにControlNetを組み込みます
Fooocusで開発された独自のinpaintingモデル(?)を使うという手もあります ControlNetと同様、好きなモデルをinpaintingに対応させることができます
SDXLのみの対応ですが、SDXL用のControlNet inpaintモデルが存在しないためちょうど代わりとして使えます
🪢カスタムノード
モデルのダウンロード
ComfyUI\modelsにinpaintフォルダを作り、fooocus_inpaint_head.pthとinpaint_v26.fooocus.patchを置きます
Model downloadをクリックしてLaMaとMATをダウンロード、上と同じinpaintフォルダに置きます
https://gyazo.com/3a6fdbbab073d6f9a50bfebee76963f6
🟨下処理として、LaMaを使ってオブジェクト除去
なくても良いのですが、境目が目立ってしまうためあった方が良いです
中身としてはInpaintModelConditioningノードとVAEEncodeForInpaintノードが合体したものです
その他
余談: マスクされいない部分もちょっと変化している
https://gyazo.com/e05f241d54f599f35a04eee29531dca6https://gyazo.com/fb5434015e3ffb70c9ee38ce488ee114https://gyazo.com/b64c69f4f3e34630f5641cec3dae6c83
青がマスク部分 / 編集後 / 元画像とinpaint後の差分
少しでも変化のあったところは黒になりますが、マスクされた部分以外も黒くなって(変化してしまって)います
これはVAEのせいで、マスクされていない部分も編集はされませんが、VAEによる圧縮 → 解凍は行われます VAEは非可逆圧縮なため、元の画像と全く同じにはならず多少変化します
これを防ぐには
https://gyazo.com/1e80ed86eb0f73155948eaf3927d2f93
最も簡単な方法がinpaintingした部分だけ、元の画像に合成することです
https://gyazo.com/8cef72b63644ec356a77785eac8745f8
いつか解説するかもしれない