ControlNetとは?できること。Stable Diffusion Web UIへの導入方法、応用例を徹底解説

ControlNet(コントロールネット)を使うと呪文(プロンプト)以外の方法でStable Diffusionで生成される画像を制御することができます。

便利なControlNetですが機能が豊富で、どれを使って良いかわからなかったり、設定が複雑に見えるので苦手意識がある人も多いです。

本記事では複雑なControlNetの説明から要点をまとめてシンプルに解説するので参考にしてください。

ControlNetをStable Diffuison Web UIで動かすための拡張機能sd-webui-controlnetについても解説します。githubで公開されているオープンソースでstarも多いので安心です。具体的なインストール手順や使い方は記事内で解説しているので参考にしてみてください。

GitHub - Mikubill/sd-webui-controlnet: WebUI extension for ControlNet
WebUI extension for ControlNet. Contribute to Mikubill/sd-webui-controlnet development by creating an account on GitHub.

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モデルと比べて主要な線だけを抽出するので、イラストのテクスチャを変換したいときなどに使われることが多いです。
特徴抽出の例。1: 元画像、2: OpenPose、3: Depth、4: Canny、5: Soft Edge、6: Scribble

ControlNetの拡張機能をStable Diffusion Web UIへ導入

ControlNetの一般的な使い方ですが、Stable Diffusion Web UIへ拡張機能を追加することで利用できます。本記事ではStable Diffusion Web UIからControlNetを利用する方法について解説します。大まかな手順としては次の手順になります。

インストールの手順
  1. ControlNetがインストールされてないことを確認
  2. ControlNetの拡張機能をStable Diffusion Web UIへ追加
  3. 特徴抽出モデルのダウンロード

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リポジトリは次の通りです。

GitHub - Mikubill/sd-webui-controlnet: WebUI extension for ControlNet
WebUI extension for ControlNet. Contribute to Mikubill/sd-webui-controlnet development by creating an account on GitHub.

インストールの手順:

  1. Extensionsタブへ切り替え
  2. Install from URLタブへ切り替え
  3. URL for extensions’s git repositoryの欄にhttps://github.com/Mikubill/sd-webui-controlnetを入力
  4. Installのボタンをクリック
  5. Stable Diffusion Web UIを停止して、再度起動する。

起動した際に以下のようにControlNetのメニューが表示されていればインストールが成功しています。

Windowsの場合、ControlNetを読み込んだら”ModuleNotFoundError: No module named ‘pywintypes'”というエラーが発生する場合があります。その際はコマンドプロンプトにpip install pypiwin32と入力してパッケージをインストールしてください。

3. 特徴抽出モデルのダウンロード

ControlNetの拡張機能には特徴抽出モデルは付属しておりません。そのため特徴抽出モデルをダウンロードして適切なフォルダへ配置する必要があります。

特徴抽出モデルについては以下のHagging Faceのリポジトリからダウンロードできます。

pthがモデルファイルyamlファイルがモデル構造の定義ファイルです。

どちらも必要なファイルなのでダウンロードしましょう。

lllyasviel/ControlNet-v1-1 at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

すべてのモデルをダウンロードしても良いですが容量が大きいです。時間もかかります。そのため以下の優先順位でダウンロードしてみてください。

  1. control_v11p_sd15_openpose.pth, control_v11p_sd15_openpose.yaml
  2. control_v11f1p_sd15_depth.pth,control_v11f1p_sd15_depth.yaml
  3. canny,scribble,softedge
  4. それ以外

ダウンロードしたファイルは”stable-diffusion-webui/models/ControlNet”配下に配置してください。

Control Net Open Poseを使ってみる

それではさっそくインストールしたControlNetを使っていきましょう。まずはOpenPoseを使ってみます。今回はぱくたそさんのフリー素材で正座をしている画像を利用します。同じポーズで正座をしている女子校生の画像を作ってみます。

手を添えて正座する女性|フリー素材のぱくたそ
手を添えて正座する女性の写真は女性・腰を下ろす・正座に関連する人物のフリー素材です。高解像度(6720px×4480px)の素材を無料でダウンロードできます。

特徴の抽出を行う

まずは特徴抽出を行いましょう。

特徴抽出
  1. ControlNetのメニューを開く
  2. 画像をセットする
  3. Control TypeのOpenPoseを選択
  4. 特徴抽出ボタンをクリック

特徴抽出した結果以下のように棒人間のような画像が生成されていれば成功です。

抽出した特徴から画像を生成する

  1. ControlNetのメニューの”Enable”にチェック
  2. 生成したい画像の設定(普段txt2imgを使うのと同様)
    • 以下、サンプルの設定値です。各自好きな設定を入力してください。
    • Prompt: Photo of Japanese girl sitting on floor in classroom.school uniform
    • NegativePrompt: EasyNegative
    • Width: 768、Height: 512、Batch size: 6
  3. 画像生成ボタンをクリック(普段txt2imgを使うのと同様)

OpenPoseによって生成された画像

入力画像:

Prompt:

Photo of Japanese girl sitting on floor in classroom.school uniform

実行結果:

入力画像とほぼ同じポーズになっていることがわかります。このようにControlNetとOpenPoseを使うことでポーズを抽出して、同じポーズで画像生成できることが確認できたと思います。

さらに詳しく解説記事が次の記事なので参考にしてみてください。

ControlNetの様々な機能

大まかな特徴の制御(顔の特徴や服装、雰囲気を保持したい場合)

構図や形状を制御する機能(同じ構図で画像を生成したい場合)

ControlNet Depthによる手の補正

線画抽出系(色塗り、実写化、イラスト化に便利)

その他の機能について

コメント