BDさんの記事を見て、面白そうだったのでコードを見てたらサンプラー変えれそうだったので実験用サンプラーを作ってみました。
新サンプラーのアイデア
インストール
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: 9, Sampler: RestartLab karras, CFG scale: 2,
RestartLab steps: 4, RestartLab firstweight: 1, RestartLab cfgDenoiser: CFGDenoiserKDiffusion, RestartLab sampling: Euler a
ノイズの違いです。一回リセットしてます。