2024-01-07

【Impact Pack #1】SEGSとは何か【ComfyUI】

ComfyUIカスタムノードImpact PackのSEGSに関する情報をまとめた記事。分かる範囲のみのメモ書きに注意。

Article Image

Impact Pack調査 #1

この記事はComfyUIImpact Packについて私が分かる範囲で綴る記事。

ひとまず第一回はsegsとは何かを調べる。

ノードがものすごい数あり、正直なところかなりが謎となっている。

上級者向け

英語でもほとんど情報が見つからないのでかなり上級者向け。

基本的な解説は全てスキップする。

Segsとは

Impact Packにおいてsegsというピンがあり、この概念を調べる。

マスクと画像がセットになったデータ

だと思われる。本当に解説が見当たらないため確信はない。

SEGSPreviewノード

SEGSPreviewというノードを利用するとSEGSが持っている情報を可視化できる。

元絵 ノードでSegsを表示
元絵 segsサンプル

上はpersonを検出した例

これを見る限り元絵はマスクのくり抜きがされており、同時にSEGSというピンしか繋がっていないのに画像データも渡ってきているのが分かる。

SEGS to Mask Listノード

SEGS to Mask Listノードを使えばマスク情報だけ取り出せる

SEGS to Mask Listノード

SEGSToImageListノード

SEGSToImageListノードを使うとイメージ情報だけ取り出せる。

SEGSToImageListノード

このときpersonのセグメントを取ったので元絵と全く同じものがでているが、例えばこれをFaceだけにすると顔の部分だけ切り取られた画像が出てくる。

UltralyticsDetectorProviderノード

UltralyticsDetectorProviderノードはsegを取るときのベースモデルを読み込むもの。

UltralyticsDetectorProviderノード外観

ControlNetで言うところのLoad ControlNet Modelに相当するものだと思われる。

BBOX / SEGM_DETECTOR

BBOXと書いてあるピンはCG的に「バウンディングボックス」を意味するものだと思われる。

これはシンプルに四角形のマスクを意味する。

SEGMというのは自動でキャラの形などに切り抜かれたマスクの形状。

読み込むモデルに応じてここのピンが分かれるがComfyUI ManagerでDLした場合はそもそもBBOXなのかSEGMなのかフォルダ分けされるのでわかりやすい。

BBOX/SEGMがわかりやすいメニュー

この他のProvider系は不明

この他にもCLIPSegDetectorProvider,ONNXDetectorProviderがあるが調査していない。

Simple Detecotr (SEGS)ノード

上でも使っているがProviderノードから読み込んだモデルと入力された画像からマスクを切ってsegsを生成するノード

ImpactSimpleDetectorSEGSで検索。

Provider系ノードと合わせて次のようにつなぐ

ImpactSimpleDetectorSEGS

imageにはマスクを検出するベースの画像。

ここではpersonのモデルを入れているので「人物」を自動でマスクするモデルになる。

つなぎ方に注意

この時「person」はsegmモデルなのでsegm_detector_optにつなぐのだがBBOX_DETECTORのほうも繋いでやらないと動作しない。

「face」の場合はsegm_detector_optにつなぐ必要なし。

faceの場合

設定項目は未調査

このノードには数値で入力する項目が多数あるが未調査。

BBOX DetectorとSEGM Detectorもある

これらはSimple Detectorと違ってそれぞれBBOXとSEGMどちらか一方だけのDetector

 BBOX DetectorとSEGM Detector外観

下のテキストボックスはフィルターか何かだったと何処かで見た気がするが未調査。

とりあえずわからなくなるぐらいならSimple Detectorだけ覚えておけば良さそう。

Simple Detector for AnimatedDIFFノード

検索ImpactSimpleDetectorSEGS_for_AD

AnimateDiffのような連続した動画に特化したDetectorだと思われる。

入力項目は同じなので使い方に迷うことはなさそう。

最も使うのはAnimateDiff後にFaceのみ再描画する例

参考の動画:(182) ComfyUI-Inspire-Pack - Tutorial #12: Detailer for Animate Diff - YouTube

マスクの動きがフレーム間を考慮した動きになる?具体的にこれを使うメリットはわからないが、インプットが連続したイメージデータに対応したもののようだ。

Detailer For AnimateDiffとセットで使う

一例としてAnimateDiffで生成した「動画」の顔を補正する例

animateDiffで使う例

Detailer For AnimateDiff自体がsegs入力をベースとするため理解が必須。

Detailer For AnimaateDiff内部では「顔の部分のみ」処理されており、それを元絵にはめるノードとしてSEGSPasteが使われている。

SEGSPasteノードについては後述

SAMLoaderノード

SAMLoaderノードはSAMモデルを読み込むもの。

先に解説しているDetector系ノードのsamとある部分に繋ぐ

SAMLoader

いくつかのケースで上のようにUltralyticsDetectorProviderとセットで使われていたが、SAMLoaderを外しても問題なく動作するためどんな意味があるのかわかっていない。

SAMモデルとは?

Load Imageノード右クリック > Open in SAM Detectorを使ってみるとわかりやすい。

Open in SAM Detectorメニュー

右クリックで「青点(マスクを取りたい場所)」左クリックで「赤点(マスクを除外したい場所)」をいくつか入力

青点と赤点

左下Detectを押すとマスクサンプルが生成

マスクサンプル

このように大まかにマスクを取りたい場所と取りたくない場所をしていしてやるだけでマスクを作ってくれるモデル

ただ、これはわかっているのだがSAMLoaderノードには点を明示的に打つ方法がないので、どういう検出になるのかてが全く不明。

精度があがる?

SEGSPasteノード

元画像とsegsに入っている画像を合成するためのノードだと思われる。

SEGSPasteノード

imageに元画像を入れると元画像+segsで処理後の画像が出力される。

faceのみ再描画した後に合成するなど。

その他

segsはDetailer系ノードとも関連してくるが、これはまた別の記事にする予定。

現時点ではわからないノードだらけだが分かり次第追記。



この記事をシェア


謎の技術研究部 (謎技研)