「髪型を変えてみたい」と一度は思ったことがあるでしょう。そんな願望を叶えてこそが、画像生成AI技術です。従来のインペイント処理では、髪型の変更など精密な修正は難しいと感じたことがあるかもしれません。しかし、今回はその限界を突破します!付録としてComfyUIワークフローと男性ヘアカタログプロンプト集もつけちゃいます!
こんにちわ、AICU media編集部です。
「ComfyUI マスターガイド」も、ついに第20回目になります。
以前にimage-to-image (i2i) でのインペイントについて説明しました。
今回は、i2iでのインペイントをさらに掘り下げて、基本的なインペイントワークフローでは実現できなかった高精度のインペイントを行う方法を解説します。
i2i編の初回はこちら
1. 今回の目的
今回は、i2i(image-to-image)で人物の髪形を変更します。以前の記事で説明したインペイントは、ComfyUI公式が配布しているのインペイントのサンプルワークフローに従った、基本的なインペイント処理でした。そのため、効果的なインペイントが難しい状態でした。今回は、より効果的なインペイントを実施します。
具体的には、InpaintModelConditioningノードを使用します。InpaintModelConditioningノードは、効果的なインペイントをするための前処理を行います。理論的な解説も伴った中級者向け記事です!
2. InpaintModelConditioningノードの解説
InpaintModelConditioningノードは、画像補完のために必要な「条件付け」と呼ばれる情報を管理し、補完結果を自然に仕上げるために使われる重要な技術です。具体的には、欠損部分の補完に使う画像データや、その部分がどこなのかを示すマスクデータを取り扱い、モデルが適切に補完できるようにガイドします。
条件付け(Conditioning)とは?
まず「条件付け」とは、画像補完を行う際にモデルがどのように動作すべきかを決めるための「指示書」のようなものです。条件付けは、モデルに「こういう結果にしてほしい」というガイドラインを提供します。
例えば、以下のような状況を考えます。
- Positive(ポジティブ)条件付け: 補完したい特徴やスタイルを指定するもの
- Negative(ネガティブ)条件付け: 生成したくない特徴を避けるためのもの
このような条件付けがあることで、モデルは「この部分はこう補完して、こういう風にはしないでね」という具体的な方向性を得ることができます。
InpaintModelConditioningの動作の流れ
InpaintModelConditioningノードの動作は以下のようなステップで進みます。
- 画像サイズの調整: 画像が正しく補完されるためには、特定のサイズ(8の倍数など)に合わせる必要があります。画像のサイズを調整することで、モデルが効率的に処理できるようにします。
- マスクのリサイズと滑らか化: 補完対象の部分を示すマスクは、画像と同じサイズでなければいけません。このため、マスクのサイズを画像に合わせてリサイズします。さらに、リサイズ時に境界を滑らかにする処理を加えることで、補完部分と元の画像とのつながりを自然に見せます。これにより、補完がなめらかに行われ、境界が目立ちにくくなります。
- 条件付けデータの更新: ポジティブ条件付けやネガティブ条件付けに、画像の潜在表現(補完の基になるデータ)とマスクを追加します。これによって、補完される部分の情報が条件付けに含まれ、モデルは「ここをこんな風に補完すればいいんだな」と理解できるようになります。
- 補完処理の実行: 更新された条件付けに基づいて、画像の欠損部分が自然に補完されます。例えば、背景に合わせて欠損部分が塗りつぶされたり、オブジェクトが滑らかに修復されたりします。
マスクの滑らかさが重要な理由
補完の際に、マスク(補完するべき場所を示すデータ)の境界が滑らかであることはとても重要です。なぜなら、境界が滑らかであれば、補完された部分が元の画像と自然に繋がるからです。マスクの境界がシャープだと、補完部分が目立ちやすくなり、不自然に見えることがあります。滑らかなマスクを使うことで、補完処理が画像全体にシームレスに溶け込み、違和感のない仕上がりが得られます。
ハードエッジなマスク画像の例
ソフトなマスク画像の例
特に透明体や反射、髪の毛の境界などはハードエッジにすると違和感が強く出ます。
なぜ条件付けデータの更新が重要なのか?
条件付けデータの更新は、補完処理を正確かつ自然に行うために非常に重要です。この更新が行われることで、モデルは最新の画像情報に基づいて適切な補完を実行できるようになります。更新された条件付けデータには、補完したい部分の最新の潜在表現とマスク情報が含まれており、これがモデルに対して「ここをどのように補完するべきか」という具体的な指示を与えます。潜在表現は画像全体の特徴やスタイルを反映しているため、補完部分が元の画像と自然に調和することを可能にします。また、マスク情報が更新されることで、モデルは補完するべき領域を正確に把握し、不要な部分への影響を最小限に抑えることができます。
さらに、ポジティブ条件付けとネガティブ条件付けが最新の状態になることにより、補完結果のコントロールがより精密になります。ポジティブ条件付けは「こうしたい」というモデルの生成方向を示し、ネガティブ条件付けは「こうはしたくない」という制約を与えることで、補完の質を高めます。このプロセスにより、モデルは適切な領域に集中し、画像全体の統一感を維持しながら補完処理を行うことができます。結果的に、条件付けデータの更新が、補完された部分を滑らかで自然なものにし、全体のビジュアル品質を向上させるのです。
3. 使用するモデルと素材
モデル
今回は、モデルにRealVisXL V5.0を利用します。名称の通り、実写系を得意とするモデルで、商用利用可能(画像の販売、サービスへの組み込み可能)になります。このモデルを以下のリンクよりダウンロードし、「ComfyUI/models/checkpoints」フォルダに格納してください。
https://civitai.com/models/139562/realvisxl-v50?modelVersionId=789646
変換元画像
変換元画像には、以下の男性の写真を使用します(画像生成)。
画像ファイルは、以下よりダウンロードください。
- 画像素材をダウンロード (右クリックで保存)
https://note.com/api/v2/attachments/download/8212aaeaa246b1840de3430c81f9d3c7
4. ワークフロー解説
ワークフローの全体像は以下になります。基本的には標準ワークフローと同等ですが、変更点としては、Load Imageノードでの参照元画像の読み込みと、それをInpaintModelConditioningノードで前処理とLATENTへの変換を行い、KSamplerノードのlatent_image入力に接続する箇所が追加になっています。
ワークフローは文末よりダウンロードください。
処理の流れを以下のようにフローチャート化しました。
以下に、各ステップとその役割を詳しく説明します。
Mask Editorでのマスク作成方法をご存じない方は、まず以前の解説をご参照覧ください。
- 入力処理 (LoadImage ノード)
- 入力画像とマスクを読み込みます。
- マスクの作成は、ComfyUIのMask Editorで行なっています。
髪の毛部分にマスクを施します。
- モデルの読み込み (CheckpointLoaderSimple ノード)
- 「sd_xl_base_1.0.safetensors」モデルを読み込みます。これはStable Diffusion XLモデルで、高品質な画像生成が可能です。
- プロンプト処理 (CLIPTextEncode ノード x2)
- ポジティブプロンプト: “1boy, solo, young man with afro, male k-pop idol, lovingly looking camera, medium portrait soft light, chop, beautiful model, oval face, vivid”
- 髪型をアフロにしたいので、プロンプトに「afro」を追加しています。
- ネガティブプロンプト: “bad hand,bad anatomy,worst quality,ai generated images,low quality,average quality, nsfw, nude, naked“
- ポジティブプロンプト: “1boy, solo, young man with afro, male k-pop idol, lovingly looking camera, medium portrait soft light, chop, beautiful model, oval face, vivid”
- インペインティング準備 (InpaintModelConditioning ノード)
- 入力画像、マスク、VAE、およびプロンプトの条件付けを組み合わせて、インペインティングのための特殊な潜在表現を作成します。
- このステップがこのワークフローの核心部分で、マスクされた領域に対して効果的なインペインティングを可能にします。
- 画像生成 (KSampler ノード)
- インペインティング用に調整された潜在表現と条件付けを使用して新しい画像を生成します。
- パラメータ:
- Seed: 819339385672759 (再現性のため)
- Steps: 20 (生成のステップ数)
- CFG Scale: 7 (プロンプトの影響力)
- Sampler: dpmpp_2m (高品質なサンプリング方法)
- Scheduler: karras (改良されたスケジューリング)
- 画像のデコード (VAEDecode ノード)
- 生成された潜在表現を実際の画像にデコードします。
- 画像の保存 (SaveImage ノード)
- 最終的に生成された画像を保存します。
このワークフローは、元の画像の構造を保持しながら、指定された領域を新しいプロンプトに基づいて変更する高度なインペインティングを実行します。結果として、元の画像の特定部分が自然に変更された、高品質な画像が生成されることが期待されます。
5. インペイントの実行
それでは、インペイントを実行し、髪型をアフロに変えてみたいと思います。マスクは、以下のようにアフロのサイズも考えて広く作成しています。
マスクを塗る際のコツ
こんな感じに塗っていきます(白で表現)。髪色も変えたいので、もっと生え際も塗ってしまってかまいません。
塗り残しを防ぐためにも、黒髪に黒はおすすめしません。
目尻に髪がかかったり、額が出たりでなかったりは、つくる髪型にも寄りますが、実験したい場合はまずは大きく塗っていきましょう。
マスクが甘いと、このような結果になります。
一見いいかんじなのですが、目尻やもともと画像にあった髪が残ってしまって居ます。
以下が正しくマスクを設定した場合の実行結果です。しっかり画像のコンテクストを理解してインペイント処理がされています。
なお、これを以前の記事で説明した基本的なインペイント処理だけで行うと、以下のように崩れてしまいます。インペイントのための前処理と条件設定「InpaintModelConditioning」の重要性を強く感じられます。
ポジティブプロンプトの「afro」の箇所を他の髪形に変えて生成してみました。みなさんも好きな画像をインペイントして遊んでみてください。
男性ヘアカタログ的なプロンプトは文末にて!
6. まとめ
InpaintModelConditioningノードを使用することで、従来のインペイントの課題を克服し、より自然で精密な補完が可能になります。髪型の変更のような細かい修正も、適切な条件付けと最新のモデルを活用することで、まるで本物のような仕上がりが実現できます。これまでのインペイントで満足できなかった方も、ぜひ今回紹介したワークフローを試してみてください。AIの力で画像編集の可能性がさらに広がることを、実感できるはずです。
次回は、i2iでイラストを実写にする方法を紹介します。乞うご期待!
X(Twitter)@AICUai もフォローよろしくお願いいたします!
画像生成AI「ComfyUI」マスターPlan
画像生成AI「Stable Diffusion」特に「ComfyUI」を中心としたプロ向け映像制作・次世代の画像生成を学びたい方に向けたプランです。最新・実用的な記事を優先して、ゼロから学ぶ「ComfyUI」マガジンからまとめて購読できます。 メンバーシップ掲示板を使った質問も歓迎です。
- メンバー限定の会員証が発行されます
- 活動期間に応じたバッジを表示
- メンバー限定掲示板を閲覧できます
- メンバー特典記事を閲覧できます
- メンバー特典マガジンを閲覧できます
- 動画資料やworkflowといった資料への優先アクセスも予定
ゼロから学ぶ「ComfyUI」マガジン
https://note.com/aicu/m/md2f2e57c0f3c
マガジン単体の販売は1件あたり500円を予定しております。
2件以上読むのであればメンバーシップ参加のほうがお得です!というのもメンバーシップ参加者にはもれなく「AICU Creator Union」へのDiscordリンクをお伝えし、メンバーオンリー掲示板の利用が可能になります。
https://note.com/aicu/membership/boards/61ab0aa9374e/posts/db2f06cd3487?from=self
もちろん、初月は無料でお試しいただけます!
毎日新鮮で確かな情報が配信されるAICUメンバーシップ。
退会率はとても低く、みなさまにご満足いただいております。
✨️オトクなメンバーシップについての詳細はこちら
#InpaintModelConditioning
付録:男性ヘアカタログプロンプト集
この記事の続きはこちらから https://note.com/aicu/n/n03423675c02c
Originally published at https://note.com on Sept 20, 2024.