ComfyUI.Tokyo
SD1.5 Inpaintng【VAE Encode (for inpainting)】
Windows版ComfyUIのStable Diffusion 1.5(SD1.5)環境における典型的なInpainting(インペインティング)の構成で、704x448画像の女性の髪の色を変える事例をあげます。
dreamshaper7.safetensors`と`vae-ft-mse-840000-ema-pruned.safetensors`を使用し、ComfyUI Mask Editorで髪部分をマスクして行うこの手法の原理と特徴を解説します。
Inpainting(インペインティング)の原理
Inpaintingは、画像の一部をマスクで覆い、そのマスクされた領域をAIに再生成させる技術です。Stable DiffusionにおけるInpaintingの基本的な原理は以下の通りです。
- 入力画像のエンコード:
- まず、元の画像(髪の色を変えたい女性の画像)がVAE(vae-ft-mse-840000-ema-pruned.safetensors)によって潜在空間にエンコードされます。この潜在表現は、画像の抽象的な特徴を捉えたデータです。
- マスクの適用:
- ComfyUI Mask Editorで作成されたマスク(髪部分が白く、それ以外が黒い)も、潜在空間での処理に適した形に変換されます。
- このマスクは、AIに対して「この領域だけを修正する」という指示を与えます。マスクされていない領域(顔や背景など)は、元の画像情報を保持しようとします。
- ノイズの追加(拡散プロセス):
- エンコードされた画像とマスクされた領域に、ランダムなノイズが加えられます。このノイズは、拡散モデルが画像を生成する際の出発点となります。
- 特にマスクされた領域には、より多くのノイズが加えられるか、あるいはその領域の潜在表現が完全にノイズで置き換えられることで、AIが自由に新しい内容を生成できる余地が生まれます。
- ノイズ除去(逆拡散プロセス):
- Stable Diffusionモデル(`dreamshaper7.safetensors`)は、入力されたプロンプト(例:「青い髪の女性」など)と、マスクされた領域のノイズ、そしてマスクされていない領域の元の画像情報を参考にしながら、ステップバイステップでノイズを除去していきます。
- このプロセスで、マスクされた髪の部分がプロンプトに従って新しい色(この場合は青)に変化していきます。マスクされていない部分は、元の情報を維持するように誘導されます。
- この際、Inpainting専用に微調整されたモデルや、Inpainting用の特別なノード(例:`Inpaint`ノードなど)を使用することで、マスク境界での不自然さを軽減し、より自然な形で画像を再構築します。
- デコード:
- ノイズ除去が完了し、新しい髪の色が生成された潜在表現がVAEによってピクセル空間の画像にデコードされ、最終的な出力画像が得られます。
Inpaintingの特徴
この手法には、いくつかの重要な特徴があります。
- 局所的な編集が可能:
- 画像全体を再生成するのではなく、指定した(マスクした)領域のみを対象に編集を行うことができます。これにより、元の画像の他の要素(人物の顔、背景など)を維持したまま、ピンポイントで変更を加えることが可能です。
- 今回のケースでは、女性の顔や服装、背景などはそのままに、髪の色だけを変更できるのが最大の利点です。
- プロンプトによる高い制御性:
- 変更したい内容をプロンプトで具体的に指示できます(例:「blue hair」「red hair」など)。これにより、狙った通りの変更を実現しやすくなります。
- ネガティブプロンプトを使って、望まない要素(例:「disfigured」「bad hands」など)を除外することも重要です。
- 継ぎ目の自然さ:
- Stable DiffusionのInpaintingは、マスクの境界線において、新しい生成内容が元の画像と自然に馴染むように設計されています。これは、モデルがマスクされていない領域の情報を参照しながら、マスク内の内容を生成するためです。
- ただし、マスクの範囲やプロンプトの内容、モデルの性能によっては、完全に継ぎ目をなくすのが難しい場合もあります。
- VAEの重要性:
- 使用している"vae-ft-mse-840000-ema-pruned.safetensors"は、一般的に画像の細部表現や色彩の忠実度が高いとされています。Inpaintingでは、特に元の画像と生成部分の「色合い」や「質感」を自然に融合させる必要があるため、高品質なVAEの存在は重要です。
- 試行錯誤の必要性:
- 理想的な結果を得るためには、プロンプトの内容、マスクの精度、サンプリングステップ数、CFGスケールなどのパラメータを調整し、複数回試行錯誤することが一般的です。
- 特に、髪のように細かく複雑な形状を持つ領域のInpaintingは、自然な結果を得るために少しコツが必要になる場合があります。マスクを少し広めにとる、後処理で少しぼかしを入れるなどのテクニックも有効です。
- ComfyUIの柔軟性:
- ComfyUIでは、"Load Image"、"VAE Encode (for inpaint)"、"K-Sampler"、"VAE Decode"などのノードを組み合わせることで、Inpaintingのワークフローを柔軟に構築できます。また、`Mask Editor`で直接マスクを作成・編集できるため、作業効率も良いです。
このInpainting手法は、写真の修正、イラストのバリエーション作成、既存の画像の特定の要素変更など、多岐にわたる用途で活用できる強力なツールです。
まず、インペイントをする対象画像を作りましょう。
workflow
生成した画像です。AI特有の変な文字が出ていますが、このさい無視します。
workflow
ComfyUI Mask Editorで髪部分をマスクして行います。
マウスを画像にあてて、右クリックで Open Musk Editorを選択します。
結果です。
上手にいかないときには、繰り返してみてください。
しっかりマスクして塗漏れがないようにしましょう。
プログラムを変えて、楽しんでみてください。




