【WebUI 1111】実験用サンプラーRestartLab【Stable diffusion】

BDさんの記事を見て、面白そうだったのでコードを見てたらサンプラー変えれそうだったので実験用サンプラーを作ってみました。

新サンプラーのアイデア

https://note.com/br_d/n/n276380a05ecf


インストール

BOOTHからダウンロードして、zipファイルを展開します。

RestartLab.pyを WebUI の Scriptsフォルダーに移動します。

webuiを再起動してリロードすると追加されます。

 

サンプリングメソッドにRestartLabが追加されます。

Ver3.0から一つだけ追加になりました。Karrasにするには、Schedule typeで指定してください。

 

設定用UIもエクステンションの所に追加されます。


設定項目

基本設定

Preset

設定を保存できます。
フロッピーボタンで保存、ゴミ箱で削除です。
保存する時、空欄にするとパラメーターを使って自動で名前が付きます。
設定名が存在する場合は上書きされます。 

 

first weight

最初のステップ数をコントロールできます。restart stepを掛けた値が大体のステップ数になります。

掛けた値がステップ数を超える時は、1で処理されます。 

first Stepsを指定した場合は、リスタートの回数になります。


first Steps

リスタートする最初のステップ数を指定できます。
3以上にした場合は、first weightがリスタートの回数になります。
「first Steps  + (restart Step * first weight) 」

3より小さい場合の動作は実験中ですので使用しない方良いです。


restart Step

リスタートする間隔を設定します。ステップ数の半分以下にしてください。

リスタートしたくない時は、大きい値を設定してください。

 

CFG Denoiser

デフォルトのDiffusionとLCMが選択できます。

 

Sampling

Heun 、Euler系、DPM++系が選択できます。

 

Ver3.0で追加

ルンゲクッタ法を使用したサンプラー。
計算回数が多いと精度が良くなりますが遅くなります。
ただ、精度が良いからいい絵ができるわけではないのかもしれません。

RK45 1stepで5回計算する。8 Stepぐらいから使える。
RK4 1stepで4回計算する。6 Stepで20 Stepぐらいの計算時間。CFGは6ぐらいが良いかも
RK4 3/8 RK4の別の計算方法。RK4よりふんわり。
RK3 1stepで3回計算する。9Stepぐらいから使える
RK2 Ralston 1stepで2回計算する。Heunの別の計算方法。Heunよりふんわり。12Stepぐらいから使える
 

10ステップでCFG 6 。生成時間はRK4がHeunの約2倍です。



Noise

SDE系用のSDE、Euler a用のAncestral 、Brownianが選べます。

Brownian remakeは、リスタートする時にノイズを作成し直します。

ノイズが影響するのは、Euler aとSDE系です。 


Restart First Scheduler

リスタートする場合の最初のスケジューラー
AutoだとSchedule typeで選んでるスケジューラーを使用します。


Restart Next Scheduler

リスタートした時のスケジューラーです。
AutoだとSchedule typeで選んでるスケジューラーを使用します。
※WebUI ver1.10.1のKL Optimalには不具合があるので、リスタートする場合は、KL Optimal Fixを使用してください。

設定の初期値は、SetingsのRestartLabで設定できます。

 

Sampler Setting

実験的に作ったので、デフォルトか推奨設定で使用してください。

remake schedule

スケジュールを作成し直します。
img2img で使用すると、わずかに変化します。

restart Zero Fix

karrasだと発生しにくいですが、最後のステップに0が来るとエラーになる事があるので防ぎます。チェック推奨。

restart Reset log

リスタートした時、過去のデータを使用しません。
DPM++ 2Mと3Mが変化します。

Restart Point

リスタートする位置とノイズの量が変わります。
設定した値に一番近いsigmaの位置でリスタートします。
あまり変えない方が良いかも
※sigmaは、スケジューラーが作ったノイズを除去する予定リストの様なものです。

Restart PointMax

リスタートする時の最大のノイズの量を決定する値
設定した値に一番近いsigmaが最大のノイズ量になります。

sigma Min

最小のノイズの量。
Restart Pointに影響を与えます。
あまり変えない方が良いかも

sigma Max

最大のノイズの量

Turbo Scheduler Type

Turboスケジューラーの計算方法を選択できます。

Turbo Scheduler Scaling

sigma minおよびmax範囲に調整します。
オフにするとForgeと同じになりますが、
ほぼ、デフォルトのスケジューラーに
Always discard next-to-last sigmaを付けた時と同じになります。

 

Sampler Parameters

 CFG、s_churn、s_noiseの量をステップごとにコントロールできます。

ver3.0からsamplingを変更できるようになりました。

start s_churn、s_noise

最初の値です。

Change CFG、End s_churn、s_noise

途中で変える値です。
CFGは、大きく変化すると破綻しやすいのでコントロールは難しそうです。

step

値を変えたいステップ数です。1以下の場合はステップ数の割合で指定できます。
0の場合は何もしません。


change sampling Step

サンプリングメソッドを変えるステップ数を指定します。
小数点でステップ数の割合で指定できます。0.6は60%の位置
マイナスで指定するとリスタートの位置で変更されます。-1で一回目、-2で2回目

change sampling

変更するサンプリングメソッドを指定します。
相性があるので色々試してください。
DPM++ 3M SDEは破城しやすいです。

mode

変化の動作を設定できます。
OFF:処理しません。
Constant:startの値で固定します。
After:v1.0の動作と同じです。設定したステップ数の次のステップから変更します。
Linear:直線で変化します。
Slow:ゆっくり変化してだんだん早くなります。
Fast:早く変化してだんだんゆっくりになります。
Turn:Fastの動作と同じですが、最初の値に戻る動作をします。

数字の違いは、2は、なだらかな動作、6は、極端な動作をします。4はその中間です。


AutoSkip

途中で生成を止めて、止めた所から再開する事が出来ます。
プロンプトの調整や、構図を探す時に使っています。
※Batch sizeは、1以外だと動作しないかもしれません。
※Hires.fixも使ってないので動作未確認です。

SkipMode

%はステップ数の割合です。60%をよく使います。
Customは、CustomStepで止めるステップを直接設定したい時に使います。
Nextは、Restart毎に止めたい時に、
1st、2ndなどは、止めたいRestartの回数です。1stは一回目、2ndは2回目で止まります。

Endは、リスタートの位置で生成を完了して止まります。

NextEndは、次のリスタートの位置で生成を完了して止まり、リスタートの位置のSkipMetaを保存します。


Save SkipMeta to pinginfo

生成途中のデータをpnginfoに保存します。大きい画像だとpnginfoが大きくなるのでオフの方が良いかもしれません。オフの場合は、再開できません。


Use SkipMeta:

SkipMetaを使用して途中から生成します。アップスケールする時は、オフにしてください。


Make the first step 

Use SkipMetaがオン時、最初のステップにSkipMetaを使用します。VAEを通してないデータでi2iする感じです。たぶん  最後にVAE使ってると思ってたけど、ステップごとに使ってるのかも。なので言い換えると画像にする前のデータでi2iする感じです。

SkipMeta:

途中のデータです。


Batch

再開したり、アップスケールする時に使います。
 

Batch Process

処理したいファイルをドロップします。


Parameters to remove from png info

pnginfoから、pnginfoから読み込みたくない項目を選択します。
※アップスケールする時に、StepsとDenoising strenghにチェックしたりします。


Startボタン

開始します。
※オートクリックの様な処理方法なのでブラウザは開いたままにしてください。
※あと、たまに、pnginfoがsend出来なかったりで処理が止まる時があります。


Pinginfo Filter Editer


フィルターを追加できます。
削除したいPng infoの項目名を1st Filterに入力してください。
※ToolsのPinginfoボタンで動作チェックできます。
※フィルターを追加削除した時は、png Info Filterのぐるぐるボタンで更新してください。


例:
■VAEを消す
1st FilterにVAE:
それ以外は空欄

■まとめて消す
1st FilterにHypertileFix UNet:
2nd FilterにHypertileFix UNet swap size:
それ以外は空欄

■VAEを置き換える
1st FilterにVAE:
ReplaceにVAE: vae-ft-mse-840000-ema-pruned.safetensors,
それ以外は空欄



Tools

Batchで使ってるボタン等です。ここのボタンを自動でクリックしているので通常は使いません。
たまに、sourceにpnginfoをsendしたいファイルを入れて、send to img2imgボタンを使います。


参考画像

<lora:pytorch_lora_weights:0.6>
Steps: 12, Sampler: RestartLab karras, CFG scale: 2
RestartLab firstweight: 2, RestartLab cfgDenoiser: CFGDenoiserKDiffusion
steps 8は、12ステップなのでリスタートしてないです。
steps 5は、一回リスタートしています。
 


<lora:pytorch_lora_weights:0.6>

Steps: 9, Sampler: RestartLab karras, CFG scale: 2,

RestartLab steps: 4, RestartLab firstweight: 1, RestartLab cfgDenoiser: CFGDenoiserKDiffusion, RestartLab sampling: Euler a

ノイズの違いです。一回リセットしてます。




yuki

初めての作業で調べた事、困った時の解決方法を記録するブログ。 主なテーマは、パソコン、プログラミング、カメラ、DTM、スピリチュアル、化学物質過敏症

コメントを投稿

Please Select Embedded Mode To Show The Comment System.*