Stable Diffusion web UI(AUTOMATIC1111版)

Last-modified: 2023-07-19 (水) 15:34:42
lo08.jpg

詳細な導入方法は既に詳しいサイトがいくつもあるのでそちらに譲ります。
こことかこことかここを見るといいよ。

導入方法

  • まず、事前に必要なものとしてpythonとgitをインストール。
  • 1111版webuiのインストール
    • ZIPでインストール
      • GithubのAUTOMATIC1111のページからzipをダウンロードし、任意のフォルダに解凍。
    • GITでインストール
      • インストールしたい場所でShift+右クリックをしてPowerShell ウィンドウをここに開くをクリック(旧Win10もしくはそれ以前はコマンドウィンドウをここで開く)
      • 下のコマンドをコマンドプロンプトをコピペしてEnter
        git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
  • modelsフォルダ内の、txtファイルで「ここにckptを配置せよ」と書かれているところにWaifu等任意のモデルファイルを置く。
  • webui-user.batを起動する。プロンプト画面の処理が進むが、初回起動時のみやたらと時間がかかるので注意。
  • プロンプト画面上に「Running on local URL:」とローカルアドレスが表示されたら起動完了。
  • 任意のブラウザでアドレスを開くとブラウザ上でローカルに操作ができる。
  • 注意、program files等の" "を含んだパスにインストールすると動かなかったり、extentionが対応してなかったりする
  • 更新について
    • ZIPでインストールした場合
      • 以後、更新があった際は落としてきた最新のzipファイルを既存のフォルダに上書きしてやるだけでよい。プログラムとかまったくわからんマンにもやさしい。
    • GITでインストールした場合
      • インストールフォルダ内でShift+右クリックをしてPowerShell ウィンドウをここに開くをクリック
      • 下のコマンドをコピペしてEnter(batにしておいても良い)
        git pull origin master


注意点として

1111版はありがたいことに開発が非常に熱心で頻繁にアップデートをしてくれるのだが、それ故に頻繁な更新のできていない記事はだいたい情報が古くなっている。(上記のgigazine記事などはもはや化石である)*1
当ページもかなりおいてかれてしまっている。(正直最新の詳細な情報を求めるなら情報交換の活発なお隣を見る方が早いです…)

VRAMが4GB以下のヨワヨワなグラボで起動する場合メモリ不足になる可能性がある。
その場合、webui-user.batを編集しcommand line argumentsに--medvramと追記するとよい。
また、GTX1660系に特有のバグがあり、緑一色の画像しか出力されない場合がある。これはcommand line argumentsに--precision full --no-halfと追記すればよい。
(このあたりもアプデで修正されている可能性もあるが未確認なので注意)
参考はこちら

日本語化

「Settings」からかなり下側に「Localization」の項目がある(Ctrl+Fでページ内検索すると楽)
そこで「ja_JP」を選択してからまずページ上部「Apply settings」で設定を保存してから
ページ最下部のオレンジ色の「Restart Gradio and Refresh components」などから1111の再起動をすると日本語化される。

基本機能

画像生成の基本として使う機能

プロンプト(prompt)の入力

細かい文法が環境によって異なることがあるため1111環境の方法をまとめておく。
なお1111はバージョンアップでトークン数の上限が解放されて、いくらでも呪文を乗せることができるようになっている。
※数が多ければその分処理は重くなるが、無理に削減する必要はなくなった

プロンプトの強調と控えめ

原文

  • ()で囲むと1.1倍強く出す
    (())と重ねて囲むと乗算で強調(2重なら1.1x1.1の1.21倍)
  • []で囲むと1.1倍控えめに出す(強さを/1.1=約0.909倍で下げる)
    ※[控えめ]はネガティブプロンプトではない。要素として入れたいが強調はしたくないという場合の指定。
  • (word:1.5)と囲った中の最後尾に「:数値」を入れた場合は入力数値の倍率で強調する(1.5なら1.5倍)
    (word:0.25)と数値を1.0未満にすればその分控えめになる
    • ※控えめに使う方での[word:1]は全く別物の条件指定になるため強調控えめ指定には使えない
    • ※単体で確かめると気づくが倍率が高すぎると形にならない=機能しなくなる可能性がある。
      大きくても1.6前後が丁度良く、限度は2.0くらい。(())指定なら5重まで、限度7~8重ほど
    • ()や[]の中には((A,B,C,D))と複数の言葉を入れても問題無い
  • ※prompt内のキーワードとして()や[]を使いたい場合は\(~~\)と手前に\を入れる

LoRA指定

  • <lora:XXX:強調倍率>
    新しいバージョンにおいてLoRAを使用する際に用いられる指定呪文。(モデルへマージする作業が必要無く、別ファイルのまま使用できる)
    強調倍率はLoRAに合わせて調整した方がよい。強すぎて出力が乱れるなら0.8や0.5指定をしてもいい。
    またこれでLoRAを使用する場合は他のパラメータ、CFG Scaleなども調整が必要になってくる。

タイミング条件付きプロンプト(Prompt Editing)

[word:1]の指定はタイミングを指定したprompt条件指定に使える。原文

  • [条件前呪文:条件後呪文:条件数値]
    • 条件数値:step数かsteps割合を指定する。
      • 整数指定(8とか20とか)はその値が条件step回数になる
      • 小数指定(0.3とか0.5とか)は指定steps * 指定数値が条件step回数になる
    • 条件前呪文:stepが条件step回数になるまでprompt文として影響を与える(省略可能)
    • 条件後呪文:stepが条件step回数になった後からprompt文として影響を与える(空欄可能)
      • この呪文内にも()や[]を使っても問題ない。条件を入れ子にしても機能する
記入例実行されるprompt
[XXX:30],step30までは無,step31からXXX,
steps70で[XXX::0.5],step(70*0.5)=35まではXXX,step36から無,
[XXX:YYY:40],step40までXXX,step41からYYY,に切り替わる

※結果の呪文がそのままpromptへ挿入されるため区切っていないと前後の文章とつながってしまう
「a [XXX:YYY:30] color,」という記載の場合は
 step30まで「a XXX color,」というpromptとして扱われ
 step31以降「a YYY color,」というpromptとして扱われるとのこと

 
Prompt Editing活用例1:要素の影響のコントロール
「構図に影響を与えたくないけど、影響力の強い要素を付け加えたい」という場合に威力を発揮する
これは特にseed値固定で呪文をいじる時に重宝し構図の定まるstepを狙い[XXX:0.5]などとすれば、構図への影響を最小限にXXXの要素を加えることが狙える
※ダメな時もある。ステップ数はある程度無いと要素を書き換えきれない
 
seed値固定以外でも涙(tears)のような表情に大きく影響する要素を[teras,:0.6]のように遅らせると「ちょっと涙目」が狙える
あるいは[ポーズに影響を与える背景:映したい背景:2]ならポーズの傾向を指定しながら背景を指定することが狙える。例えばin bed:in beachとか
Prompt Editing活用例2:ネガティブへ導入
例えば「上半身が正面を向いているのに下半身が尻を向けている構図」に出会うことがある
しかしhipなどをそのままネガティブに入れると下半身の描画自体が減ってしまいやすいなど若干影響がある
そこで[hip:5]のように入れることで下半身が出る構図を容認しつつ尻が出ていたら途中から軌道修正を狙える

ネガティブ プロンプト(Negative prompt)

prompt入力フォームとは別に、すぐ下にNegative prompt入力欄があり、そこへ入力する。
ネガティブに記入した要素はなるべく回避しようとしてくれる。100%排除してくれるわけではない。
こちらの入力でも(強調)・[控えめ]の指定が可能で、特に抑えたい要素は(word:1.6)などと記入してもよい。
※通常のpromptで強調の倍率を高くしすぎると形が崩れやすいようにネガティブでも大きすぎる強調は全体に悪影響を及ぼし、出力をおかしくしてしまう。限度2程度、強くても1.6くらいが丁度よさそう?

AND指定

原論文
たぶん「promptをAND(大文字)の前後でpromptを分割しそれぞれを重ね合わせて出力する」みたいな記述法。
異なる要素を持たせた存在を並列生成できるのでは?と期待したりするが実際は互いに影響を及ぼしあうため「片方の呪文で塗りつぶされる」「別々に指定した要素が一つに混ざる」などの場合が多くて扱いは難しい。

サンプリングアルゴリズム(Sampling Method)

「学習データからどの手法(サンプラー)で構成を行うか」の選択。比較表

  • 考えないサンプラー選び
    1. てきとうに出力させて楽しむ:Euler a(初期設定)
    2. 呪文を詰めてstepsを多めに出力させる:Eulerなど

生成状況は使うメゾットだけでなくstepsやCFG Scaleによっても微妙に異なり、メゾットによって得意不得意のある印象もある。
正直実際に使ってみないとどうなるかわからない! いくつか試してマッチするものを選ぼう。
※一部メゾットは一部文法に対応していないことがある?(AND文を入れるとDDIM/PLMSが使えないなど)
(以下、おおよその印象※CFG ScaleやStepsによっても違いが出るため参考までに)

Euler a(初期設定)かなり大味。分かりやすいが、緻密さに欠けやすい
1つ1つを大きく要素を出しstepを重ねると大変化もありえるなどやや不安定
出力を煮詰めるならEuler a以外を使った方が良さそう
Euler/LMS/Heun/DPM2/LMS Karras/DPM2 Karras/DDIM/PLMS
(仮グループ)上記グループは近い構図を出しやすい傾向
低1-15程度の初期段階では違いが大きいが、20~40stepほどでほぼ出来上がり
それ以上のstepでは少しずつ詳細を詰めていく
Euler aに比べ要素が細かくなる傾向があり その分余計な描画の可能性も増える
(CFG Scaleが高いと独自性が出やすく分岐する)
Eulerこの中ではstep毎の描画が少し緩く、同stepsだとふんわりとした印象になる
(詳細を詰めるには他より多くのstepsが必要)
LMSEulerやHeun他の中間くらいでわずかに緩い
Heun
DPM2
この2つはstepが増えるほど近い絵になりやすい
Eulerに比べ早いstepで完成形に近づく
LMS Karras
DPM2 Karras
より細かい構図を出す傾向があり この中でもやや外れた構図になりやすい
DDIMconfigになんか設定がある
低steps3-5程でラフな描画の画像を作れる
※stepを増やすとこの中に似た形へ一気に近づき、L他とも近いサンプラーに
PLMSDDIMに近いがよりカッチリした表現の傾向がある
低stepのラフもカッチリする分異形さが強い
その他
DPM2 a
DPM2 a Karras
Euler aと同様、a系には緩さと不安定さがある DPM2もaの有無で出力は大きく違う
DPM fast早いが雑 stepsが結局多く必要で不安定
DPM adaptiveStepsを無視して完成形を出す特殊なサンプラーでstepsを増やしても変化がない
所要時間はEuler換算Steps90/DPM2換算Steps45くらい

なおサンプラーの中ではHeunとDPM2系列は1stepの処理がやや重く1stepの処理がEulerなどの倍くらいかかる

Restore faces/Tiling/Highres. fix

画像を生成する際に特殊な加工を行う設定

顔修復(Restore faces)

顔に補正をかける。ぼやけ気味の表情をくっきりさせる。
※顔と認識されないものは修正されない

テクスチャ生成モード(Tiling)

テクスチャ素材制作用。タイルのように並べる素材を作る。
上と下、左と右の柄を合わせて、並べるとつなぎ目がわからなくなるアレ

Highres. fix(高解像度)

512x512より大きなサイズで生成する際にヘンテコな人物の出現*2など抑制するための出力モード
更新により設定方式が異なっている。(設定で戻せる)

  • アップスケーラー:拡大時の処理方法
  • Hires steps:高解像度化するときのSteps(※「0」指定では通常のSampling stepsの数値を使う)
  • ノイズ除去強度
  • Upscale by:拡大倍率
    • 基本サイズ512x512に対してUpscale by 2なら1024x1024での出力となる
  • Resize width to
  • Resize height to

生成手順としては基本サイズで生成して→拡大して再度生成処理をかけている
それにより大きな画像でもへんてこなものの出現を抑えられる他、2度生成処理をかけているためより綺麗な出力を望める
(512x512以下の出力であっても、基本256x256→2倍拡大とした方が綺麗に出力されやすい)
512x512以下で生成しているなら必要ないはず。

シード値(seed)の操作

シード値はランダム要素の元にする値で、同じ設定で同じシード値なら同じ画像を生成できる。
初期値「-1」は生成のたびに適当な乱数を入れるため、生成のたびに異なる画像が出てくる。
シード値入力欄の右の2つのボタンはサイコロが-1を入れるボタン、
その右のボタン(リサイクルマーク)は表示中の出力画像のシード値を入れてくれるので、同じシード値を1クリックで再利用できる。

連続して多数の画像を出力する際は「1枚目のシード値から2枚目以降+1ずつする」ように生成される。
これにより多数のシード値の出力比較も手軽にできる。

img2imgやその他(extras)へ送る(Send to)

選択した生成画像の下の「Save」「Send to img2img」「Send to inpaint」「Send to extras」から画像の次の場所へ送れる。

保存(Save)

生成した画像は設定で全て自動保存されるが「Save」で選択している生成画像をtext2img/img2img問わず「Saveした画像用のフォルダ」へ保存できる。

img2imgに送る・描き直しに送る(Send to img2img/inpaint)

選択している生成画像をimg2imgタブのimg2img/inpaint入力画像へ送り、すぐimg2img/inpaintできる状態にする。
text2imgから送った場合はtext2imgの入力フォームにあるpromptも一緒に送られる。

その他タブに送る(Send to extras)

選択している生成画像をその他(Extras)タブの単一画像(single image)入力画像へ送り、すぐ処理をできる状態にする。
Extrasの処理については後述


特殊機能

機能が多すぎて全部は説明しきれない…
なのでより詳しくはこちらのページ(英語)を参照。

スクリプト(Script)メニュー

text2img/img2imgの設定項目の一番下にあるScriptのプルダウンメニューから選べる便利な特殊機能

Outpainting

img2imgタブで使える機能の一つ。
既存の画像の外側を描き広げることができる。
注意点として、Sampling Stepsを80~100、SamplerはEuler a、Denoising strengthは0.8での使用が推奨されている。
でないとよくわからないもやもやが描画されるなんてことも。

Inpainting

img2imgタブで使える機能の一つ。
既存の画像にマスクを描き込み、そのマスク内だけを描画し直しさせる機能。
指が気になるのでそこだけ描き直させる、小さめの人物の顔が潰れているので描き直させるetc.様々に使い道がある。
基本的に描き直しさせる場合はMasked contentの項目をoriginalにしておくといい。
他にぼんやりした感じに塗り直す、ランダムノイズで塗り直す、ベタ塗りで塗り直すなどもあるが殆ど使わないよね…。
また、Inpaint at full resolutionの項目にチェックを入れておくことで、マスク範囲のみをフル解像度で描き直した状態になる。
なお当然だがDenoising strengthの影響を受けるため大きく描き直させるときは大きめにすること。微調整であれば中程度にする。

Prompt matrix

呪文に"|"を入れて区切ることで、区切った範囲のワードをオンオフし出力結果がどうなるかを比較した画像を作ってくれる。
呪文の効き具合を吟味するのにとても便利。

SDアップスケール(SD upscale)

img2imgタブで使える機能の一つ。
画像をいくつかに分割した上で拡大し詳細に描き直して統合することで、元画像の解像度を高めながら縦横2倍サイズに拡大することができる。
すごい便利。
Denoising strengthを0.2くらいに抑えて使わないと全然違う絵がちぐはぐに合成された絵が出たりするので注意。

ループバック(Loopback)

img2imgタブで使える機能の一つ。
img2imgで出力された画像を元にimg2imgをかけて…という処理を指定した回数だけ繰り返しやってくれる。
元画像から処理が繰り返すうちに別物になっていく過程が楽しめる。

X/Y plot

Prompt matrixの出力項目設定版。異なる設定での出力結果の違いを比較した画像を作ってくれる。
記入ルール(英語)
とりあえず数値の入力は「最小値-最大値 [n]」(最小値~最大値までn分割して調べる)と記入するのが表の大きさを間違えなくて済む。

その他(Extras)

画像を拡大処理をして保存するための機能で、text2img/img2imgのタブから生成した画像は1ボタンでExtrasへ送れる。
拡大する際に処理を施して細部を少し綺麗にしながら拡大し、処理後の画像は自動でExtras用のフォルダへ自動保存される。
※ただしPNGのメタデータは上書きされて元の情報が失われる。そのためメタデータ内の情報を保管しておきたい場合は元のpng画像も一緒に保管しておくように。
メタデータについては下記

PNG内の情報を表示(PNG info)

text2img/img2imgで生成したPNG画像にはpromptや各種設定、seed値など生成に必要な情報がメタデータとして一緒に保存されている。これはPNG画像をテキストソフトで開いても確認はできる。
このPNG infoタブでPNG画像を入れると情報を表示し、さらに「send to text2img(img2img)」で同じ設定での再生成を行うことができる。
※text2imgで生成された画像なら同じ環境であれば全く同じ画像を生成することができるが、モデルデータが違うなど環境にズレがあると同じ画像にならない。img2imgで加工された画像もpromptなどの情報は入っているがtext2imgに入れてもそのものを出すことはできない。
※PNGのメタデータは対応していない方法で保存したり、当然他の形式で保存しても失われる。

Checkpointの結合(Checkpoint Merger)

画像生成に用いるモデルデータ[ckptファイル]をMerge、ブレンドできるタブ。
使い方は入っているckptファイルを選んで名前を決めて割合を調節して出力するだけ。

学習(Train,Textual Inversion,画風の学習)

こちらを参照

設定(Settings)

設定画面からはファイルの保存やより細かい処理に関する設定を行える。正直細かいことはわからない

ファイルの保存について

初期設定だとおそらく出力した画像はすべて自動保存される仕様になっている。
もし大量に生成するとなると結構なファイルサイズになってくるため保存フォルダはHDDなどへ変更しておいてもいいかもしれない。
画像を保存する際のファイル名に情報を入れることもできる。ファイル名ルール(英語)

UI設定ファイル(ui-config.json)

設定の初期値などはSettingsタブではなく、webuiフォルダ内にある「ui-config.json」ファイルを編集することで変更できる
特に「"txt2img/Batch count/maximum": 16,」の16を変えるとtext2imgを一度に回す回数の上限を変更できる
その他にも好みの設定があるのならこれで変更しておくと起動のたびに変更する手間を省ける

※ただしグラボ次第ではあるが画像生成はほぼフルパワーでGPUを使うことになりがちで一度に大量の生成をさせるとかなり長い時間グラボを酷使させる状態になる。
グラボの酷使を避けるなら外部ツールを用いてグラボの稼働率を多少下げておいた方がよい。稼働率をかなり下げても出力速度はわずかに下がる程度らしい。



*1 現在のバージョンでは使用するモデルファイルをmodel.ckptにリネームする必要がなく、modelsフォルダにはモデルを複数入れてよい。入れたモデルは起動後しいバージョンならページ上部からいつでも切り替えが可能であるなど環境は様変わりしている。不要なモデルを後から削除したりしても問題ない。基本的にモデルはやたらとデカく容量をくうので、使わないものは消してしまうのもいい。
*2 Stable Diffusionは512x512の学習データから画像を生成するため縦横512を超えるとその範囲外への生成で異常な生成が行われてしまう