モデルについて

Last-modified: 2024-03-31 (日) 14:09:25
新しいモデルの公開ペースが非常に速いため、
このページの更新が追いついていない可能性があります。

モデルってなんですか?

  • モデルとは学習済みのデータのことです。別名、事前学習データ。
  • Stable diffusionにおけるモデルの役割
  • checkpoint」とも呼びます。
    230719_02_SDにおけるモデルの役割.png

モデルといっても、データはさまざま。

  • Stable Diffusionのプリセットモデルでは美麗イラストを生成するのは大変難しいため、追加でモデルのファイルを入手・導入する必要があります。
    モデルによって絵柄や出しやすい構図が異なります。
    生成したい画像に併せて、適宜複数のモデルを入手&切り替えて使います。
  • Webには様々な種類のモデルデータが配布されています。
    好きなモデルを探してみましょう。
    ライセンスや使用制限に注意。

モデル入手時の注意事項

ライセンスや使用制限を必ず確認しよう!

モデルの配布ページには、使用上の注意が書いてある場合があります。

使用上の注意を必ず確認しよう!

注意内容の一例

  • 配布モデルを使用した画像の公開制約(クレジット必須、販売禁止)
  • 配布モデルの改造、再配布、販売の禁止

事前学習モデルのバージョンはどれがいいの?

これは、とても重要な選択です。概ね以下の強み・弱みがあります。

SD1.5SDXL
強み・利用人口が多くノウハウが多い
・公開されたモデルが多い
・スレに先輩が多い
・グラボのスペックがSDXLより低くても動く
・SD1.5よりも高解像度・高品質の画像が生成できる
・発展途上なので今後の進展が見込める
弱み・SDXLが公開されたため、今後の進展はあまり見込めない・要求されるグラボのスペックが高い
・発展途上なのでノウハウがまだ集積していない

簡単に言えば、SDXLの方が高解像度・高品質の画像が生成できますが、その分要求されるグラボのスペックも高めで、概ね生成のみでVRAM8GB以上、LoRAなど学習をするなら12GB以上が要求されます。
ただ、SDXLも公開から時間が経っていたり、高品質のモデルも公開され始めたりしたため、SDXL移行ユーザーも増えていますので、かつてほど手探りということはありません。
なので、どちらかというとグラボのスペックがSDXLに耐えうるかどうかというのがモデルバージョンを選ぶ上での重要な基準となってくるでしょう。

ただし、特に学習を利用する場合は、事前学習モデルに併せて作り直す必要が出てきます。
作成用ツールと学習用ツールはどちらのモデルでも利用できます*1

比較表('23/8/11時点の情報)

v1.5SDXL
リリース時期’22/10月'23/7月
パラメータ数*2約9億
text encoder 1層
約23億
text encoder 2層
U-Net層がv1.5比で3倍
基本的な学習解像度512x5121024x1024
学習モデルのファイルサイズ2~8GBbase+refiner:12GB
baseのみ6.7GB
VRAM消費量
(参考)
画像生成4GB~8GB~*3
学習(LoRA基準)6GB12GB*4
ノウハウの豊富さ◯沢山の資源がある。スレに先輩が多くて安心✕:発展途上。独学は必須
 
その他のVer.:v1.4

ほかにもv1.4,v2.0,WDがあります*5
v1.4は、v1.5と互換性有り。それ以外は互換性無し。
v2.0は、ナニとは言わないが、互換性がなく規制が強いらしく普及しなかった。
※この辺、詳しい話は用語集にでも書きましょう

拡張子が色々あるけど、どれを選べば良いの?

  • モデルのファイル形式には、主に下記があります。
    • safetensors
    • ckpt
    • Diffusersフォルダ
  • セキュリティ的な安全性の観点から、
    .safetensors形式の配布モデルをダウンロードするのがオススメです。
    モデルの読み込み速度も.ckpt形式よりわずかに高速になるようです。
  • .ckptは.safetensorsよりも古い形式で、構造上、悪意のあるスクリプトを混入するリスクが存在します。
    (参考) safetensorに関するガイド

NMKDは「.safetensors」形式のモデルからの画像生成に対応していません。
「.ckpt」「Diffusersフォルダ」「Diffusers ONNXフォルダ」のいずれかの形式を利用して画像生成を行うことになります。
安全性を考慮すると、.safetensors形式のモデルをダウンロードし、NMKDの機能を使って自分で.ckptなどの形式へ変換するのが良いでしょう。
 誘導→NMKD版の導入#使用するモデルの設定

同じモデルでも複数(fp16,fp32,pruned)あるけどどれがいいの?

  • 画像生成においてはfp16の2GBモデル一択。
    • ダウンロードが早く終わる
    • 使用モデルを変更する際や、1111起動時のモデル読み込みが早く終わる
    • 生成される画像の品質は変わらない。1111では基本的にfp16で画像生成の計算を行う。従ってfp32のモデルを利用しても得られる結果はfp16と同等になる
  • マージや学習に利用する場合
    • わからん。画像生成と違って検証に時間がかかるため不明
    • 過去としあきによると「fp16が駄目なのは本格的にモデルへ5桁以上枚規模の追加学習をするとき(要は一人でwaifu diffusionを作ろうとする時)くらい」とのこと
  • fp16とそれ以外の差。画像生成における比較検証
    検証用にwebui-user.batの引数は全て削除済
    レイヤーとして重ねて除外差分を取ったらどのピクセルも完全に#000000だった
    anything-v3-full
    (※汚損・破損トークン
    修正を実施)
    anything-v3-fp16
    容量7GB容量2GB
    anything-v3-full_fix(7GB)anything-v3-fp16-pruned(2GB)

それでもなお2GBモデルとそれ以外とで生成画像が一致しない場合

  • xformers(v0.0.19以前)の利用に起因する僅かなぶれ幅。
    速度上昇とVRAM低減の恩恵を受けられる代わりに、同一モデル・同一seedでも僅かなぶれ幅が発生するようになる。
    v0.0.20以降のxformersでは完全一致する
  • Tome(TokenMerging)の利用に起因するぶれ幅。
    画像を生成する際の速度が向上する(画像サイズが大きければ大きいほど、効果も大きくなる)代わりに、同一モデル・同一seedでもぶれ幅が発生するようになる。
    xformersよりもぶれ幅が大きい
  • モデルのトークン汚損・破損に起因する差異

fp32モデルを使うには?

  • --no-halfオプションを利用することでfp32で画像生成の計算が可能になる。
    しかし当然ながらVRAM使用量が増大する。
    またfp16に比べて有意に良好な画像品質を得られるかどうか、またそれが使用VRAM量の増大に見合うだけの価値があるかは別の話。
    なおSDXLのモデルはほぼfp16でプルーニングされている。基本使うならfp16と考えていいだろう。

モデルに関するよくある質問

モデルデータをDLしたんだけど、どこに置けばいいの?

(1111の場合)

stable-diffusion-webui\models\Stable-diffusion
人によって親フォルダ名が少し異なります。

(NMKDの場合)

\Data\models

(1111)モデルデータを指定の場所に入れたのにcheckpointリストに表示されない!

としあき!🔃を押せ!

(NMKD)モデルリストに.safetensors形式のモデルが表示されないんだけど?

2023/01/31現在、NMKDは.safetensors形式のモデルを利用しての画像生成には未対応です。しかし!
NMKD自体に.ckpt形式への変換機能が用意されているので安心してください。
🔧(Developper Tools...)を押して、Convert Models。

モデルデータを軽量化する方法

(1111の場合)

  • Checkpoint Mergerタブでモデルのfp16化とsafetensor化が可能です。
  • 加えて拡張機能Model Toolkitを利用することでプルーニング(pruned化)も可能になります。
    下記ページに簡単な使い方も書いておいたので、ぜひ一読してください。
     誘導→Extensions#Model Toolkit

(NMKDの場合)

  • 画面右上の🔧Developer Tools → Prune (Trim) Modelsでfp16化できます。

モデル切替時の読み込み時間の検証

1111起動時のモデルをBloodOrangeMixにし、1111起動後に手動で7.5GBまたは2GBのany v3に切り替えて計測。
環境はM.2 SSD (1TB, PCI-Express Gen4)。

7.5GBWeights loaded in 7.5s (load weights from disk: 0.6s, apply weights to model: 6.5s, move model to device: 0.4s).
2GBWeights loaded in 3.9s (load weights from disk: 0.1s, apply weights to model: 3.4s, move model to device: 0.4s).

1111は起動時に「前回最後に使用したモデル」を自動的に読み込むので、頻繁に利用するモデルはぜひ軽量化しておきましょう。

追加のモデルフォルダを指定する/モデルフォルダだけSSDに置く/シンボリックリンクの作成方法

モデルフォルダが肥大化して、SSDの容量が心配になってきた。そんな時はこんな解決策が考えられるよね。

  • 1111をSSDに置き、利用頻度の低い一部のモデルだけHDDに移す
  • 1111をHDDに置き、モデルフォルダだけSSDに置く

この時、利用できる方法が2つある。

  • --ckpt-dirを利用してモデルディレクトリを追加指定する。
     誘導→「webui-user.bat」を編集する-オプション
  • シンボリックリンクを利用する。
    シンボリックリンクについてもっと詳しく

    今回は「利用頻度の低い一部のモデルをHDDに移動させる」という想定で、シンボリックリンクの作成方法を紹介する。
    マージや学習の時だけしか使わない、ファイルサイズの大きなモデルとかね。
    例えば E:\hogehoge\souko でも作って
    C:\1111\models\Stable-diffusion から移動させよう。
    それが終わったらコマンドプロンプトを管理者権限で起動して

    mklink /D "C:\1111\models\Stable-diffusion\souko" "E:\hogehoge\souko"

    これでシンボリックリンクの出来上がり。
    さもC:にあるかのように見せかけできる。実際はE:のHDDにあるわけだから読み書きは遅いけどね。

    なお1111くんは下位フォルダにあるモデルも読み込んでくれるから整理に便利だよ。
    この「mklink /D」ってのがシンボリックリンク作成のコマンドなわけ。

    mklink /D "幻" "実体"

    この順で記述して使う。
    上記の例ではフォルダ丸ごとやってるけどファイル単体に対して使うことも可能。

    シンボリックリンク作成の操作をもっと楽にするツールも多数出回ってる。
    例えば圧縮解凍ソフトの一つであるExplzhをインスコすると、Windowsの右クリックメニューからシンボリックリンクを作成できるようになるから捗るよ。

モデルファイルのトークン破損チェックと修正方法

トークン破損ってなに?

症状としては、

  • 軽量化モデルで大きい画像作ると結構劣化(背景が雑になる)してる気がする。
  • モデルを2つマージし、生成されたモデルを用いて画像生成すると明らかに生成画像が暗くなる。

再発防止の処置は済んでいるが、古いモデルを使用している場合は注意が必要。

1111が標準で備えている機能の一つに「Checkpoint Merger」タブがある。複数のモデルを指定の割合で足し引きして、新しいモデルを作成する機能だ。
しかし一時期この機能に不具合があり、トークンの一部が破損・汚損したモデルが作成される場合があった。
2023/1/15の1111アプデによりこの不具合は修正された。
…が、それ以前のこの機能を用いて作成されたマージモデルは、破損・汚損している場合がある。

破損率はモデルによってピンキリ。低いモデルでは77トークン中0~1個。一方で20個以上なんてモデルもある。
fp16か32か等にもよるので、正確にはモデルファイルによる。

破損チェックと修正方法

チェックと修正の方法は色々あるが、1111を利用している場合は拡張機能Model Toolkitを導入して利用するのが手軽でオススメ。
下記ページに簡単な使い方も書いておいたので、一読してほしい。
 誘導→Extensions#Model Toolkit

他の方法としては、例えばfix_postion_ids.py等がある。

モデル紹介

下記ページを参照

自分で探したい!

  • 代表的なサイト
    • Civitai
      おそらく一番有名なモデル配布サイト
      Stable diffusion web UIの拡張でもこのサイトをフォローしている物がある。
      英語のサイトだが簡単な英語がわかるなら問題なく使えるはず。
    • Hugging Face
      モデル配布専用のサイトではなく機械学習全般を取り扱うサイト
      そのため検索性は悪い。
  • その他のサイト
    • PixAI.Art
      日本語対応サイト
      どちらかといえば画像生成&生成した画像の投稿がメインだが一部モデルはダウンロードできる。
      ここからダウンロードできないモデルも他のサイトならダウンロードできる場合もある。
      試しに生成したり、他の人が生成した画像を参考にモデルを選ぶならいいかもしれない。
    • SeaArt Ai
      日本語対応のモデル配布サイトその2
    • LibLib AI
      中国語のモデル配布サイト
      他のサイトにはない掘り出し物があるかも……?
  • ここに上げた以外にも配布サイトは無数にあるので頑張って探していいモデルを見つけよう

memo

https://wikiwiki.jp/sd_toshiaki/%E3%83%A2%E3%83%87%E3%83%AB%E8%A9%B3%E7%B4%B0


短縮URL生成

https://wikiwiki.jp/sd_toshiaki/-s/a21ec7f9

*1 主にstable diffusion web-UIとsd-scriptsのこと
*2 潜在的な表現力と同義。参考値
*3 upscalerやrefinerも使おうとする場合、8GBは厳しい
*4 8GBで動いた報告もあるけど、まだ普通に動かない人もいるので12GBとします。そもそもsd-scriptsはまだSDXL向け安定版を提供していないので、初心者に8GB OKとは言えない。Refinerや2層のtxt endoder学習も含むとなると8GBは絶望的
*5 正確には「あるみたい」です。筆者はどれも触ったことが無いです。