🦊ControlNet
🏠 | 🦊雑に学ぶComfyUI
👈 | 🦊outpainting
👉 | 🦊IP-Adapter
https://gyazo.com/374d9112c26cc1098d9e7e11b5ca49fa
拡散モデルはAIにノイズと画像に関係性を見つけ出し、ノイズから画像を生成できるようにするものでした。
この"ノイズ"の他にもなにか概念も加えられたらどうでしょう?
例えば" イラストの線画 "と" 塗り終わった画像 "の関係性を見つけさせたら、線画を渡せば色を塗ってくれるものが
" 人の写真 "と" 棒人間 "の関係性を見つけさせたら、棒人間を渡すだけで同じポーズをした人の画像を作ってくれるものができそうです
ControlNetはこれを実現する技術のひとつです
📚種類いろいろControlNet
画像と対応させられる概念はアイデアの数だけ存在します
openpose(棒人間)や深度マップはみたことがある方も多いと思いますが、他にもいろんな物が開発されています
その他主なControlNet
scribble : 落書き
lineart/anime : 線画
inpaint : inpainting
QR Code Monster : 白黒画像
次のControlNetの開発者はあなたかもしれない……
ControlNetモデルのダウンロード
ベースモデル(SD1.5 / SDXL / Flux ...)毎に、対応したControlNetモデルが必要です
モデル一覧
→ ControlNetモデル
code:models
📂ComfyUI/
└── 📂models/
└── 📂controlnet/
├── control_v11p_sd15_scribble.pth
├── control_v11p_sd15_scribble.yaml
├── control_v11p_sd15_scribble_fp16.safetensors
└── ...
pth+yamlでもsafetensorsでもどちらでも良いですが、セキュリティ的にはsafetensorsのほうが安心です
Stable Diffusion 1.5 × ControlNet Scribble
https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/blob/main/control_v11p_sd15_scribble_fp16.safetensorscontrol_v11p_sd15_scribble_fp16.safetensors
https://gyazo.com/81c6d1e7e725c636bc2b5a1b770bb861
SD1.5_ControlNet_Scribble.json
Apply ControlNetノードにControlNetモデルと制御用の画像を入力します
その他の処理として、入力した画像をStable DIffusion 1.5に最適な解像度にリサイズ、そのサイズをEmpty Latent Imageのパラメータとして入力しています
start_percent / end_percent
サンプリングのどのタイミングでControlNetを有効にするか設定します
ControlNetのお陰で細かい制御が出来るようになりますが、ControlNetに限らず、拡散モデルはなんの制御もせず自由に絵を書かせているとき最も力を発揮します
最初だけControlNetを有効にし、後半はControlNetをオフにすることで制御とクオリティのバランスを取ることができます
https://gyazo.com/ba7e0511400498603d022efc0e30ed28https://gyazo.com/a17aba24afa1c1f638b648769f958bebhttps://gyazo.com/b28a898e9b069ea38601ee9ca4255dcd
end_percent: 0.1 / 0.5 / 1.0
制御用画像
そのControlNetモデルがどんな画像で学習されたかによりますが、例えばこのScribbleモデルでは黒ベースに白で絵を描くことでうまく反応します
白ベースに黒だとうまく動きません
Flux × ControlNet Union
ControlNet Unionは、一つのモデルに複数のControlNetをまとめたものです
入力した制御画像によってどのControlNet機能を使うかを自動的に判別します
(どの機能を使わせるか明示することもできます)
https://huggingface.co/ABDALLALSWAITI/FLUX.1-dev-ControlNet-Union-Pro-2.0-fp8/blob/main/diffusion_pytorch_model.safetensorsFLUX.1-dev-ControlNet-Union-Pro-2.0-fp8
https://gyazo.com/09074aa4c15c62de02e0d6c3ecb83560
Flux_ControlNet-Union_Depth.json
SetUnionControlNetTypeノードでどの機能を使うか指定します
autoにすると制御用画像のタイプを自動で認識します(間違えることもある)
Depth Anything V2で深度マップを取得
🧩ControlNetへの入力する制御用画像の下処理について
scribbleくらいであれば、ペイントソフトを立ち上げて自分で描けばよいですが、openposeや深度マップともなるとそもそもこれらを用意するのが大変です
(まぁ描いてもいいんですが…手書き深度マップで敗北したnomadoor.icon)
これらを用意するためのカスタムノードがComfyUIにはたくさんあるので、見ていきましょう
comfyui_controlnet_aux
https://gyazo.com/45a394e0b73f40d99775f8d4c1746cbc
preprocessor.json
一枚の画像を素に、線画や棒人間に変換するノードがいろいろあります
ComfyUI 3D Pose Editor
https://gyazo.com/ffefadf2e29d8e4dc660bc5876fd3138
棒人間の3Dモデルを操作してopenposeを出力
画像を読み込んで、自動でそのポーズに変換する機能もある
手と足のみ深度マップ、ノーマルマップも出力できる
(Archive)🦊ComfyUIでやってみる