コンテンツへスキップ

画像生成AI ローカル構築のメモ

Stable Diffusion

用語の整理

個人的に触った感じでまとめているので、細かくは違うかもです。大まかに。

  • Stable Diffusion:画像生成AI を組み込んだ本体プログラム
    • stable-diffusion-webui:人気の画像生成AI をGUI で簡単に使えるようにしたソフトウェア。AUTOMATIC1111 さんが公開しているものが人気。
    • プロンプト:画像生成させたいキーワード
    • ネガティブプロンプト:画像生成させたくないキーワード
  • CHECKPOINT:画像生成のコアになるモデル。全体の画風的な部分を左右する。
  • VAE:変分オートエンコーダ。これも大事なやつ^^; 発色とか雰囲気が変わる。
  • sampling method:雰囲気変わる。
  • LoRA:画像生成AI の出力結果に影響を与えるアタッチメント的なモデル。他にもLyCORIS などがある。
    (巷にあふれるLoRA 動画はこのモデルを自作するという、ディープな内容です。)
    • DreamBooth キャプション方式:ずんだもんLoRA をつくる動画で紹介されている学習方式。stable-diffusion-webuiとは別のプログラムをインストールする必要がある。CLI。GUI 版もあるけど、みんなCLI でやっている。
    • Train-Tools:stable-diffusion-webui のプラグイン。こちらでもLoRA の学習ができます。
  • lycoris:LoRA みたいなモデル。新型。
  • Textual Inversion:LoRA みたいなモデル(だと思うんだけど、)逆にネガティブプロンプト代わりに使う。

Stable Diffusion web UI

インストール

とりあえず、グラフィックボードが必要です。VRAM 8G 以上。
私はNVIDIA CeForce GTX 1080 を使用しています。ギリVRAM 8G。

グラボがあることが前提で、あとはgit とpython が入っていれば簡単に導入できる。
それどころか入ってなくても一発インストーラーまで用意されている模様。

stable-diffusion-webui /README.md

一発インストーラーの説明。試してないから、実際どうなのかわからない。

The webui.zip is a binary distribution for people who can’t install python and git. Everything is included – just double click run.bat to launch. No requirements apart from Windows 10. NVIDIA only. After running once, should be possible to copy the installation to another computer and launch there offline.
(Google 翻訳:webui.zip は、Python と git をインストールできない人のためのバイナリ配布です。 すべてが含まれています。run.bat をダブルクリックして起動するだけです。 Windows 10 以外の要件はありません。NVIDIA のみ。 一度実行した後は、インストールを別のコンピュータにコピーして、そこでオフラインで起動できるはずです。)

https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.0.0-pre

とりあえず、バッチの方でインストールする。楽すぎる^^;
もっと敷居の高いものかと思ってたましたが、下記のように4ステップです。

Python とGit をインストールしたら、適当にフォルダを作成。
コマンドプロンプトを開いて、作成したフォルダをカレントディレクトリに指定。
Git Hub からリポジトリをクローン。

cd C:\Users\koti_\AppData\Roaming\StableDiffusion
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

git clone でコピーしたファイルの中にバッチファイルがあるので、実行します。

cd stable-diffusion-webui
webui-user.bat

一応、バージョン指定だけいれておこう。

インストールが終わって、起動までしたみたい。
起動バッチと一緒になっている(っぽい)ので、次回 stable diffusion を起動したいときも、
このバッチファイルから起動します。

URL にアクセス。

画像生成について

画像生成の準備

スペックの確認(RTX 1080 で動いてくれるだろうか。)

まず心配なのが「このグラボでちゃんと動くのか」ということです。

試しに「unimoni」のイメージを生成してみた。
ちゃんと生成されました。

解像度は1440 * 1440 px まで生成できました。

画像生成のキーワードについて

プロンプトとネガティブプロンプトがあります。
「プロンプト」は生成させたいキーワード、「ネガティブプロンプト」は生成させたくないキーワードです。

  • 順番で強弱が変わる(らしい)
  • ( )で囲むと強度アップ。最大3重 ((( prompt )))
  • [ ] で囲むとナーフ
  • AND 構文使える(らしい)
  • キーワードに「:n(コロン数字)」を追加すると、重みを指定できる。

デフォルトの状態だと、神絵は降りてこないです。神絵を学習したモデル(テンプレみたいなもの、もしくはパズルのピース、ブロックのセットみないなイメージ、、、)が要ります。

モデルは投稿サイトでダウンロードできます。

画像生成時の「モデル」について(CHECKPOINT とVAE)

「モデル」は画像生成するときのモジュールというか、データベースというか、ひな形というか、そういう感じのもの(みたいなものととらえています^^)。

CHECKPOINT モデルが変わるとガラッと絵柄が変わる!(左)
素晴らしいです。
さらにVAE も変更すると、発色なども変化します。(右)

primemix_v21

primemix_v21 + BerrysMix.vae.safetensors

primemix_v21 + kl-f8-anime2.vae

primemix_v21 + pastel-waifu-diffusion.vae.pt

ちなみにサンプリングステップ数や、サンプリングメソッド、クリップステップ数などでも変化します。
(これらはパラメータなので、ダウンロードは不要。)

サンプリングステップ:30

サンプリングメソッド:DPM++ 2M SDE Karras

Clip skip:2

さらにLORA モデルを追加で指定する。

+ LoRA
MilimNavaMerge@Tensei Shitara Slime Datta Ken (characters pack)

モデルのダウンロードと保存先フォルダ

モデルは投稿サイトで入手可能です。
(モデルごとに利用規約があるので注意が必要です。※クレジット入れてねとか、売っちゃダメとか。)

出力される絵がガラッと変わります。
下記のようなモデルが投稿されているサイトから好みの絵柄のものをダウンロードしましょう。

https://civitai.com/

ここで気を付けるのはモデルの種類。
「CHECKPOINT」か、「CHECKPOINT MARGE」というタイプのモデルを入手します。

タイプについては、どのサイトでも多分どこかに表示されていると思います。
下記のサイトだと、プレビューの左上のタグや、詳細画面を開いた時のTYPE 欄で確認できます。

プレビュー:左上

詳細の画面:Type 欄

保存先フォルダ

  • CHECKPOINT
    <StableDiffusion インストールフォルダ>\stable-diffusion-webui\models\Stable-diffusion
  • VAE
    <StableDiffusion インストールフォルダ>\stable-diffusion-webui\models\VAE
  • LoRA
    <StableDiffusion インストールフォルダ>\stable-diffusion-webui\models\Lora
  • TEXTUAL INVERSION
    <StableDiffusion インストールフォルダ>\stable-diffusion-webui\embeddings

ライセンスの確認

ダウンロードするときに、画面右下のアイコンで使用上の注意を確認します。
売っちゃダメとか、サービスに使用してはダメとか、クレジットを掲載すること、など、
モデルによってそれぞれです。

CHECK POINT ダウンロード時の注意点

たまにVAE を指定されているモデルがあるので、一緒にダウンロードして画像生成時に指定する。
VAE のリンクをクリックすればダウンロードできます。

ダウンロードしてあっても自動で適用にはならないみたいなので、なんか違うなーと思ったら確認^^

参考:VAE 設定

VAE ダウンロード先

気に入ったVAE は他のモデルにも適用してみましょう。雰囲気や、クリア具合がだいぶ変わります。
なんか生成した画像が薄いなーとか思ったら、VAE を適用してみるといいと思う。

https://civitai.com/models/47127/nabimix

BerrysMix.vae.safetensors(VAE のリンクからダウンロード)

https://civitai.com/models/6755/cetus-mix

pastel-waifu-diffusion.vae.pt(VAE のリンクからダウンロード)

https://civitai.com/models/23906/kl-f8-anime2-vae

kl-f8-anime2.vae

https://civitai.com/models/59683/counterfeit-v25-vae

Counterfeit-V2.5.vae.pt

CHECK POINT やLoRAの保存について

ダウンロードしたファイルをフォルダに入れる。
StableDiffusion\stable-diffusion-webui\models\Stable-diffusion

同名でイメージを保存しておくと、プレビュー画像に使用される。

花札マーク >CHECPOINT タブ

正直、名前だけでは把握しきれないから、プレビューされるようにしておくと便利。
LoRAも同様にできます。

モデルの切り替え方法

CHECKPOINT の設定

画面左上のプルダウンメニュー または、
花札マークのアイコン >CHECKPOINT タブの中から、ダウンロードしたモデルを選んで切り替える。

VAE 設定

絵柄にも作用する気がするけど、大きく

変分オートエンコーダ。もやもやを画像に変換する役割をもつみたい。
発色とかに大きく影響する。

Settings タブ >User interface >Quicksettings list にて「sd_vae」を追加する。

model フォルダ内のVAE に配置したVAE が画面の左上で選択できるようになる。

LoRA の設定

LoRA の設定方法は、エクステンション(Additional Networks)を使う方法もありますが、
Stable Diffusion web ui はデフォルト機能でLoRA が使えるので、そっちの手順で。

モデルのタイプでCHECPOINT が生成エンジンみたいなやつで、LORA がニュアンスみたいなやつらしい。
画像生成時にその影響は絶大。

ダウンロードして、フォルダに配置してあれば、花札マークのアイコン >LORA タブで指定できる。
プロンプトとして追加されます。

保存先フォルダ:<StableDiffusion インストールフォルダ>\stable-diffusion-webui\models\Lora

プロンプトに追加される。

これが

こうなる。

生成画像の詳細な描きこみレベルが上がるLoRA モデル。

https://civitai.com/models/58390/detail-tweaker-lora-lora

後ろに「:n(コロン 数字)」を追加すると、LoRA の影響度を変更できます。

<lora:add_detail:1.5>

TEXTUAL INVERSION タイプのモデル。

ネガティブプロンプト に指定するタイプのLoRAとは逆の学習をしたようなモデルです。
使用できるモデル(CHECKPOINT)が指定されており、使っているCHECKPOINT によっては効果がない可能性があります。

保存先フォルダ

<StableDiffusion インストールフォルダ>\stable-diffusion-webui\embeddings フォルダへ保存します。

TEXTUAL INVERSION いろいろ

指定モデルを確認して使うのがベター。

https://civitai.com/models/11772?modelVersionId=25820

https://civitai.com/models/16807?modelVersionId=40158

https://civitai.com/models/7808/easynegative

画像生成の記録

画像生成の記録。
具体例というか、実験の記録みたいな感じで書いています。
使った感じのメモや感想なので、認識の間違いとか、用語などの間違いがあると思います。
あくまで、情報共有というか、そんな感じで読んでもらえてたらうれしいです。

Train Tools(LoRA モデルの作成)

コスプレとか、キャラクターのファンアートみたいなものを作成できるLoRA モデルが自作できるということでときめいてやってみました。

何をめざしてるかにもよりますが、頑張ってLoRA作るよりは、投稿されているものをダウンロードした方が手軽だし、CHECPOINT のマージや、img2img の方が使い勝手はいいと思いました。

Train Tools の導入

LoRA は専門的なジャンルに対して集中的に学習させたようなモデルのことです。
「Train Tools」は、これを自分でも作成できるようにするモデル訓練用の拡張機能です。

導入方法は、通常のStable Diffusion webui の拡張機能インストール手順と同様です。

Extensions >install from URL でURLを指定してインストール。

なんか、パーミッションエラーが出てインストールできなかったので いったん停止してから、管理者権限でStable Diffusion webui のバッチを実行。

インストールできたみたい。

「Train Tools」のタブが追加されていました。

トレーニング開始

プロジェクトの作成

Train Tools を開き、プロジェクトと、(プロジェクトの)バージョンを作成する。
それぞれ、右のボタンを押して入力。
(このプロジェクトとバージョン名がそのままLoRA モデル名になります。)

Outputs フォルダにプロジェクトフォルダと、バージョンのフォルダが作成される。

ファイルをアップロード

トレーニング用のファイルをアップロードします。

「ここにファイルをドロップまたはクリックしてアップロード」をクリックするか、ファイルをドロップしてアップロードする。

パラメータを設定。

  1. トレーニング用の画像は、解像度とサイズをそろえておくといいです。
    (xforms の制限か、画像を正方形にしてそろえておかないとうまくアップロードできなかったです。
    最初、画像を何もせずにアップロードしてうまく動かなかったので、画像サイズはリサイズが要らないサイズにしてます。)
  2. プロンプトの入ったファイルを自動で生成。
  3. トレーニングの回数です。
    (設定しないと凄い回数を設定されて終わらないので、とりあえず10とかにしておく。)

パラメータを設定したら「Update Dateset」のボタンを押して処理を実行。
右側に画像のプレビューと、トレーニング用のフォルダが作成されます。

処理が進んでいるかは、プロンプトを見る。ちゃんとステップ後に進捗が表示されます。

フォルダを見ると、タグの入ったファイルも一緒に生成されている。(2のチェックを入れている状態)

トレーニングさせたい対象のタグを削除しておくとか、他のLoRA作成の動画で聞いたきがするけど、
とりあえずそのまま使用。

トレーニング開始。

LoRA学習するときに「xformersがインストールされていないようです」のエラーがでる場合は、
webui-user.bat 内で引数「–xformers」を指定する。

https://yuuyuublog.org/xformers_update/

インストールされた。

ちゃんと動いているように見えた矢先、エラーがでる。
ただし、これは無視していいやつ。(らしい)

学習が進んでいる感も半端ない。

最後までいけそう。

プレビューまち。

ここの値はLoRA モデルの効果を確認するためのレビュー向けのタグとか設定を入れるところ(だった。。。)
値に気を付けないとトレーニングと同じくらい時間がかかる。

  1. プロンプトと、ネガティブプロンプト
    プロットは、画像からプロンプトを生成する拡張機能から生成するといいと思う。
  2. 生成画像の解像度
  3. 画像を生成する回数とバッチサイズ
  4. LoRA の重み付け。(カンマで区切って複数入れるとその分、生成する枚数が増えます。)
  5. サンプリングステップ数(これもタスク量に影響します。)

LoRA の重み付けのパラメータ(4のフィールド)をカンマ区切りで複数指定すると、
その分プレビューの生成数が増える。

ハマり1

解像度を上げると、VRAM の問題が

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 146.00 MiB (GPU 0; 8.00 GiB total capacity; 7.23 GiB already allocated; 0 bytes free; 7.32 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

torch.cuda.OutOfMemoryError: CUDA のメモリが不足しています。 146.00 MiB を割り当てようとしました (GPU 0、合計容量 8.00 GiB、すでに割り当てられている 7.23 GiB、空き 0 バイト、PyTorch によって合計 7.32 GiB が予約されています) 予約メモリ >> 割り当てメモリの場合は、断片化を避けるために max_split_size_mb を設定してみてください。 メモリ管理と PYTORCH_CUDA_ALLOC_CONF のドキュメントを参照してください。

環境変数らしいので、バッチで追加してみた。
あと、ガベージコレクションのしきい値も。

結局、解像度を下げるという話になっていくので、仕方なく少しずつ下げていったのだけど、実績がある解像度でも失敗。
「–no-half –disable-nan-check」が原因だったらしい。
学習させたLoRA で画像が生成できなかったから追加したオプションなのですが、逆に学習時にメモリエラーの原因になる(?)という、酷いハマりで半日つぶした。

ハマり2

Base on Stable Diffusion V2 にチェックをいれると発生する。

size mismatch for mid_block.attentions.0.transformer_blocks.0.attn2.to_k.weight: copying a param with shape torch.Size([1280, 768]) from checkpoint, the shape in current model is torch.Size([1280, 1024]).
size mismatch for mid_block.attentions.0.transformer_blocks.0.attn2.to_v.weight: copying a param with shape torch.Size([1280, 768]) from checkpoint, the shape in current model is torch.Size([1280, 1024]).

Mid_block.attentions.0.transformer_blocks.0.attn2.to_k.weight のサイズが一致しません: torch.Size([1280, 768]) の形状を持つパラメータをチェックポイントからコピーしています。現在のモデルの形状は torch.Size([1280, 1024])。
Mid_block.attentions.0.transformer_blocks.0.attn2.to_v.weight のサイズが一致しません: torch.Size([1280, 768]) の形状を持つパラメータをチェックポイントからコピーしています。現在のモデルの形状は torch.Size([1280, 1024])。

はずすと解消される。

LoRA の効果について

LoRA の作り方自体が怪しいのですが、一応 効果を測定。

少ない回数でも、学習の効果が見て取れるレベルで発生します。
回数はたぶん、「汎用性」で影響するのかなと思います。

生成する構図なども影響を受けているように見える。
顔がない画像で学習したモデルは顔がない構図に寄せてくるし、立っている構図の写真で学習するとまず、立たせようとしてくる。
なんでも、学習した画像に近くしようとする感じで、ポーズや、向きなどにバリエーションがなくなる感じ。

例:おっさんの写真1枚(ミラーあり)でトレーニングする。
(注:プライバシー保護のため、目線とモザイク処理を入れております。実際は入っていません。)

このおっさんを(繰り返し20回*2)*エポック10回でトレーニングする。
エポック2回ごとにLoRA モデルを作成。

下記のプロンプトをトレーニングに使用したらしいです。(メタデータ確認)

    "ss_tag_frequency": {
        "20_test2": {
            "3d": 4,
            "asian": 4,
            "black hair": 4,
            "clock": 4,
            "closed mouth": 4,
            "looking at viewer": 4,
            "male focus": 2,
            "photo inset": 2,
            "portrait": 2,
            "realistic": 4,
            "solo": 4,
            "lips": 2,
            "roman numeral": 2,
            "wing collar": 2
        }

エポック2回ごとにLoRA モデルを保存し、効果をプレビューで確認。

LoRA モデルの影響度は左から上:0.3、0.4、0.5、0.6、下:0.7、0.8、0.9、1にしています。

エポック2回

重みが0.3程度だとほぼ影響はない。0.8あたりで、構図が学習した写真に似てくる。

エポック4回

0.3でも構図が完全に学習した写真の影響を受けている。0.5からは、背景や髪の色も写真に近づいてくる。

0.7以降は写真そのまま。

エポック6回

0.6にて、顔がおっさんになっていく。
0.7以降は写真の男性を描画しているだけなので割愛。

エポック8回

エポック6回目の効果がさらに強く。0.7以降は割愛。

エポック10回

ほとんどエポック8回目と変わっていない。

img2img

ざっくりした落書きでポーズとか指定してイメージを生成。なんちゃらポーズもこれと同じ理屈なのかな。

どうも、肌色がくすんでたので、肌だと思ってもらえなかったようだ。

構図があれば、割といい感じ。
変なフォントが発生しているのは、きっとネタ元の影響なんだろうな。

解像度を上げるとすごくきれいなんだけど、基本バグる。

いや、ブッコみはプロンプトのせいかも。
彼女は彼女の腰に侍の刀を携えて。。。みたいに彼女がたくさんでてきたから?

プロンプトだな。

とはいえ、細かいところでバグる。

路線と構図変えよう。

いい感じ。

なんか途中からアキラのテツオみたいになる傾向に。

絵に加筆した時にできる塗りムラが余計なノイズになった?

いや、このスイッチや。

塗りムラがあると原因不明の水しぶきとか発生するので、基本べた塗。
ムラに敏感なモデルとかありそうです。

かわいいけど、謎。

ムラなくしたのに。。。一人増えた。
プロンプトの指定がまずいのかも。

プロンプトに右が左がみたいなこと書いたから、複数だと思ったか?

たまにこれが出るけど、プロンプトを修正するとだいたい収まる。

modules.devices.NansException: A tensor with all NaNs was produced in VAE. This could be because there’s not enough precision to represent the picture. Try adding –no-half-vae commandline argument to fix this. Use –disable-nan-check commandline argument to disable this check.

modules.devices.NansException: すべて NaN を持つテンソルが VAE で生成されました。 これは、画像を表現するのに十分な精度がないことが原因である可能性があります。 これを修正するには、 –no-half-vae コマンドライン引数を追加してみてください。 このチェックを無効にするには、 –disable-nan-check コマンドライン引数を使用します。

モデルをマージしてみた。

メガテンみたいだ。

CHECKPOINT:
nabimix_v2.safetensors

CHECKPOINT:
CounterfeitV30_v30.safetensors

CHECKPOINT:
breakdomainanime_A0440.safetensors

VAE:
Counterfeit-V2.5.vae.pt

比較のため、元になったモデルで公開されているタグを使って画像を比較。

右下にある、コピーをクリックして詳細を取得。

これを見ると、画像生成のあと、アップスケールもしている模様。

(masterpiece, best quality), 1lady, solo, (white scaly body), halo, wings,fallen angel,
 black hair, loose waves, red eyes, (dragon, art by hermann nitsch, zdzislaw beksinski,
 dariusz zawadzki, giger), big breasts, naked
Negative prompt: 
(worst quality, low quality:1.2), negative_hand-neg, verybadimagenegative, nsfw
ENSD: 31337, 
Size: 512x768, 
Seed: 2493052212, 
Model: NabiMix_V2, 
Steps: 30, 
Version: v1.2.1, 
Sampler: DPM++ 2M Karras, 
CFG scale: 6, Clip skip: 2, 
Model hash: 06dc6ec91d, 
Denoising strength: 0.32, 
SD upscale overlap: 64, 
SD upscale upscaler: R-ESRGAN General WDN 4xV3

Hries fix にチェックをいれて、設定を追加。

こんな感じでしょうか。

R-ESRGAN General WDN 4xV3 はSetting で有効にしないと出てこない。

CLIP step の設定。
処理するレイヤーをどこまでにするかを決める。大きい数ほど無視するレイヤーが多くなる。

なんか違うなーっと思ってたら、VAEが指定されていた。
発色がよくなった。

同じ条件でマージしたモデルを使用して画像を生成してみる。
タッチがすごく違う。

img2img での比較。

ベースになったCHECPOINT(覚えている範囲)

checkpointnabimix_v2
VAEBerrysMix
sampling method左:DPM++ 2M SDE Karras、右:Euler a
解像度1920 * 1080
seed 1199008446
checkpointCounterfeitV30
VAECounterfeit-V2.5
sampling method左:DPM++ 2M SDE Karras、右:Euler a
解像度1920 * 1080
seed1199008446
checkpointbreakdomainanime_A440
VAEklF8Anime2VAE_klF8Anime2VAE.ckpt
sampling method左:DPM++ 2M SDE Karras、右:Euler a
解像度1920 * 1080
seed1199008446
checkpointtoonyou_beta3
VAEAotomatic
sampling method左:DPM++ 2M SDE Karras、右:Euler a
解像度1920 * 1080
seed1199008446

今回マージしたCHECPOINT

checkpointuniuni_mix(仮)
VAECounterfeit-V2.5
sampling method左:DPM++ 2M SDE Karras、右:Euler a
解像度1920 * 1080
seed1199008446
checkpointuniuni_mix_V2(仮)
VAECounterfeit-V2.5
sampling method左:DPM++ 2M SDE Karras、右:Euler a
解像度1920 * 1080
seed1199008446
checkpointuniuni_mix_V3(仮)
VAECounterfeit-V2.5
sampling method左:DPM++ 2M SDE Karras、右:Euler a
解像度1920 * 1080
seed1199008446

DIMM よくね?

uniuni

X/Y/Z plot

こういった比較をするために、XYZ プロットがあることを、後々知る。

XYZ軸それぞれにパラメータを指定しておくと、値のリストにしたがって順次実行してくれるというもの。
上記の例では、それぞれの値のリストを切り替えながら、総当たりで画像生成してくれる。
(あまり指定しすぎると、メモリエラーでエラーになります。)

値が数値の場合は、こんな感じでかける。

指定した値を順番に反映「1,2,3,4,5」
指定した値の範囲を指定の増分で反映「1-5(+0.5)」

(Visited 16 times, 1 visits today)

「画像生成AI ローカル構築のメモ」への1件のフィードバック

  1. ピンバック: stable-diffusion-webui 引っ越しで、起動エラーになる。 – .zapping

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です