🦊ControlNet
https://gyazo.com/374d9112c26cc1098d9e7e11b5ca49fa
拡散モデルはAIにノイズと画像に関係性を見つけ出し、ノイズから画像を生成できるようにするものでした。 この"ノイズ"の他にもなにか概念も加えられたらどうでしょう?
例えば" イラストの線画 "と" 塗り終わった画像 "の関係性を見つけさせたら、線画を渡せば色を塗ってくれるものが
" 人の写真 "と" 棒人間 "の関係性を見つけさせたら、棒人間を渡すだけで同じポーズをした人の画像を作ってくれるものができそうです
📚種類いろいろControlNet
画像と対応させられる概念はアイデアの数だけ存在します
openpose(棒人間)や深度マップはみたことがある方も多いと思いますが、他にもいろんな物が開発されています その他主なControlNet
scribble : 落書き
lineart/anime : 線画
inpaint : inpainting
QR Code Monster : 白黒画像
次のControlNetの開発者はあなたかもしれない……
ControlNetモデルのダウンロード
ベースモデル(SD1.5 / SDXL / Flux ...)毎に、対応した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://gyazo.com/81c6d1e7e725c636bc2b5a1b770bb861
その他の処理として、入力した画像を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機能を使うかを自動的に判別します
(どの機能を使わせるか明示することもできます)
https://gyazo.com/09074aa4c15c62de02e0d6c3ecb83560
autoにすると制御用画像のタイプを自動で認識します(間違えることもある)
🧩ControlNetへの入力する制御用画像の下処理について
scribbleくらいであれば、ペイントソフトを立ち上げて自分で描けばよいですが、openposeや深度マップともなるとそもそもこれらを用意するのが大変です
これらを用意するためのカスタムノードがComfyUIにはたくさんあるので、見ていきましょう
https://gyazo.com/45a394e0b73f40d99775f8d4c1746cbc
一枚の画像を素に、線画や棒人間に変換するノードがいろいろあります
https://gyazo.com/ffefadf2e29d8e4dc660bc5876fd3138
棒人間の3Dモデルを操作してopenposeを出力
画像を読み込んで、自動でそのポーズに変換する機能もある
手と足のみ深度マップ、ノーマルマップも出力できる