画像から姿勢・セグメントを抽出し出力画像に反映させるcontrolnetには、姿勢・セグメント認識処理の種類が複数あるため、各Preprocessorの特徴を知ると用途に応じて適切に使い分けることができるようになります。
ControlNet ver1.1に伴い大幅な加筆修正を行いました。
Preprocessorが20以上増加したため、ページが大変長くなってしました。
ここではt2i用モデルのみ実演しています。i2i用のInpaint系はノータッチです。
ご了承ください
なお、v1.1用モデルはこちらからダウンロードしてください。
fp16,safetensors版で問題ありません(723MBくらいのやつ)
モデル配置場所はこちらです。
1,各Preprocessorの特徴と実例で分かるオススメ用途
簡潔に各Preprocessorの処理方式・特徴を解説し、実例で視覚的に理解できるように解説していきます。
なお実例では入力画像が二次元系と実写どちらがオススメか判別するため、以下に示す2枚を入力画像とします。
https://www.pakutaso.com/person/は人物の写真も配布しているフリー素材サイトです。
そして、認識した姿勢・セグメントなどから初音ミクの画像を生成してみます。
controlnet適用前はコチラ↓
cannyの特徴と実例 おすすめの用途
cannyの特徴
cannyは入力された画像の輪郭線を抽出するPreprocessorです。
そのため、入力画像がアニメ系など境界線のハッキリした塗りの時などに使用しましょう。
cannyの実例
実写画像を入力した場合
二次元画像の場合
canny 所感とおすすめ用途
cannyは実写など線があいまいだと認識精度が大きく下がるため、入力は二次元イラストがおすすめです。
そして、線画を忠実に守って出力するため、他キャラなどに姿勢だけ適用といった用途には使えません。
おすすめ用途は、自分で書いた線画だけの下書きを完成させる・構図等を全く変化させず画風LoRAを適用するなどでしょう。
depth系の特徴と実例 おすすめの用途
depthの特徴
depthは画像の深度情報を抽出します。
つまり入力画像の奥行きや被写体の前後関係を踏まえた画像生成が行なえます。
depth_leresの実例
実写画像を入力した場合
二次元画像の場合
depth_midasの実例
depth_zoeの実例
depthの所感とおすすめ用途
深度情報がハッキリしているのはカメラ等で撮影された画像≒実写画像です。
そのため、入力には実写画像を使用しましょう。
depthは実写画像を元にキャラの構図を決める時・背景だけ差し替えたい時などにオススメです。
mlsdの特徴と実例
mlsdの特徴
mlsdは直線の輪郭のみ取り出します。
曲線のないもの≒人工物・幾何学的形状のオブジェ・構図を認識します。
mlsdの実例
mlsdの所感とおすすめ用途
これは実例に使った入力画像が悪かったです。入力無いも同然ですね。
mlsdは直線の輪郭だけを取り出したい時・窓やベッドの枠などを認識させたい時にオススメです。
3Dモデリングで作成した部屋の間取りを使用して統一感ある背景にする際に有用でしょう。
hedの特徴と実例
hedの特徴
hedはエッジ検出(ソフトエッジ)を行うため、大雑把な輪郭を取り出せます。
※hedの語感的にhead(頭部)だけ認識すると思ってましたがそんなことはありませんでした。
上記2つ同様に入力画像全体を認識します。
hedの実例
normal_系の特徴と実例 おすすめの用途
normal_の特徴
法線情報を取り出すため、大まかな前後関係のみを認識するdepthの深度情報よりも細部まで入力画像の凹凸に忠実です。
なお、法線情報とはRGB値がXYZ値に対応し、各ピクセルでの法線ベクトルを示した画像のことです。
normal_baeの実例
normal_midasの実例
normal_の所感とおすすめ用途
深度情報が前後なのに対して、法線情報は上下左右の細かい凹凸まで含み、認識させることがます。
背景はガン無視しがちのため、人物の姿勢は細部まで入力画像通りにしたいが、線画(canny)まで高精度に認識されたら困る場面で有用です。
つまり、3Dデッサン人形・マネキンなどの画像を入力するのがオススメです。
OpenPose系の特徴と実例 おすすめの用途
openposeの特徴
皆さんおなじみopenposeは人体の表情・姿勢・手指などを認識します。
mediapipe_faceの実例
顔のみを抽出します。
openposeの実例
認識失敗↑
二次元イラスト認識の成功例も見せたいので、フォルダで目についた適当な画像を代わりに入力。
openpose_faceの実例
姿勢と顔を認識します。
認識失敗
数枚試しましたが、二次元は上手くいきません…
「mediapipe_face」の方を使いましょう。
openpose_faceonlyの実例
同様に二次元は失敗。
openpose_fullの実例
二次元は失敗。
openpose_handの特徴
openpose_handは先程のopenposeに、手・五指の検出を加えたものです。
※openpose_handというモデルはありません。Preprocessorを「openpose_hand」、モデルを「openpose」にすればOKです。
openpose_handの実例
手がある実写画像も入力してみます。
代わりの成功例
openpose_handの所感とおすすめ用途
openpose_handの手の認識精度はそこそこあるので、基本的にopenposeを使用する場面ではopenpose_handを使用しておけばOKです。
手が認識出来なければ普通のopenposeで認識したときのように出力するだけなので。
見比べる用に再度載せときます。(ミクさんの左手に注目!!)
openpose
openpose
openpose_hand
openpose_hand
openpose全体の所感とおすすめ用途
openposeは結構認識がシビアです。失敗すると真っ黒画像が出力されます。(何故かControlNet不使用時と出力が異なる、どうして…??)
二次元イラストからは姿勢検出が出来ないことも多いため、入力画像は実写画像・3Dモデルなどがおすすめです。
このカラフルな棒人間はブラウザで簡単に作れるのでスクリプトを紹介しておきます。
ブラウザで簡単にカラフル棒人間画像を作る
Posexというスクリプトを使って、カメラ視点や各関節を好きに操作した姿勢制御用の棒人間画像を作れます。
WebUI拡張機能として簡単にインストールできます。
適当な視点からの姿勢
適当なポーズ
3分でできるインストール方法はコチラ。
scribble系の特徴と実例 おすすめの用途
scribbleの特徴
scribbleはマウスで雑に書いたラフを構図として入力できるPreprocessorです。
一応検証の一環として実写画像・二次元イラストも入力してますが、これは用途に沿っていないことをご了承ください。
本来の使い方↓
scribble_hedの実例
scribble_pidinetの実例
scribble_xdogの実例
scribbleの所感とおすすめ用途
scribbleはやばい。(KONAMI)
尋常じゃないくらい雑な指示でも相当意図に沿ったイラストにしてくれました。
ペンタブ・専用ソフトでなく、マウスで&WebUI組み込みのキャンパスに、右手をプルプルさせながら15秒で書いたもので十分意図は伝わったようです。
カラフル棒人間を動かすのも面倒な時・3Dデッサン人形を動かすマシンスペックがない時にオススメです。
Scribble Mode (Reverse color)のオンオフは、入力が実写画像のとき以外差が小さいですね。
実写画像以外では一応オンの方が意図通りになっている気がする程度です。
segmentation系の特徴と実例 おすすめの用途
segmentationの特徴
segmentationは「ADE20K」という規則に合わせて入力画像の領域を、要素ごとに異なる色で塗り分けて分類し出力するPreprocessorです。
モデル名は「seg」って書いてあるやつです。これだけPreprocessorのフルネームがついてないのでご注意下さい。
segmentationの実例
segmentationの所感とおすすめ用途
segmentationは革命。
入力画像の要素ごとに領域を区切って、どの箇所にどの要素が来るかを出力画像に反映させられます。
以下の例ではざっくり言うと、水色部分が空、小豆色が人物、緑が木々ですね。
実写画像から描写箇所(領域)は変えずに、イラスト化できているのが分かります。
つまりsegmentationを使用すれば好きな位置に好きな要素を配置でき、プロンプトと違い複数の要素が混ざることもないのです!!!
入力画像がイラストだと上手く認識できないので、入力は実写画像がオススメです。
Sofredge系の特徴と実例
softedge_hedの実例
そう解釈するんかい!↑
softedge_hedsafeの実例
softedge_pidinetの実例
2,まとめ controlnetの各Preprocessorの特徴と用途別オススメ
- canny:線画抽出。入力画像は二次元イラストがオススメ
- depth:深度情報抽出。入力画像は実写画像オススメ。
- hedn:ソフトエッジ検出。使い道が思いつかない
- mlsd:直線輪郭のみ検出。3Dモデリングされた部屋を入力する際オススメ
- normal_map:法線情報抽出。3Dデッサン人形などを入力すると良い
- openpose:姿勢検出。人体の姿勢のみを入力画像から取り出す際有用。
- openpose_hand:上記+手と五指検出。手が検出できないときはopenpose同様の処理をするので、openpose使う際は、常にopenpose_handがオススメ
- scribble:雑な落書きを元に構図認識。凄まじく雑な入力でもそこそこ意図通り
- fake_scribble:入力画像の輪郭を落書き風に変換。用途不明
- segmentation:入力画像の領域ごとの各要素を検出・塗り分け。理論上好きな場所に好きな要素を描写できるようになった。革命。
サンプルとして画像多めにした分ページが重くなってしまいましたが、このページがPreprocessor選択の参考になれば幸いです。
controlnetへの入力画像はこちらを参考にして効率よく用意しましょう!