この記事はComfyUIのImpact Packについて私が分かる範囲で綴る記事。
ひとまず第一回はsegsとは何かを調べる。
ノードがものすごい数あり、正直なところかなりが謎となっている。
英語でもほとんど情報が見つからないのでかなり上級者向け。
基本的な解説は全てスキップする。
Impact Packにおいてsegsというピンがあり、この概念を調べる。
だと思われる。本当に解説が見当たらないため確信はない。
SEGSPreviewというノードを利用するとSEGSが持っている情報を可視化できる。
| 元絵 | ノードでSegsを表示 | 
|---|---|
      
    
   
         | 
      
    
   
         | 
上はpersonを検出した例
これを見る限り元絵はマスクのくり抜きがされており、同時にSEGSというピンしか繋がっていないのに画像データも渡ってきているのが分かる。
SEGS to Mask Listノードを使えばマスク情報だけ取り出せる
SEGSToImageListノードを使うとイメージ情報だけ取り出せる。
このときpersonのセグメントを取ったので元絵と全く同じものがでているが、例えばこれをFaceだけにすると顔の部分だけ切り取られた画像が出てくる。
UltralyticsDetectorProviderノードはsegを取るときのベースモデルを読み込むもの。
ControlNetで言うところのLoad ControlNet Modelに相当するものだと思われる。
BBOXと書いてあるピンはCG的に「バウンディングボックス」を意味するものだと思われる。
これはシンプルに四角形のマスクを意味する。
SEGMというのは自動でキャラの形などに切り抜かれたマスクの形状。
読み込むモデルに応じてここのピンが分かれるがComfyUI ManagerでDLした場合はそもそもBBOXなのかSEGMなのかフォルダ分けされるのでわかりやすい。
この他にもCLIPSegDetectorProvider,ONNXDetectorProviderがあるが調査していない。
上でも使っているがProviderノードから読み込んだモデルと入力された画像からマスクを切ってsegsを生成するノード。
ImpactSimpleDetectorSEGSで検索。
Provider系ノードと合わせて次のようにつなぐ
imageにはマスクを検出するベースの画像。
ここではpersonのモデルを入れているので「人物」を自動でマスクするモデルになる。
この時「person」はsegmモデルなのでsegm_detector_optにつなぐのだがBBOX_DETECTORのほうも繋いでやらないと動作しない。
「face」の場合はsegm_detector_optにつなぐ必要なし。
このノードには数値で入力する項目が多数あるが未調査。
これらはSimple Detectorと違ってそれぞれBBOXとSEGMどちらか一方だけのDetector
下のテキストボックスはフィルターか何かだったと何処かで見た気がするが未調査。
とりあえずわからなくなるぐらいならSimple Detectorだけ覚えておけば良さそう。
検索ImpactSimpleDetectorSEGS_for_AD
AnimateDiffのような連続した動画に特化したDetectorだと思われる。
入力項目は同じなので使い方に迷うことはなさそう。
最も使うのはAnimateDiff後にFaceのみ再描画する例
参考の動画:(182) ComfyUI-Inspire-Pack - Tutorial #12: Detailer for Animate Diff - YouTube
マスクの動きがフレーム間を考慮した動きになる?具体的にこれを使うメリットはわからないが、インプットが連続したイメージデータに対応したもののようだ。
一例としてAnimateDiffで生成した「動画」の顔を補正する例
Detailer For AnimateDiff自体がsegs入力をベースとするため理解が必須。
Detailer For AnimaateDiff内部では「顔の部分のみ」処理されており、それを元絵にはめるノードとしてSEGSPasteが使われている。
SEGSPasteノードについては後述
SAMLoaderノードはSAMモデルを読み込むもの。
先に解説しているDetector系ノードのsamとある部分に繋ぐ
いくつかのケースで上のようにUltralyticsDetectorProviderとセットで使われていたが、SAMLoaderを外しても問題なく動作するためどんな意味があるのかわかっていない。
Load Imageノード右クリック > Open in SAM Detectorを使ってみるとわかりやすい。
右クリックで「青点(マスクを取りたい場所)」左クリックで「赤点(マスクを除外したい場所)」をいくつか入力
左下Detectを押すとマスクサンプルが生成
このように大まかにマスクを取りたい場所と取りたくない場所をしていしてやるだけでマスクを作ってくれるモデル
ただ、これはわかっているのだがSAMLoaderノードには点を明示的に打つ方法がないので、どういう検出になるのかてが全く不明。
精度があがる?
元画像とsegsに入っている画像を合成するためのノードだと思われる。
imageに元画像を入れると元画像+segsで処理後の画像が出力される。
faceのみ再描画した後に合成するなど。
segsはDetailer系ノードとも関連してくるが、これはまた別の記事にする予定。
現時点ではわからないノードだらけだが分かり次第追記。
