ControlNet(コントロールネット)を使うと呪文(プロンプト)以外の方法でStable Diffusionで生成される画像を制御することができます。
便利なControlNetですが機能が豊富で、どれを使って良いかわからなかったり、設定が複雑に見えるので苦手意識がある人も多いです。
本記事では複雑なControlNetの説明から要点をまとめてシンプルに解説するので参考にしてください。
ControlNetをStable Diffuison Web UIで動かすための拡張機能sd-webui-controlnetについても解説します。githubで公開されているオープンソースでstarも多いので安心です。具体的なインストール手順や使い方は記事内で解説しているので参考にしてみてください。
ControlNet(コントロールネット)とは?
ControlNetは、Stable Diffusionに追加条件を加えることでモデルを制御するためのニューラルネットワークです。Stable Diffusion Web UIの拡張機能であるControlNet for Stable Diffusion WebUIを指す場合もあります。
ControlNetは画像から抽出したポーズや構図といった特徴量をもとに、その特徴から大きく外れる画像を生成しないように画像に制限を加えます。そうすることで抽出した特徴に基づいて画像を生成することが可能になります。
ある画像を入力してポーズを維持したまま画像生成させたり、線画を入力して線を保持しながら画像を生成させることで色塗りをさせたりと多様な表現が可能になります。
ControlNetでできること
ControlNetでできることの具体例としては次のようなものがあります。
左が参照画像。右がControlNetを用いて構図を維持して生成した画像。
ControlNet特徴抽出モデルの紹介
ControlNetは様々な特徴を抽出するモデルと併用することでStable Diffusionを制御するモデルです。詳しく説明すると特徴を抽出するモデルから特徴を抽出して、その抽出した特徴を変えないように画像を生成するようにStable Diffusionモデルを制御します。
つまり画像から特徴を抽出できればどのような画像制御も実現することができます。その特徴抽出のモデルは日々追加されていて、想像しうるものはほとんど出てきております。具体的には次のようなモデルがあります。
- 姿勢を制御するOpen Pose: 姿勢制御のControlNetモデルとしてOpenPoseという物があります。OpenPoseは元々は人の姿勢を推定するモデルでしたがControlNetで利用することで、画像から姿勢を抽出して、その姿勢を保持したまま画像生成することができます。姿勢の指示は呪文(プロンプト)で行うと大変ですが、その手間が大幅に削減できます。また棒人間から画像を生成することもできるので、ポーズを用意できなくても棒人間を編集して理想のポーズを再現することができます。
- 画像から深度を抽出する Depth Model: 画像から深度を抽出して深度制御できるDepthモデルがあります。深度とは画像の奥行きのことで立体構造を理解した状態で画像を生成することができます。家具など画像でテクスチャだけを変更したい際などに使います。
- 画像からエッジを抽出するCanny Model, Soft Edge, Scribble: 画像からエッジを抽出するモデルがCanny Modelモデルです。エッジの抽出ができると画像から線画の抽出ができます。そのためイラストの色を変えたり、モノクロ画像の線画を保持したまま色塗りをすることができます。また、似たような機能としてSoft EdgeモデルやScribbleというものがあります。これらもエッジを抽出しますが、Cannyモデルと比べて主要な線だけを抽出するので、イラストのテクスチャを変換したいときなどに使われることが多いです。
ControlNetの拡張機能をStable Diffusion Web UIへ導入
ControlNetの一般的な使い方ですが、Stable Diffusion Web UIへ拡張機能を追加することで利用できます。本記事ではStable Diffusion Web UIからControlNetを利用する方法について解説します。大まかな手順としては次の手順になります。
1. ControlNetがインストールされてないことを確認
まずはじめにすでにControlNetがインストールされてないかを確認しましょう。ControlNetは汎用性の高い拡張機能のため、Stable Diffusion Web UIをインストールした際についでにインストールしていたり、なにかの拡張機能をインストールしたときに一緒にインストールしていたりと、気付かないうちにインストールされていることが多いです。なので、確認しておきましょう。
ControlNetがインストールされている場合は、トップ画面にControlNetのメニューが存在します。もしControlNetがインストール済の場合は「2.ControlNetの拡張機能をStable Diffusion Web UIへ追加」をスキップしてください。
2. ControlNetの拡張機能をStable Diffusion Web UIへ追加
拡張機能”sd-webui-controlnet”を追加していきます。githubリポジトリは次の通りです。
インストールの手順:
- Extensionsタブへ切り替え
- Install from URLタブへ切り替え
- URL for extensions’s git repositoryの欄にhttps://github.com/Mikubill/sd-webui-controlnetを入力
- Installのボタンをクリック
- Stable Diffusion Web UIを停止して、再度起動する。
起動した際に以下のようにControlNetのメニューが表示されていればインストールが成功しています。
Windowsの場合、ControlNetを読み込んだら”ModuleNotFoundError: No module named ‘pywintypes'”というエラーが発生する場合があります。その際はコマンドプロンプトにpip install pypiwin32
と入力してパッケージをインストールしてください。
3. 特徴抽出モデルのダウンロード
ControlNetの拡張機能には特徴抽出モデルは付属しておりません。そのため特徴抽出モデルをダウンロードして適切なフォルダへ配置する必要があります。
特徴抽出モデルについては以下のHagging Faceのリポジトリからダウンロードできます。
pthがモデルファイルでyamlファイルがモデル構造の定義ファイルです。
どちらも必要なファイルなのでダウンロードしましょう。
すべてのモデルをダウンロードしても良いですが容量が大きいです。時間もかかります。そのため以下の優先順位でダウンロードしてみてください。
- control_v11p_sd15_openpose.pth, control_v11p_sd15_openpose.yaml
- control_v11f1p_sd15_depth.pth,control_v11f1p_sd15_depth.yaml
- canny,scribble,softedge
- それ以外
ダウンロードしたファイルは”stable-diffusion-webui/models/ControlNet”配下に配置してください。
Control Net Open Poseを使ってみる
それではさっそくインストールしたControlNetを使っていきましょう。まずはOpenPoseを使ってみます。今回はぱくたそさんのフリー素材で正座をしている画像を利用します。同じポーズで正座をしている女子校生の画像を作ってみます。
特徴の抽出を行う
まずは特徴抽出を行いましょう。
特徴抽出した結果以下のように棒人間のような画像が生成されていれば成功です。
抽出した特徴から画像を生成する
- ControlNetのメニューの”Enable”にチェック
- 生成したい画像の設定(普段txt2imgを使うのと同様)
- 以下、サンプルの設定値です。各自好きな設定を入力してください。
- Prompt:
Photo of Japanese girl sitting on floor in classroom.school uniform
- NegativePrompt:
EasyNegative
- Width: 768、Height: 512、Batch size: 6
- 画像生成ボタンをクリック(普段txt2imgを使うのと同様)
OpenPoseによって生成された画像
入力画像:
Prompt:
Photo of Japanese girl sitting on floor in classroom.school uniform
実行結果:
入力画像とほぼ同じポーズになっていることがわかります。このようにControlNetとOpenPoseを使うことでポーズを抽出して、同じポーズで画像生成できることが確認できたと思います。
さらに詳しく解説記事が次の記事なので参考にしてみてください。
ControlNetの様々な機能
大まかな特徴の制御(顔の特徴や服装、雰囲気を保持したい場合)
構図や形状を制御する機能(同じ構図で画像を生成したい場合)
ControlNet Depthによる手の補正
コメント