ControlNetは、条件(ポーズ、構図、境界など)をつけることにより、目的に合う画像を生成しやすくなるStable Diffusionの拡張機能です。
そんなControlNetは2023年4月にバージョン1.1をリリースしました。
機能も増え性能も向上した印象があります。
この記事ではControlNetとは何か、設定方法、使い方について紹介します。
ControlNetとは
Stable Diffusion のような拡散モデルの画像生成AIが台頭する以前、GANや画像処理を行って画像を生成していました。
ControlNetはそんなGANで用いた技術、画像処理方法を拡散モデルにも使おう!というイメージです。
(GANのedgeConnectはcannyエッジ画像を用いて画像生成していたが、ControlNetでもcannyエッジ画像を用いて画像生成しよう!という感じです。)
テキストから画像を生成する(text2image)例を考えますと、
- 通常のStable Diffusion :テキスト → 画像
- ControlNetを追加したStable Diffusion :テキスト + 特徴 → 画像
こんな感じで、特徴を使ってある程度生成する画像をコントロール(制限)してあげるイメージです。
この特徴を追加する機能が、バージョン1.1では14種類に増えたというわけです。
ControlNetの機能
# | 機能 | 内容 |
---|---|---|
1 | ip2p | プロンプトで描く |
2 | shuffle | 画像の全体をシャッフルして描く |
3 | canny | エッジ(輪郭)を描く |
4 | depth | 深度マップを描く |
5 | inpaint | 画像の一部を補間して描く |
6 | lineart | 線画(実写より)を描く |
7 | mlsd | 直線を描く |
8 | normalbae | 法線マップを描く |
9 | openpose | 骨格(棒人間)を描く |
10 | scribble | 輪郭を描く(softedgeより柔らかい) |
11 | seg | セグメンテーションマップを描く |
12 | softedge | 輪郭を描く(cannyより柔らかい) |
13 | lineart_anime | 線画(2次元より)を描く |
14 | tile | 高解像度で描く |
lineartとlineart_animeは、得意な絵が3Dか2Dかの違い。
canny、softedge、scribbleなんかはどれも似た感じ。
shuffleは、マーブリングしたような画像にするので結構面白いです。
ControlNetの用語
Stable Diffusion Web UI のパラメータにある用語は以下の通り。
- Preprocessor:特徴抽出方法。前処理。
- Model:画像生成コントロール方法。後処理。
画像生成の流れはPreprocessorで入力画像から特徴を抽出し、Modelで特徴を制限しながら画像を生成します。
ControlNetは特徴を制限する(Model)部分を指します。
詳しくは論文を参照ください。
論文:https://arxiv.org/abs/2302.05543v1
ControlNetの追加方法
ControlNetの最新バージョン1.1のGitはこちらです。
https://github.com/Mikubill/sd-webui-controlnet.git
ControlNetをStable Diffusion Web UI に追加する方法は以下を参考に実施ください。
通常の拡張機能の追加方法と同じです。
上記を追加しただけですと、モデルファイルはまだダウンロードできていません。
以下のサイトからモデルファイルをダウンロードしてください。
(本来、設定ファイルのyamlも必要ですが、ControlNetをインストールするとバージョン1.1のyamlも配置してくれるのでダウンロード不要です。)
名前がcontrol_v11●_sd15_▲_fp16.safetensorsとなっているのがモデルファイルです。
通常のpth(1.45GB)より軽い(723MB)ので、まずはこちらを試すと良いです。
全部で14種類のモデルファイルがありますが、
OpenPoseだとcontrol_v11p_sd15_openpose_fp16.safetensorsです。
ダウンロードしたモデルファイルは、Stable Diffusion Web UIの以下のフォルダに配置してください。
ControlNetの使い方
ControlNetを追加しますと、Stable Diffusion Web UI の画面に「ControlNet」が追加されます。
クリックするとパラメータ設定画面が展開されます。
ControlNetは14種類ありますが、基本的な使い方は同じです。
Preprocessorは入力した画像に対して前処理をします。
例えばPreprocessorにOpenPoseを選択した場合、画像から骨格(棒人間)を抽出します。
抽出した棒人間画像はGenerate後に出力してくれます。
Modelは追加で制限する機能のことです。
例えばModelにOpenPoseを選択した場合、骨格(棒人間)の情報も使って画像生成します。
ControlNetはStable Diffusionにおける追加層ですので、今までの機能も併用して使えます。
image2imageで使うとき最初のうちは、この画像は普通の画像入力だっけ?ControlNetの方に入力にするんだっけ?と迷うかもしれません。(上記手順2の画像入力は、ControlNetの方です。)
LoRAももちろん併用可能です!
ControlNetで画像生成
ControlNetを使うことで生成できる画像の幅が広がります。
14種類の機能があり、それぞれ得意な画像生成が異なります。
以下を参考に画像生成をお試しください。
今までの画像生成よりレベルアップすること間違いなしです!
※Mac(MPS)使いの方は、そのままではいくつか動かせない機能があります!
OpenPose
Segmentation
Scribble
Canny
コメント