Contents
ControlNetの使い方
2,画像生成系
Stable Diffusionを使用する上で必須とも言われている拡張機能「ControlNet」
ここではControlNetの導入方法やできる事を説明していきます。
ControlNetの導入
まずはStable DiffusionにControlNetを導入する必要があります。

Stable Diffusionを開いて、
「拡張機能」→「URLからインストール」を開いてください。
その中のリポジトリのURLに「https://github.com/Mikubill/sd-webui-controlnet」と入力して
インストールしましょう。

インストール済みのタブを開いて、インストールした「sd-webui-controlnet」が表示されている事を確認してください。
次にControlNetの機能を使用するときに必要なファイルを準備します。
下記からダウンロードページを開きましょう。

沢山ファイルがありますが、赤枠の3つをファイルを右側のダウンロードボタンからダウンロードしてください。
ダウンロードしたファイルを
『stable-diffusion-webui』→『extensions』→『sd-webui-controlnet』→『models』
のフォルダに入れましょう。
フォルダへの入れ方はPeperSpaceやGoogleColabなどの環境によって異なります。
ファイルを入れ終わったらStable Diffusionの画面に戻って「適用してUIを再起動」をクリックしてください。

再起動して、「txt2img」の左下にControlNetの項目が増えていれば導入は成功です。
似た顔で画像生成(reference)
似た顔での画像生成をする為には「ControlNet」の中にある「reference」という機能を使用します。
referenceを使用する事で参考画像の特徴をそのままで再生成を行えます。

ControlNetの項目を開くと画像のような画面が表示されます。
この画面で行う事は
- 元になる画像をアップロード
- 有効化にチェック
- PixcelPerfectにチェック
- プリプロセッサで「reference_only」

そのまま「生成」すると同じような画像が生成されます。
もちろんすべてが完全に同一人物になる訳ではないので、何度も生成する必要はあります。

プロンプトに「Blonde hair」と入れて生成してみます。
この時にサンプリング方法も変えても大丈夫です。

このように似た顔で、髪色だけ変える事ができました。
プロンプトに入力する事で、変えたい部分だけ指定する事ができます。
色だけ変える(Canny)
referenceを使用することで色の変更もできましたが、構図や背景などが変わってしまいます。
Canny法では元となる画像の輪郭を抽出して、その輪郭を元に生成を行います。
なので構図などはそのまま色の変更だけを行いたい場合は、「Canny」を使用しましょう。

今回はこの画像を元として髪色を変更していきます。

設定は
- 「有効化」にチェック
- プリプロセッサを「canny」を選択
- モデルを「canny」の物を選択(ファイル名の前後は変わる事があるのでCannyと入っている物を選択)
この状態でプロンプトに髪色の指定だけをいれます。
今回は「red hair」と「blue hair」の2パターンで生成しました。


後ろ髪や化粧が少し元画像とは異なっていますが、構図などはほぼ同じ状態で生成されている事がわかると思います。
ポーズの指定(openpose)
画像生成をしていて、なかなか思い通りにポーズを指定できない事が多いかと思います。
プロンプトで指定できるポーズにも限度があるので、
その際にopenposeを使用する事で、ポーズの指定を行うことができます。
openposeでは元画像から一度棒人間の画像を生成して、その棒人間の形を元にして画像を生成します。
なのでポーズを固定して、その他の要素を自由に指示したい場合に使用しやすい機能です。

この画像を元として、プロンプトは「クオリティ系+1girl」ぐらいで生成してみます。

- 有効化にチェック
- プリプロセッサを「openpose」
- モデルを「openpose」用の物を選択


右が元画像から自動された棒人間画像で、左が生成結果ですね。
おおよそ元の画像と似たポーズになった事がわかると思います。
ここからあとはプロンプトで特徴を指定していく事で目的の画像を生成していきます。
深度抽出(Depth)
深度というと分かりづらいかと思いますが、簡単にいうと奥行きを検出するという機能です。
奥行きをしっかりと検出するので、シルエットを正確に参考にして画像生成することができます。


左の画像をDepth機能を使って抽出した結果が右となります。
ところどころ間違っている部分はありますが、白い部分が手前にあって黒くなればなるほど奥にありということが検出されているのがわかるかと思います。

このDepth機能を使ってランダム生成した結果がこちらです。
奥行きに強いといっても、極端な遠近は難しい為手のポーズは変わっていますが、おおよそのシルエットはしっかり再現していますね。
ただこの機能のデメリットとしては、シルエットを参考にしてしまうので
服装や髪型などを変更しようとしても、参考画像の要素がかなり強くでてしまうことですね。
複数組み合わせ(multi controlnet)
ControlNetの機能を使用していると
OpenPauseでポーズ指定しても、体のかさなりなどがうまく生成されないという悩みが出てくると思います。
そういった場合にControlNetの機能を複数組み合わせて生成する「multi controlnet」という機能を使用します。
multi controlnetといっても拡張機能を追加する必要はなく
「controlnet」がインストールされていれば使用可能です。

使用するためには「設定」の画面を開き
左の一覧にある「ControlNet」を選択し
「Multi ControlNet」の項目を増やすだけです。
あまり多くを併用することはお勧めしませんので、Multi ControlNetは3で十分かと思います。
この設定が完了したら「設定を適用」して「UIの再読み込み」をしてください。

ControlNet Unitが3つ表示されていれば完了です。
OpenPose+Depth
Multi ControlNetで一番使いやすい組み合わせとしてはOpenposeとDepthです。
Openposeだけだと、体のかさなりに弱く
Depthだけだと参考画像の影響が強すぎて好きな特徴を指定できない
という一長一短があるので組み合わせることでデメリットを抑えることができます。

組み合わせる方法はまずはUnit0にOpenposeの設定を入れましょう。
- 画像をアップロード
- 有効化にチェック
- プリプロセッサ「openpose」
- モデル「openpose用を選択」
以上の設定を行ってください。

続いてUnit1にDepthの設定をしていきましょう。
- Openposeの時と同じ画像をアップロード
- 有効化にチェック
- プリプロセッサ「Depth_leres++」
- モデル「Depth用を選択」

この状態で生成するとDepthだけのときとあまり変化はみられません。

ControlNetには「ControlWeight」という項目があり、この項目を調整することで
どれだけ画像に影響を与えるかを設定することができます。
初期状態だとControlWeightは1ですが、これだと強く影響してしまいます。
ポーズの影響はそのままにしたいのでOpenpose側のControlWeightは1で良いですが
服装や髪型を変更したいとなるとDepth側の影響を下げる必要があります。
なのでDepth側のControlWeightを0.3程度まで下げてプロンプトに「school uniform,short hair」と入れてみます。

ポーズも奥行きも参考画像に似た状態で、髪型・服装を変更することに成功しました。
ControlWeightの数値を変えることで、細かい調整が可能になるので
ぜひ試してみて下さい。

