13.StableDiffusion:Forge版のインストール & 拡張機能「ControlNet」の導入(OpenPose)

お疲れ様です。

お盆休み、如何お過ごしでしょうか。
私はStableDiffusion(以下ステディ)漬けです。

 

これまで、あまり拡張機能は無闇に入れず、
できる限りプロンプトだけで頑張ってきましたけれど、限界がきました。

OpenPose』機能は代用が利かない、ということで
ControlNet』をステディに入れましょう。

 

ControlNet(以下コントロールネット)は、OpenPoseが含まれる拡張機能です。

OpenPoseは、キャラのポーズを指定できる拡張機能です。
「こういうポーズをしてほしい」というのは、言葉だけで伝えるのが大変です。

リアルであればジェスチャーで伝えたり、実際の絵を見てもらえばよいですけど、
Img2imgのインペイントでも、元絵によっては引用が難しかったりします。

前置きが長くなっているので、早く入れましょう。

 

無理でした。※今のままでは。

 

結論から申しますと、OpenPoseの有効化を確認するまで、
メチャクチャ苦労しました。気が狂いそうです。

これも全て、私のステディに関する知識不足が故。仕方ありません。

OpenPose(以下オープンポーズ)を使う上で、
巷で共有されている基本的な情報を理解できていなかったため、
初心者の皆様と知識を共有させて頂きたく候。

 

SDXL」とは何か?

正式名は「Stable Diffusion XL(SDXL)」であり、
これはステディの別バージョンの様にも感じますが、
単なる1つのモデル名です。

私がメインで使っている「hassakuXLHentai_v13.safetensors」などと同じです。
SDXLのファイル名は「sd_xl_base_1.0.safetensors」でした。

重要なのは、SDXLの初期モデルが、既に過去の遺物であるという事です。

なぜSDXLモデルがキャーキャーもてはやされたのかと言えば、
このモデルに、ベースとなる新機能が色々と入ったからの様です。

そのため、このモデルをベースとして、
我々が使っている高性能のモデル達が生み出されていったことになります。

つまり、モデル達の親です。

「SDXLで作成しないとダメ」などと言われているのは、
SDXLがマージされて(基となって)作成されたモデルでのみ機能する
コントロールネットなどがある、という意味です。恐らく合っています。

これを理解していないと、「SDXL最新StableDiffusionです!」などという
意味不明で、訳の分からない発想になってしまいます。過去の自分を殴りたい。

改めて申しますが、SDXLは単なるモデルの一つです。今となっては不要です。

最新のコントロールネットも、SDXLの初期モデルでは使えません。
これからステディを始める人は、間違えないようにしてください。

私は上記の理解ができておらず、丸2日ほど無駄にしました。
四六時中、なぜオープンポーズは使えないのか、エラーの原因は何なのか、
原因も分からず、ネットで調べても見つからない、
検索で出るのは英語のページだらけ、翻訳してみても内容が違う、
肝心のエラー原因は、どこにも乗っていない・・・!!
発狂しそうでした。もう嫌です。

そんな苦労をして辿り着いた結論を、この記事に書きまとめておきます。

 

ここまで理解すれば、
コントロールネットのオープンポーズが使えなかった理由、
ステディでの画像作成時にエラーを出す理由が分かります。

使っているモデルが、オープンポーズ(コントロールネット)非対応

という事です。

 

私の所持しているモデル(全て商業利用可能)では、下記の様な結果でした。

▼コントロールネット可能
・anyloraCheckpoint_bakedvaeBlessedFp16.safetensors
・blazingrealdrive_V03j.safetensors
・sd_xl_refiner_1.0.safetensors
・cyberrealistic_v50.safetensors
・realisticVisionV51_v51VAE.safetensors

▼コントロールネット不可
・breakdomainxl_V06d.safetensors
・fiamixRebootHNSFW_v80.safetensors
・hassakuXLHentai_v13.safetensors
sd_xl_base_1.0.safetensors ※Stable Diffusion XL(SDXL)

 

上記を理解できておらず、コントロールネット不可のモデルを使用していた場合、
「ControlNetをインストールしたのにエラーが出て使えない!」
という出口の見えない迷路に足を踏み入れます。

お気を付けください。

 

そういえば、彼方此方のControlNetを説明しているサイトで、
モデルによって効かないという説明はあったような……。

どこのモデルなら確実に使える、という情報も添えてほしかったですね。
私の理解が乏しい訳ではないですよ。万人の理解できる説明が必要なのです。
説明が不十分なのです!(責任転嫁)

 

そんな愚痴はどうでも良く、結果的にオープンポーズは使えました。

ただ、上記で分かる通り、私の愛用するハッサク様のモデルは非対応です。

ハッサク様の最新バージョンで対応されていないかな…? 後で調べます。

 

上記の問題とは全く関係ないのですけど、
Forge版のステディを使うようになりました。

旧ステディ(無印)は基本の画像サイズが512*512、Forge版は512*640です。

Forge版は、無印の計量版という説明でした。

 

ちなみに、SDXL(モデル)は
1024*1024のサイズを生成ベースとしている様です。

SDXLがマージされた(親となった)モデルを使う場合、
1024*1024が最も綺麗に描けるという事でしょう。多分。

巨大な画像サイズで人体が崩れやすくなるのは、このためと思われます。

 

Forge版の方が生成スピードも上がるようですので、
使用するための手順を載せておきます。

 

・Forge版をインストール

参考にさせて頂いたサイトは下記です。

手順はサイトを見て頂くとして、簡単に説明すると

1.下記リンクを開く
https://github.com/lllyasviel/stable-diffusion-webui-forge?tab=readme-ov-file

2.下記の様なリンクからファイルをダウンロード
>>> Click Here to Download One-Click Package (CUDA 12.1 + Pytorch 2.3.1) <<<

3.7zファイルをダウンロードして解凍する
4.[update.bat]を実行する
5.[run.bat]を実行する

以上です。これは楽です。

当然、旧ステディ(無印)のモデルなどは引き継がれていないので、
そのままではデフォのモデルで画像が生成されます。

 

AUTOMATIC1111版のモデルをForge版に共有する

こちらも行います。

AUTOMATIC1111版が保存されている[stable-diffusion-webui]のフォルダにカーソルをあわせて、[Shft]+[右クリック]をして、[パスをコピー]を選択します。

Forge版が保存されている[webui_forge_cu121_torch21]フォルダから[webui]フォルダを開き、[webui-user.bat]ファイルにカーソルをあわせて、[右クリック]をして、メニューから[編集(E)]をクリックします。

とりあえず「webui-user.bat」をメモ帳で開きましょう。

「set COMMANDLINE_ARGS=」部分に、コピーしたパスと
「 --forge-ref-a1111-home 」を追記します。

コピーしたパスに含まれる¥(バックスラッシュ)を、/(スラッシュ)に置き換える。

set COMMANDLINE_ARGS= --forge-ref-a1111-home "C:\PNeoneo\stable-diffusion-webui"

set COMMANDLINE_ARGS= --forge-ref-a1111-home "C:/PNeoneo/stable-diffusion-webui"

こうして保存です。

Forge版ステディを起動します。

読み込めました。

以上になります。疲れました。

 

・ControlNetのインストール

オープンポーズはコントロールネットに入っていますので、インストールします。

参照サイトは忘れました。(疲労故の省略)

WebUIを開いてExtensionsタブに飛びます。
そうしたらInstall from URLをクリックして一番上のテキストボックスに
https://github.com/Mikubill/sd-webui-controlnet.git
を入力し、Installボタンをクリックします。

難しい事ではありません。

 

・OpenPoseのインストール

コントロールネットをインストール後、オープンポーズなどの
専用モデルをダウンロードしなくてはいけません。

ここで、私の陥った地獄、もといエラーなどを見てみましょう。

下記からダウンロードしたものを入れてみると、実行時にエラーが出ました。

RuntimeError: mat1 and mat2 shapes cannot be multiplied

※直訳:ランタイムエラー: mat1 と mat2 の形状を乗算できません

??

要は、ダウンロードしたファイルが、
自分の使っているモデルに合わなかったようです。

 

仕方が無いので、別の記事を参考にします。

参照させていただいた記事はコチラ。

一括でモデルをダウンロードする方法

ControlNetモデルを一括ダウンロードする方法を紹介します。

コマンドプロンプトで次のコマンドを実行します。

pip install huggingface_hub

 

↓下部

 

引き続き、コマンドプロンプトで 「Python」を実行します。

 

その後、次のコマンドを実行します。

from huggingface_hub import snapshot_download

 

 

その後、次のコマンドを実行します。

snapshot_download(repo_id="comfyanonymous/ControlNet-v1-1_fp16_safetensors", revision="main",allow_patterns="*.safetensors", local_dir="/home/user/stable-diffusion-webui/models/ControlNet")

 

ダウンロードが始まります。

 

なかなか終わらないなと思い、Enterを押していくと、
下で再度入力できる状態になりました。

改めて命令を打ち込みます。

snapshot_download(repo_id="comfyanonymous/ControlNet-v1-1_fp16_safetensors", revision="main",allow_patterns="*.safetensors", local_dir="/home/user/stable-diffusion-webui/models/ControlNet")

終わっていました。どういうことなの。。

 

ただ、ダウンロードされると思っていた場所に、ファイルがありません。

C:\【指定フォルダ】\stable-diffusion-webui\models\ControlNet

当然、ステディにも読み込めません。

 

ログを確認すると、下記の場所にダウンロードされていました。

C:\\home\\user\\stable-diffusion-webui\\models\\ControlNet

ファイルを丸ごと移動させます。

 

ステディで読み込んでみます。

ようやく出ました。

私の場合、使用するコントロールネットのモデルは下の2つだけにしました。

・control_lora_rank128_v11p_sd15_canny_fp16.safetensors

・control_lora_rank128_v11p_sd15_openpose_fp16.safetensors

フォルダ内にある他のファイルは、全てゴミ箱へ送って消去しました。

容量も大きいので、個別ダウンロードの方が時間もかからず良かったと思います。

 

ステディのコントロールネット部分に画像を突っ込み、
Preprocessor」部分の爆発マークを押し、オープンポーズのプレビューを表示します。

 

さて、当たり前の様に著作物の画像を使っていますけれど、
私的利用ですので問題は無い認識です。怒られたら謝罪して記事を消します。
著作物に関連した生成画像の配布や販売はダメ、ゼッタイ。

 

余談ですが、めぐみ〇というキャラを知っていますでしょうか。

小説家になろう」のサイトから有名となり、少し前にアニメも3期が放送された
この素晴らしい世界に祝福を!」という人気小説の主役級キャラです。

少し前に、KAD〇KAWAへのサイバー攻撃でニコ動が見れなくなり、
無料でアニメを配信していた、このすばも見られなくなりました。

9話、10話、11話をコメント付きで見れなくなりました。なんてこった。

結局、アベマで続きは見られたのですけど、
ちょっと尻すぼみだった印象なので、ある意味では良かったのかもしれません。
まさか4期まで引っ張るとは。。作画も崩壊気味だったような。

なんと現在(2024/8/12)も、アベマでは無料で見ることが可能です。

無料あと12日間視聴できます

とても面白いアニメなので、是非どうぞ。(宣伝)

abema.tv

 

なぜ〇ぐみんの話を出したかというと、私が使っているモデルで
プロンプトに「megumin」を入れると、見事に描いてくれたからです。

という事は、他にも反応するキャラがいるはずです。
モデルに登録されているキャラを探すのも、面白そうですね。

 

自分の未熟な知識では、
Lora(ステディで使用されるプロンプトの機能)で登録されているキャラは、
服装を変えることができないと思っていました。

これは「Spelai」というAIイラストのアプリで得た、誤った知識です。

Spelaiには有名なキャラが何人も登録されており、キャラを選ぶと、
選んだキャラのAIイラストが作成できます。

そこで登録されているキャラの服を変えられなかったため、
この機能がLoraであり、それにより、Lora=服がキャラ専用服で固定、という
誤った認識を持っていました。

ステディでは、〇ぐみんの服装を変えることができました。

話が脱線しているので、戻しましょう。

 

・オープンポーズの詳細設定

腰用の点は無いのですね。

首から左右の尻まで一直線ですので、
腰を曲げたい時はどうしようもないのでしょうか?

 

棒人間の編集をしたら、「ControlNetにポーズを送信」を必ず押しましょう。

これを忘れると、頑張った努力が水の泡です。(一敗)

 

認識されない部位は、不足しているパーツとして非表示になっています。

認識されていないパーツは、左の文字に取り消し線が入っています。

細かく設定し直した棒人間が下の画像になります。
※顔の各2点は、目と耳です。

指の線は、どれがどれだか分かりにくいですけれど、
左の文字部分にthumbやindex fingerなどが書かれており、
それぞれ非表示にしたりするなどで見分けられます。


編集をしたら、左上にある「ControlNetにポーズを送信」を必ず押しましょう。

 

また、設定したポーズは保存することもできます。

当然、そのポーズを読み込むこともできます。

左枠の下の方にある「ポーズコントロール」を使用してください。

作成したデータは「JSONをダウンロード」で保存し、
JSONをアップロード」で読み込みます。

読み込むと、既存の棒人間と重複してしまうため、
左枠からPerson1を削除します。

完成です。

絵に人を2人入れたい場合は、棒人間を増やして対応できそうですね。(未確認)

 

複数のモデルで生成し、反映の結果を見てみましょう。

 

cyberrealistic_v50

parameters

meguminn,
Steps: 20, Sampler: Euler a, Schedule type: Automatic, CFG scale: 7, Seed: 0, Size: 1024x1024, Model hash: a88d556f69, Model: エロ実写_cyberrealistic_v50, ControlNet 0: "Module: openpose_full, Model: control_lora_rank128_v11p_sd15_openpose_fp16 [1f2abd70], Weight: 1, Resize Mode: Crop and Resize, Processor Res: 512, Threshold A: 0.5, Threshold B: 0.5, Guidance Start: 0.0, Guidance End: 1.0, Pixel Perfect: False, Control Mode: Balanced, Hr Option: Both", Version: f2.0.1v1.10.1-previous-231-g08958f84

「meguminn」と間違えていたので、めぐみんコスになりませんでした。

体の向きも理想とは違っています。左手も怪しいですね。

 

blazingrealdrive_V03j

 

anyloraCheckpoint_bakedvaeBlessedFp16

 

棒人間のポーズは、しっかりと反映されていますね。

元絵のポーズと違っているのは、棒人間の作成に問題があるのだと思います。

また、プロンプトに元絵の情報を入れていけば、近い絵も描けると思います。

 

腰や胸に点がありませんから、2Dの棒人形では、腰をどちらに曲げているのか、
背を反っているのか、曲げているのか、分からない気がしますね。

ググってみたところ、腰に点がある棒人間の画像は見つかったりしたのですけど、
どうすれば使用できるのか説明されておらず、分かりませんでした。

「dw openpose」という新機能もあるそうですけど、
上記の点は改善されていないようですので、不要そうです。

商用利用すると250万を請求されるという話も見たので、スルーが無難でしょう。

 

ちなみに、コントロールネットが使えないハッサクモデルで
Img2imgから作成した画像は下記です。

・hassakuXLHentai_v13

parameters

1girl, asymmetrical legwear, bandaged leg, bandages, belt, black hair, black legwear, blurry, blurry background, cape, collar, depth of field, dress, eyepatch, fingerless gloves, gloves, hat, holding, holding staff, looking at viewer, megumin, open mouth, red dress, red eyes, short hair, short hair with long locks, single thighhigh, solo, staff, thighhighs, witch hat
Steps: 20, Sampler: Euler a, Schedule type: Automatic, CFG scale: 7, Seed: 2467949896, Size: 1600x1200, Model hash: 918a547849, Model: CN不可_hassakuXLHentai_v13, Denoising strength: 0.6, Version: f2.0.1v1.10.1-previous-231-g08958f84

あれ? これで良いのでは…?

どうしてオープンポーズを必須だと思ったのでしょうか……??

 

あ、そうです、これは単純な例で、漫画などで好きなポーズがあった場合、
吹き出しや他のキャラが邪魔して、好きなポーズを書けない場合が多いのです。

オープンポーズを使えば、Img2imgが読み取れない部分
(エディタで非表示になっている部位など)を、強制的に表示させて、
描いてもらう事が出来るのです!

ですので、オープンポーズは使えるに越したことはないのです!!

そういう事にしておきましょう。

コントロールを使えないモデルについては、
使えるモデルで生成した絵をImg2imgから読み込めば良さそうですね。

 

 

それでは今日の記事は、この辺で。

長文お疲れ様でした。夜ご飯を食べましょう。

 

追記:

作成しためぐみんの画像、二次創作になるので問題ないと思っていますが、
実際のところは問題ないのでしょうか。

その辺りに詳しい人がいましたら、この記事の内容が問題ないのか、
教えていただきたいです。

NGでしたら画像を消したり謝罪と賠償を行う所存です。

この辺り、同人や著作権に詳しくないと危うい部分ですね。。