この記事は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
系ノードとも関連してくるが、これはまた別の記事にする予定。
現時点ではわからないノードだらけだが分かり次第追記。