「自分の好きなモデルでControlNetによる画像生成を行いたい」
「Stable Diffusion 1.5以外のモデルでControlNetを利用したい」
このような場合には、この記事の内容が参考になります。
この記事では、好きなモデルを利用したControlNetによる画像生成について解説しています。
本記事の内容
- ControlNet用モデルとは?
- ControlNet用モデルの作成
- ControlNet with Human Poseの導入
- ControlNet with Human Poseによる動作確認
それでは、上記に沿って解説していきます。
ControlNet用モデルとは?
ControlNetは、画像生成を進化させる技術です。
ControlNetをまだ利用していない場合は、インストールをオススメします。
もしくは、AUTOMATIC1111版web UIの拡張機能として利用することも可能です。
ControlNetにおいてデフォルトで用意されているモデルは、Stable Diffusion 1.5とほぼ同等です。
簡単に言うと、pix2pixができるようになっただけと言えます。
それでも十分スゴイんですけどね。
しかし、もっとスゴイことにControlNet用のモデルを自作可能なのです。
つまり、以下のようなモデルをControlNet用のモデルにすることができます。
Stable Diffusion 1.5をファインチューニングしたモデルなら、ControlNet用に変換できるようです。
実際、上記のChilloutMixはControlNet用モデルに変換できました。
その変換したモデルを利用すると、同じような構成・構造・ポーズで画像を生成できるようになります。
上の画像を入力して、次のような画像を生成することが可能です。
以上、ControlNet用モデルについて説明しました。
次は、ControlNet用モデルの作成を説明します。
ControlNet用モデルの作成
ControlNet用モデルの作成を説明します。
作成と言うより、変換と言った方が適切かもしれません。
その変換方法が、次のページで説明されています。
[Experiment] Transfer Control to Other SD1.X Models · Discussion #12 · lllyasviel/ControlNet
https://github.com/lllyasviel/ControlNet/discussions/12
詳細は、上記ページをご覧ください。
要約すると、次のような公式を用います。
AnythingV3_control_openpose = AnythingV3 + SD15_control_openpose – SD15
公式などと言ってますが、スクリプトが用意されています。
そのスクリプトを使えば、上記の公式とか知らなくても大丈夫です。
まず、ControlNetの最新版をGitHubから取得しましょう。
このあたりについては、次の記事で解説しています。
リポジトリルートに、「tool_transfer_control.py」を確認できます。
このファイルを利用して、モデルの変換を行います。
tool_transfer_control.py
今回は、ChilloutMixをControlNet用モデルに変換します。
次のように設定を書き換えます。
path_sd15 = './models/v1-5-pruned.ckpt' path_sd15_with_control = './models/control_sd15_openpose.pth' path_input = './models/chilloutmix_cilloutmixNi.safetensors' path_output = './models/control_chilloutmix_cilloutmixNi_openpose.pth'
もちろん、この設定通りにファイルを設置する必要があります。
v1-5-pruned.ckpt
https://huggingface.co/runwayml/stable-diffusion-v1-5/blob/main/v1-5-pruned.ckpt
control_sd15_openpose.pth
https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_openpose.pth
「path_input」には、各自の変換したいモデルを設定します。
そして、実際にそのモデルを設置する必要があります。
「path_output」が、新たに作成されるControlNet用モデルになります。
ここまで準備ができたら、次のコマンドを実行します。
python tool_transfer_control.py
処理が完了したら、「path_output」にモデルを確認できるはずです。
また、途中で次のようなエラーが出るかもしれません。
ModuleNotFoundError: No module named 'safetensors'
その場合は、次のコマンドで解決できます。
pip install safetensors
以上、ControlNet用モデルの作成を説明しました。
次は、ControlNet with Human Poseの導入を説明します。
ControlNet with Human Poseの導入
ControlNet用モデルの動作確認には、ControlNet with Human Poseを利用します。
ControlNet with Human Poseの導入がまだの場合は、ここで利用できるようにしておきましょう。
そして、前提としてControlNetの動作確認は済みとします。
詳細は、次のページをご覧ください。
Human Poseの導入に必要なことは、ファイルの入手です。
以下のページから人体姿勢推定に関するファイルを取得します。
lllyasviel/ControlNet at main
https://huggingface.co/lllyasviel/ControlNet/tree/main/annotator/ckpts
下線を引いた2ファイルをダウンロードしましょう。
ダウンロードできたら、次の場所に保存します。
なお、「control_sd15_openpose.pth」も本来はダウンロードする必要があります。
ただし、このファイルはすでにダウンロード済みです。
以上、ControlNet with Human Poseの導入を説明しました。
次は、ControlNet with Human Poseによる動作確認を説明します。
ControlNet with Human Poseによる動作確認
ControlNet with Human Poseは、「gradio_pose2image.py」を利用します。
ただし、現状ではデフォルトの状態のままです。
デフォルトとは、「control_sd15_openpose.pth」を利用する設定ということです。
ここを新たに作成したモデルのパス(path_output)に変更します。
model.load_state_dict(load_state_dict('./models/control_chilloutmix_cilloutmixNi_openpose.pth', location='cuda'))
あと、ここの部分も変更しておきます。
block.launch()
ファイルを変更できたら、次のコマンドを実行します。
python gradio_pose2image.py
次のようにコンソールに表示されれば、起動成功です。
DiffusionWrapper has 859.52 M params. making attention of type 'vanilla' with 512 in_channels Working with z of shape (1, 4, 32, 32) = 4096 dimensions. making attention of type 'vanilla' with 512 in_channels Loaded model config from [./models/cldm_v15.yaml] Loaded state_dict from [./models/control_chilloutmix_cilloutmixNi_openpose.pth] Running on local URL: http://127.0.0.1:7860 To create a public link, set `share=True` in `launch()`.
あとは、画像をアップロードしてプロンプトを入力するだけです。
そうすれば、次のように自作モデルを用いたControlNet による画像生成が可能となります。
以上、ControlNet with Human Poseによる動作確認を説明しました。