🦊AIによるマスク生成
🏠 | 🦊雑に学ぶComfyUI
👈️ | 🦊マスク操作
👉️ | 🦊画像合成
以下の3つのAI技術を使って、半自動で特定のオブジェクトの形に沿ったマスクを生成します
マッティング (Matting)
"前景"と"背景"をグラデーションのあるマスク(alpha matte)で区切ります
セグメンテーション (Segmentation)
物体の"形"を白と黒のマスク(バイナリマスク)で抽出します
物体検出 (Detection)
画像の中の知っていした物体をバウンディングボックス(Bounding Box)で検出します
このバウンディングボックス自体を四角いマスクとして使用することもありますし、上のマッティングやセグメンテーションと組み合わせれば、特定の物体の形のマスクを生成することができます
マッティング(Matting)
背景除去という名前で提供されているサービスや機能の中身はだいたいこれです
アニメ・実写 etc. 対象によって最適なモデルが変わりますが、ひとまずはBiRefNet/Ben2あたりを試してみてください
🪢カスタムノード
https://github.com/1038lab/ComfyUI-RMBGComfyUI-RMBG
https://gyazo.com/499c4756e1b2adb1424f9cab9829806b
BiRefNet.json
BackgroundをAlphaにするとアルファチャンネルが付加された透過画像が出力されます
ただし、これをimage2image等で使うと切り抜きされていない、元の画像が使われるので注意
セグメンテーション (Segmentation)
セグメンテーションを行うモデルで現在最も有名なのはSAMです
ざっくり言えば物の形がどういうものかを知っています
そのため、例えば写真内の車をポイントやボックスで指定すると、その車の輪郭を見つけてマスクにしてくれます
🪢カスタムノード
https://github.com/ltdrdata/ComfyUI-Impact-Pack🦊ComfyUI-Impact-Pack
https://gyazo.com/ae3a00df59eb97f8612b700ff90aac3b
画像系ノードを右クリック → Open in SAM Detector
左クリックでいくつかポイントを指定(右クリックで選択したくない範囲を指定) → Detect
服装セグメンテーション
もうひとつよく使うセグメンテーションとして服装/人体部位特化のもの(segformer_b2_clothes etc.)があります
🪢カスタムノード
https://github.com/1038lab/ComfyUI-RMBGComfyUI-RMBG
https://gyazo.com/a869c0b03ab71183b057df3d36de4524
Clothing Segmentation.json
物体検出 (Detection)
物体検出は求められる用途、技術、速度によって本当に様々な種類があります
代表的な3つを紹介します
YOLO系
リアルタイムに物体を検出することを目的としているため超高速です
基本的に検出したい物体に対して一つのモデルを作りますが、YOLO-Worldのようにテキストで指示した様々な物体を検出できるものもあります
🪢カスタムノード
https://github.com/ltdrdata/ComfyUI-Impact-Pack🦊ComfyUI-Impact-Pack
https://github.com/ltdrdata/ComfyUI-Impact-SubpackComfyUI-Impact-Subpack
https://gyazo.com/42cdfaf2099fc3eb0f0951c5ba764df3
YOLOv8_face.json
もっと詳しい内容は → 🦊Detector#65c70756e2dacc0000feac96
Grounding DINO
DINOにテキストエンコーダを加えたことで、任意のテキストでの物体検出ができます
🪢カスタムノード
https://github.com/1038lab/ComfyUI-RMBGComfyUI-RMBG
https://gyazo.com/155b612c2828179ba6da759c3800c319
GroundingDinoSAM.json
このノードではGroundingDINOで物体検出したのち、SAMでセグメンテーションしています
複数のテキストで同時に指示することも可能
VLM/MLLM系
LLMに目をもたせたものがVLMです
キャプション生成や画像や動画に対しての質問応答などの様々なことが出来るようになりましたが、その中の一つとして物体検出も可能なモデルがあります
指示への理解度はLLM由来なので高いですが、単なる物体検出をしたいだけなら過剰性能ではあります
しかし、軽量化が進んだことで気軽に使えるモデルも出てきています
🪢カスタムノード
https://github.com/kijai/ComfyUI-Florence2?tab=readme-ov-fileComfyUI-Florence2
https://gyazo.com/c61f86698eee98636a4840fb93eb2d60
Florence2.json
taskをcaption_to_phrase_groundingにし、任意のテキストを書くと検出してくれます
実はFlorence2はセグメンテーションもできるのですが、あまり性能が良くないので使いません
セグメンテーション × 物体検出
この二つを組み合わせれば任意のテキストでセグメンテーションできるようになりますね
というか、上のGroundingDinoSAMはもうすでに組み合わさってますね
YOLOv8 × SAM
https://gyazo.com/c2aebac9905865e817545dbe2b6cf420
YOLOv8_face_SAM.json
Florence2 × SAM2
🪢カスタムノード
https://github.com/kijai/ComfyUI-segment-anything-2ComfyUI-segment-anything-2
https://gyazo.com/74b557eae1842691c9590e40d64a79a5
Florence2_SAM2.json