C30:最適化記事:Segment Anything による自動マスキング

はじめに

前回の記事では、自動マスキングが画像編集ワークフローにおいて重要なテクニックであることを学びました。特に、インペインティングや合成などの作業で、背景から前景の被写体を分離する際に役立ちます。この記事では、ComfyUI と Segment Anything Model(SAM 2)を使ってマスキング処理を自動化する方法を解説します。カスタムノードとワークフローを活用することで、マスクの定義、エッジの柔軟化、背景の置き換えを効率的に行うことができます。



自動マスキングの主要コンポーネント

1. 必要なノードパックとモデルをインストールする

自動マスキングを始めるには、次のものをインストールする必要があります。

  • ノードパック:
    ComfyUI Manager を使ってこれらのノードパックを検索し、インストールします。インストールが完了したら、ComfyUI を再起動してください。
  • SAM 2 モデル:
    • モデル sam2.1_hiera_base_plus-fp16 からダウンロードしてください。入手先: Hugging Face。
    • モデルを ComfyUI/models/Sam2 ディレクトリに配置します。モデルが自動的にインストールされない場合は、Hugging Face ページに記載されている手動インストール手順に従ってください。

2. ワークフローをセットアップする

必要なツールがインストールされたら、自動マスキング用のワークフローを作成できます。手順は次のとおりです。

画像を読み込む

まず、 Load Image ノードを使用して、前景画像と背景画像を ComfyUI に読み込みます。セグメンテーションに必要なので、画像の解像度を把握しておいてください。

画像の解像度を取得する

を使います。対象のノードは Get Image Size です。このノードは Essentials Pack に含まれ、読み込んだ画像の幅と高さを抽出します。次に、出力元ノード: Load Image の出力を接続先ノード Get Image Size に接続します。

セグメンテーション座標を定義する

セグメンテーションのポイントを指定するには:

  1. ノードを追加します。ノード名: Points Editor 。KJNodes パックに含まれています。
  2. 画像、幅、高さの出力を接続してください。出力元: Get Image Size 。接続先: Points Editorです。
  3. ノードを右クリックして、次を選択します。ノード: Points Editor 。
    • ウィジェットを入力に変換 を幅と高さの両方に適用します。
    • 新規キャンバス を選択して、空白のキャンバスを作成します。
SAM 2 モデルを読み込む
  1. ノードを追加し、モデルのパラメータが次のように設定されていることを確認します。ノード: Download SAM 2 Model 。
    • モデル: sam2_hiera_base_plus
    • デバイス: cuda
    • 精度: floating.16
  2. ローダーノードの出力を接続します。接続先: SAM 2 Segmentation ノードです。
セグメンテーションマスクを作成する
  1. ノードを追加します。ノード: SAM 2 Segmentation 。
  2. 画像と座標(肯定ポイントと否定ポイント)をセグメンテーションノードに接続します。座標の取得元: Points Editor ノードです。
  3. ノードを使用してマスクの出力をプレビューします。ノード: Mask Preview 。Essentials Pack に含まれています。

3. マスクの品質を向上させる

ぼかしでエッジを柔らかくする

マスクを調整するには、次のノードを使用します。 Grow Mask with Blur 。KJNodes パックに含まれています。

  1. ノードを次の2つのノードの間に配置します。配置するノード: Grow Mask with Blur 。1つ目: SAM 2 Segmentation 。2つ目: Image Composite Mask ノードです。
  2. 次のパラメータを調整します。
    • ぼかしの半径:推奨値は 2 です。これにより、エッジがより滑らかになります。
    • 拡張値:推奨値は 2 pixels です。これにより、マスクがわずかに広がります。
  3. ノードを使って、変更をリアルタイムで確認します。ノード: Mask Preview です。
マスクを合成する

出力を接続します。出力元ノード: Grow Mask with Blur 。接続先: Image Composite Mask ノードです。これにより、前景の被写体の完全性を保ちながら背景を置き換えることができます。


4. 最終画像を保存する

マスクと背景の置き換えに満足したら:

  1. ノードを追加して、出力をディスクに保存します。ノード: Save Image Extended です。
  2. が次の値になっていることを確認します。項目: Queue Mode 。値は Queueです。
  3. で保存ノードのバイパスを解除します。使用するショートカット: Ctrl + B です。ワークフローをキューに入れて画像を保存してください。

ワークフローの例

ワークフロー設定の例を次に示します。

1. Load Image Node → Get Image Size Node → Points Editor Node  
2. Download SAM 2 Model Node → SAM 2 Segmentation Node → Mask Preview Node  
3. Grow Mask with Blur Node → Image Composite Mask Node → Save Image Extended Node  


マスクの精度を高める

最適なマスク精度を確保するには:

  • ノードを使って、前景と背景のポイントを正確に定義します。ノード: Points Editor です。
  • ノードでぼかしと拡張の値を調整し、エッジの柔らかさとマスクの範囲のバランスを取ります。ノード: Grow Mask with Blur です。

参考文献

コメントを残す