タグ: Inpaint Model Conditioning

  • [ComfyMaster23] 特別編: 画像の髪型を自由自在に変えてみよう!

    ComfyUIを使いこなしている皆さん、画像生成の可能性をさらに広げてみませんか?今回は特別編、画像内の髪型をAIが自動で検出し、思い通りの髪型に自由自在に変換する、一歩進んだ応用ワークフローをご紹介します。

    人物画像の髪型を変更したいと思った時、従来の画像編集ソフトでは、髪を選択して細かく加工する必要があり、非常に手間がかかりました。しかし、ComfyUIとStable Diffusionを組み合わせることで、プロンプトで指定するだけで、まるで魔法のように髪型を変更することが可能になります。

    こんにちわ、AICU media編集部です。
    ComfyUI マスターガイド」第22回目になります。
    この記事では、Florence2とSAM2による髪と人物のマスク作成、背景の自動補完、インペイントによる髪型生成、そして最終的な画像合成と補正といった、ワークフローの全貌を詳細に解説します。ComfyUIのノードを活用した高度な画像処理をマスターし、Stable Diffusionによる画像生成を新たなレベルに引き上げましょう!

    前回はこちら

    ▼[ComfyMaster22] レイアウトそのままにアニメを実写化!image-to-imageとスタイル変換で実写化レベルを制御 #ComfyUI

      1. 今回実装する処理のフロー

      髪型の変更については既に、インペイントのモデルコンディショニングを使って、こちらの記事で解説いたしました。
      ▼[ComfyMaster20] ComfyUIの高度インペイント技術で自然な髪型変更を実現!#ComfyUI #InpaintModelConditioning

      今回の処理は、髪型を変更したい画像に対して、自動で髪の毛を検出し、プロンプトで指定した任意の髪型に変更するワークフローです。大まかな処理の流れは、以下になります。

      1. Florence2とSAM2で髪と人物のマスクを別個で作成する
      2. 背景から人物を取り除き、人物がいた箇所を補完する
      3. 髪のマスクと、人物のマスクを反転させて作成した背景のマスクを合成し、髪と背景のマスクを作成する
      4. 髪と背景のマスクを利用してインペイントを実行し、任意の髪型を生成する
      5. 補完した背景と、任意の髪型に変更した人物の画像を合成し、1枚の画像にする
      6. 合成した画像に対して、低めのDenoising strengthでサンプリングを行い、人物と背景を馴染ませる

      このフローにより、画像とプロンプトを与えることで、自動で髪型を変更することができます。

      2. 使用するカスタムノード

      今回使用するカスタムノードは、以下の通りです。それぞれComfyUI Managerからインストールしてください。

      ComfyUI-Florence2

      ComfyUI-Florence2は、Florence2をComfyUIで使用するためのカスタムノードです。Florence2は、Microsoftが開発した視覚言語基盤モデルで、画像キャプション生成、物体検出、ビジュアルグラウンディング、セグメンテーション、文字認識、など、幅広いビジョンタスクを実行できます。今回は、プロンプトからのオブジェクト検出(髪と人物)を実現するために使用します。
      なお、Florence2に必要なモデルは、インストール時に「ComfyUI/models/LLM」フォルダに自動でダウンロードされます。
      リポジトリは、以下になります。

      https://github.com/kijai/ComfyUI-Florence2

      ComfyUI-segment-anything-2

      ComfyUI-segment-anything-2は、SAM2 (Segment Anything Model 2) をComfyUIで利用するためのカスタムノードです。SAM2は、Metaが開発した最新のオブジェクトセグメンテーションモデルで、画像と動画の両方に対応しています。今回は、Florence2で検出した髪や人物をセグメンテーションし、マスクを作成するためにSAM2を使用します。
      SAM2に必要なモデルは、Kijai氏のHugging Faceのリポジトリから「ComfyUI/models/sam2」フォルダに自動でダウンロードされます。
      リポジトリは、以下になります。

      https://github.com/kijai/ComfyUI-segment-anything-2

      comfyui-tensorop

      ComfyUI-TensorOpは、ComfyUIでテンソル操作を行うためのノードセットです。今回のワークフローで、このノードを直接使用することはありませんが、ComfyUI-Florence2内で使用されているため、インストールが必要になります。
      リポジトリは、以下になります。

      https://github.com/un-seen/comfyui-tensorops

      ComfyUI WD 1.4 Tagger

      ComfyUI WD 1.4 Taggerは、画像からDanbooruタグを取得するためのカスタムノードです。背景と人物の合成後の調整でのサンプリングの際に、画像からタグを抽出し、それをプロンプトとして利用するために使用します。
      リポジトリは、以下になります。

      https://github.com/pythongosssss/ComfyUI-WD14-Tagger

      ComfyUI Inpaint Nodes

      ComfyUI Inpaint Nodesは、画像のインペイント(欠損部分の補完)をより効果的に行うためのノードセットです。変更後の髪の生成に使用します。
      リポジトリは、以下になります。

      https://github.com/Acly/comfyui-inpaint-nodes

      ComfyUI-KJNodes

      ComfyUI-KJNodesは、ComfyUIの既存ノードの機能を組み合わせて作成された便利なノードを提供しています。今回使用するサンプルワークフローで、このカスタムノードを使っているため、インストールが必要になります。インストールは、ComfyUI Managerから可能です。
      リポジトリは、以下になります。

      https://github.com/kijai/ComfyUI-KJNodes

      3. 使用するモデル

      チェックポイント

      今回は、RealVisXL_V4.0を使用しました。他のSDXLモデルでも問題ありません。以下のリンクよりダウンロードし、「ComfyUI/models/checkpoints」に格納してください。

      https://huggingface.co/SG161222/RealVisXL_V4.0/blob/main/RealVisXL_V4.0.safetensors

      LoRA

      LoRAにMidjourney Mimicを使用します。Midjourney Mimicは、Midjourneyのような美麗な画像を生成するためのLoRAです。全体的に綺麗な画像を生成できるように、このLoRAを使用しています。以下のリンクよりLoRAをダウンロードし、「ComfyUI/models/loras」フォルダに格納してください。

      https://huggingface.co/imagepipeline/Midjourney-Mimic-v1.2/blob/main/2ac68c15-7d9b-49e0-a4a2-796d3093a555.safetensors

      ControlNet

      ControlNetには、AnyTest V4を使用します。AnyTest V4は、形状維持をしつつ、スタイル変換の余地を残した柔軟なControlNetです。以下のリンクよりダウンロードし、「ComfyUI/models/controlnet」フォルダに格納してください。

      https://huggingface.co/2vXpSwA7/iroiro-lora/blob/main/test_controlnet2/CN-anytest_v4-marged.safetensors

      インペイント

      インペイントで使用するモデルにMAT_Places512_G_fp16を使用します。以下のリンクよりダウンロードし、「ComfyUI/models/inpaint」フォルダに格納してください。

      https://huggingface.co/Acly/MAT/blob/main/MAT_Places512_G_fp16.safetensors

      4. 使用する画像素材

      今回は、以下の画像に対して髪形変更処理を行います。

      画像

      ☆ワークフローのJSONファイルと画像ファイルは文末にございます

      5. ワークフローの全体像

      ワークフローの全体像は以下になります。

      画像

      このワークフローをフローチャート化したものが以下になります。

      画像

      各ノードの詳細は以下になります。グループごとに解説します。

      1. 画像読み込み: 元の画像を読み込みます。
      2. 物体検出: Florence2モデルを使用して、元の画像内の髪と人物を検出します。
      3. 領域分割: SAM2(Segment Anything Model 2)を使用して、髪と人物の正確なマスクを作成します。
      4. マスク処理: 人物のマスクを反転し作成した背景マスクと、髪のマスクを合成し、インペイント用の領域を作成します。
      5. 背景生成: 人物マスクを利用して、マスクされた領域を埋めるための背景を別のプロセスで生成します。
      6. インペイント: 背景マスクと髪マスクを合成したマスクを利用して、髪型を変更するインペインティングを行います。
      7. 初期サンプリング: 背景マスクと髪マスクを合成したマスクを利用したインペインティングで、新しい髪の初期バージョンを作成します。
      8. 人物マスクの再作成: Florence2とSAM2を再度使用して、初期サンプリングで生成された画像から人物を検出し、マスキングします。
      9. 画像合成: 再作成された人物マスクを利用して、背景画像と初期サンプリングで生成された画像を合成します。
      10. 最終サンプリング: 合成された画像を弱いdenoiseでサンプリンクし、最終的な画像を洗練します。

      6. ワークフロー解説

      ここでは、セクションごとに処理内容を解説します。

      Florence2によるオブジェクト検出

      画像
      • まず、DownloadAndLoadFlorence2ModelノードでFlorence2のモデルをロードします。ここでは、基本モデルのFlorence-2-baseを選択しました。
      画像
      • 次に、ロードしたFlorence2モデルと対象画像をFlorence2Runノードに入力します。ここでは、taskにcaption_to_phrase_groundingを選択し、テキストに「human, hair,」を入力しました。caption_to_phrase_groundingは、入力したテキストに対応する画像領域を特定するタスクです。今回は、人物と髪を検出したいので、テキストに「human, hair,」を入力しています。
      画像
      • 以下がFlorence2Runノードの実行結果です。Florence2Runノードのimage出力をPreview Imageノードで表示しています。人物全体と髪がバウンディングボックスで検出されていることが確認できます。
      画像
      • Florence2Runノードのdata出力は、Florence2 Coordinatesノードに接続されます。dataはリストになっているため、ここでリストのどのデータを使用するかをindexで選択します。今回の場合、「human, hair,」と入力したので、index0がhuman、index1がhairになります。
      画像

      SAM2によるセグメンテーション

      画像
      • Florence2の結果を利用してセグメンテーションするためにSAM2を利用します。まず、(Down)Load SAM2ModelノードでSAM2のモデルをロードします。ここでは、modelsam2_hiera_base_plus.safetensorsを選択しました。このモデルは、中程度のサイズと性能を持ち、精度と速度のバランスが取れているモデルです。今回は、画像1枚を処理するので、segmentorsingle_imageになります。
      画像
      • 次にSam2Segmentationノードでセグメンテーションを行います。入力には、ロードしたSAM2モデル、対象画像、Florence2の検出結果のバウンディングボックスを入力します。今回は、髪と人物を別々でセグメンテーションするので、individual_objectstrueに設定します。
      画像
      • セグメントの結果は以下になります。左が人物全体、右が髪をセグメントでマスクした結果になります。
      画像
      • 人物のマスクは、InvertMaskで反転させ、背景マスクを作成します。
      画像

      背景の補完

      画像から人物を削除し、背景のみの画像を生成します。

      画像
      • SAM2で生成した人物マスクをGrowMaskノードで拡張させます。
      画像
      • インペイントで使用するモデルをLoad Inpaint Modelノードでロードします。
      画像
      • Inpaint(using Model)ノードに拡張したマスク、ロードしたインペイントモデル、対象画像を入力し、インペイントを実行します。
      画像
      • 以下のようにインペイントが上手くいかない場合は、マスクの拡張範囲を広げたり、シード値を変えて生成を繰り返してください。
      画像

      マスクの合成

      髪マスクと背景マスクを合成し、人物以外をインペイントするためのマスクを作成します。

      画像
      • MaskCompositeノードのdestinationに背景マスク、sourceに髪マスクを入力し、マスクを合成します。operation(合成方法)はaddにします。
      画像
      • 必要に応じて、合成したマスクを拡張してください。
      画像
      • ImageAndMaskPreviewノードに対象画像と合成したマスクを入力し、結果を確認します。しっかり人物以外がマスクされていることを確認できました。
      画像

      髪の生成

      指定した髪形に変更します。

      画像
      • まず、Load CheckpointRealVisXLをロードします。
      • 次にLoad CheckpointMODELCLIP出力をLoad LoRAに接続します。Load LoRAでは、Midjourney Mimicをロードします。
      • Load LoRACLIP出力は、2つのCLIP Text Encode (Prompt)ノードに接続します。上のCLIPがポジティブプロンプト、下のCLIPがネガティブプロンプトになります。
      • ポジティブプロンプトには、髪形を入力します。今回は「afro」を入力しました。
      • ネガティブプロンプトには、以下のプロンプトを入力しました。
      worst quality, low quality, illustration, 3d, 2d, painting, cartoons, sketch, nsfw, accessories, human,
      画像
      • 次にControlNetの設定です。まず、Load ControlNet ModelノードでAnyTest V4をロードします。
      • Apply ControlNet(Advanced)にポジティブ/ネガティブプロンプト、ロードしたControlNetモデル、対象画像を入力し、ControlNetを適用します。strengthは弱めに設定してください。
      画像
      • 次にインペイント用のLatentを作成します。VAE Encode (for inpainting)ノードに対象画像、Load CheckpointのVAE出力、背景マスクと髪マスクを合成したマスクを入力します。必要に応じて、grow_mask_byの値を調整し、マスクを拡張してください。
      画像
      • KSamplerノードには、Load LoRAMODEL出力、Apply ControlNet(Advanced)positive/negative出力、VAE Encode (for inpainting)LATENT出力を入力し、髪の生成を行います。
      • KSamplerノードの生成結果のLATENTは、VAE Decodeノードで画像に変換します。
      画像

      人物と背景の合成と補正

      新たに髪を生成した画像から人物を抽出し、背景と合成します。その後、合成した画像に弱いノイズでサンプリングを行い、画像を補正します。

      画像
      • まず、新たに髪を生成した画像から人物を抽出するために、Florence2RunFlorence2 CoordinatesSam2Segmentationノードで人物マスクを再作成します。Florence2Runノードには、新たに髪を生成した画像と「Florence2によるオブジェクト検出」でロードしたFlorence2モデルを入力します。Florence2Runノードのテキストには、「human,」を入力します。その他は、「Florence2によるオブジェクト検出」セクションで説明した内容と同じです。
      画像
      • 次にImageCompositeMaskedノードで背景と人物を合成します。destinationには「背景の補完」で生成した背景画像を、sourceには新たに髪を生成した画像を、maskには再作成した人物マスクを入力します。
      • 合成した画像は、VAE EncodeノードでLatentに変換します。
      画像
      • 合成した画像の補正に使用するControlNetを新たに用意します。「髪の生成」セクションで使用したControlNetは、ポジティブプロンプトが「afro」のみであり、画像の特徴を捉えたポジティブプロンプトではないため、新たにポジティブプロンプトを作成し、補正の精度を上げます。
      • WD14 Taggerノードで合成画像からタグを抽出します。それをCLIP Text Encode(Prompt)ノードに入力し、その出力をApply ControlNet (Advanced) ノードに入力します。
      • CLIP Text Encode(Prompt)ノードのclip入力には、Load LoRAノードのCIP出力を入力します。
      • Apply ControlNet (Advanced)ノードのnegative入力には、「髪の生成」セクションのネガティブプロンプトのCLIP Text Encode(Prompt)ノードの出力を入力します。control_netには、「髪の生成」セクションのLoad ControlNet Modelノードの出力を入力します。image入力には、合成画像を入力します。strengthの値は、少し強めの1.10を設定しました。画像のテイストを崩さないように補正するためです。
      画像
      • 最後にKSamplerノードで補正を実行します。KSamplerノードのmodel入力には、「髪の生成」セクションのLoad LoRAノードの出力、positive/negative入力にはApply ControlNet (Advanced)ノードの出力、latent_imageには合成画像をLatentに変換したものを入力します。
      画像

      7. ワークフローの実行

      それでは、ワークフローを実行してみます。以下が髪形をアフロに変換した画像です。しっかりアフロに変換されています。色を指定していなかったので、この時は金髪になっています。

      画像

      他の髪型にも変更してみました。以下が一覧になります。

      画像

      いかがでしたでしょうか?ComfyUIを上手く使うと、このように実用的な画像の生成システムの構築が可能になります。みなさんも様々な画像生成に挑戦してみてください!

      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メンバーシップ。
      退会率はとても低く、みなさまにご満足いただいております。
      ✨️オトクなメンバーシップについての詳細はこちら


      ■ボーナストラック:今回のワークフローファイルと画像


      この記事の続きはこちらから https://note.com/aicu/n/n2bc8d72e0eb4

      Originally published at https://note.com on Oct 12, 2024.

    1. [ComfyMaster20] ComfyUIの高度インペイント技術で自然な髪型変更を実現!

      「髪型を変えてみたい」と一度は思ったことがあるでしょう。そんな願望を叶えてこそが、画像生成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ノードの動作は以下のようなステップで進みます。

        1. 画像サイズの調整: 画像が正しく補完されるためには、特定のサイズ(8の倍数など)に合わせる必要があります。画像のサイズを調整することで、モデルが効率的に処理できるようにします。
        2. マスクのリサイズと滑らか化: 補完対象の部分を示すマスクは、画像と同じサイズでなければいけません。このため、マスクのサイズを画像に合わせてリサイズします。さらに、リサイズ時に境界を滑らかにする処理を加えることで、補完部分と元の画像とのつながりを自然に見せます。これにより、補完がなめらかに行われ、境界が目立ちにくくなります。
        3. 条件付けデータの更新: ポジティブ条件付けやネガティブ条件付けに、画像の潜在表現(補完の基になるデータ)とマスクを追加します。これによって、補完される部分の情報が条件付けに含まれ、モデルは「ここをこんな風に補完すればいいんだな」と理解できるようになります。
        4. 補完処理の実行: 更新された条件付けに基づいて、画像の欠損部分が自然に補完されます。例えば、背景に合わせて欠損部分が塗りつぶされたり、オブジェクトが滑らかに修復されたりします。

        マスクの滑らかさが重要な理由

        補完の際に、マスク(補完するべき場所を示すデータ)の境界が滑らかであることはとても重要です。なぜなら、境界が滑らかであれば、補完された部分が元の画像と自然に繋がるからです。マスクの境界がシャープだと、補完部分が目立ちやすくなり、不自然に見えることがあります。滑らかなマスクを使うことで、補完処理が画像全体にシームレスに溶け込み、違和感のない仕上がりが得られます

        画像

        ハードエッジなマスク画像の例

        画像

        ソフトなマスク画像の例

        画像

        特に透明体や反射、髪の毛の境界などはハードエッジにすると違和感が強く出ます。

        なぜ条件付けデータの更新が重要なのか?

        条件付けデータの更新は、補完処理を正確かつ自然に行うために非常に重要です。この更新が行われることで、モデルは最新の画像情報に基づいて適切な補完を実行できるようになります。更新された条件付けデータには、補完したい部分の最新の潜在表現とマスク情報が含まれており、これがモデルに対して「ここをどのように補完するべきか」という具体的な指示を与えます。潜在表現は画像全体の特徴やスタイルを反映しているため、補完部分が元の画像と自然に調和することを可能にします。また、マスク情報が更新されることで、モデルは補完するべき領域を正確に把握し、不要な部分への影響を最小限に抑えることができます

        画像

        さらに、ポジティブ条件付けとネガティブ条件付けが最新の状態になることにより、補完結果のコントロールがより精密になります。ポジティブ条件付けは「こうしたい」というモデルの生成方向を示し、ネガティブ条件付けは「こうはしたくない」という制約を与えることで、補完の質を高めます。このプロセスにより、モデルは適切な領域に集中し、画像全体の統一感を維持しながら補完処理を行うことができます。結果的に、条件付けデータの更新が、補完された部分を滑らかで自然なものにし、全体のビジュアル品質を向上させるのです。

        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でのマスク作成方法をご存じない方は、まず以前の解説をご参照覧ください。

        1. 入力処理 (LoadImage ノード)
          • 入力画像とマスクを読み込みます。
          • マスクの作成は、ComfyUIのMask Editorで行なっています。
            髪の毛部分にマスクを施します。
        1. モデルの読み込み (CheckpointLoaderSimple ノード)
          • 「sd_xl_base_1.0.safetensors」モデルを読み込みます。これはStable Diffusion XLモデルで、高品質な画像生成が可能です。
        2. プロンプト処理 (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
        3. インペインティング準備 (InpaintModelConditioning ノード)
          • 入力画像、マスク、VAE、およびプロンプトの条件付けを組み合わせて、インペインティングのための特殊な潜在表現を作成します。
          • このステップがこのワークフローの核心部分で、マスクされた領域に対して効果的なインペインティングを可能にします。
        4. 画像生成 (KSampler ノード)
          • インペインティング用に調整された潜在表現と条件付けを使用して新しい画像を生成します。
          • パラメータ:
            • Seed: 819339385672759 (再現性のため)
            • Steps: 20 (生成のステップ数)
            • CFG Scale: 7 (プロンプトの影響力)
            • Sampler: dpmpp_2m (高品質なサンプリング方法)
            • Scheduler: karras (改良されたスケジューリング)
        5. 画像のデコード (VAEDecode ノード)
          • 生成された潜在表現を実際の画像にデコードします。
        6. 画像の保存 (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.