prepare for Release. document update

doc: add new README/README.ja for new feature
fix: bugfix
exp/feature-each-merge
bbc_mc 2022-12-25 23:45:00 +09:00
parent 75a31b481a
commit 480debf86f
6 changed files with 179 additions and 12 deletions

View File

@ -4,6 +4,18 @@
- Implementation GUI of [Merge Block Weighted] (https://note.com/kohya_ss/n/n9a485a066d5b) idea by kohya_ss
- change some part of script to adjust for AUTO1111, basic method is not changed.
# Recent Update
- 2022/12/25: Add new feature and new UI
- Read "README" [English](README_each.md)/[日本語](README_each.ja.md)
#
# What is this
![](misc/bw01-1.png)
## How to Install

74
README_each.ja.md Normal file
View File

@ -0,0 +1,74 @@
# MWB Each - EXPERIMENTAL
[English](README_each.md)
- 追加された "MWB Each" について記載しています
- この機能は [note で公開した検討](https://note.com/bbcmc/n/n2d4765b4bd47) に使用するために制作したものです
- 一般的な情報については [README.md](README.md) を参照ください
- ****注意****
- 実験的な拡張ですので、使用にあたってはご注意ください
![](misc/each/each_00.png)
# Additional Features / 追加された機能
- [任意比率マージ](## 任意比率マージ)
- [マルチマージ用コマンド入力窓](## マルチマージ用コマンド入力窓)
- [使用可能な変数](### 使用可能な変数)
- [個人用プリセットファイル](## 個人用プリセットファイル)
## 任意比率マージ
- Merge Block Weighted GUI を拡張し、マージ時に U-Net の各レイヤーについて、モデルA / モデルB を**任意の割合で**合成できるようにします
- UI 上に表示されているのは、モデル A と モデル B の比率のみです
- 例: 仮に右の比率でマージをする場合、IN_A_00: 0.5, IN_B_00:0.3, マージ処理で行われる式は以下のようなものになります
```
result_IN_00 = 0.5 * model_A_IN_00 + 0.3 * model_B_IN_00
```
## マルチマージ用コマンド入力窓
- 一行が一マージに対応します
- 基本は UI の設定を利用しますが、変更したいところだけ変数として入力するイメージです。
- 変数同士はカンマ `,` で区切る必要があります
### 使用可能な変数
- 使用可能な変数は以下の通りです
| 変数キーワード | 説明 | 例 |
| ---------------- | ------------------------------------------------------------------------------ | --------------------------- |
| O | 出力ファイル名。サブディレクトリ指定可能。ディレクトリが無い場合・ファイルがあって上書き不可な場合、skipします。末尾にckpt記載がない場合、追加します | O=merge/test03/test-merge |
| IN_[AB]_[00-11] | INPUTブロックのマージ比率 | IN_A_01=0.12345 |
| M_00 | MIDDLEブロックのマージ比率 | |
| OUT_[AB]_[00-11] | OUTPUTブロックのマージ比率 | |
| Model_A | マージに使用するモデル名 | Model_A=sd-v1-5-pruned.ckpt |
| Model_B | マージに使用するモデル名 | Model_B=sd-v1-5-pruned.ckpt |
| base_alpha | 層別マージされない場所のマージ比率。A:(1-base_alpha), B:base_alpha です | base_alpha=1.0 |
| preset_weights | プリセット名で指定(Model B のマージ比率になります。Model A には 1-B の値が入ります) | preset_weights=GRAD_V |
- 例
```
O=merge/test04/SD15-75-IN_00, IN_A_00=0.75
Preset_Weights=ALL_A, O=merge/test06/SD15-WD13-2-8-OUT_11, OUT_A_11=0.2, OUT_B_11=0.8, Model_A=sd-v1-5-pruned, Model_B=wd-v1-3-float32
```
- 1 度に 25 段マージまではテスト済みです.
## 個人用プリセットファイル
- 個人用のプリセット保存用に、`csv/preset_own.tsv` を読み込むようにしました
- このファイルは github には置かれませんので、勝手に更新されることはありません
- 読み込みは、preset_own.tsv, preset.tsv の順番で行われます
- `preset_own.tsv` には、以下の 2 つの列が必要です(タブ区切りです)
![](misc/each/each_01.png)

81
README_each.md Normal file
View File

@ -0,0 +1,81 @@
# MBW Each - Experimental
[日本語_eachについて](README_each.ja.md)
- This document is for description of new features of **MWB Each** .
- This new feature is developed for [personal study, publish on "note"](https://note.com/bbcmc/n/n2d4765b4bd47)
- For information about general info as "How to install", go to [README.md](README.md)
**#### This is EXPERIMENTAL ####**
![](misc/each/each_00.png)
# Additional Features
- [Merge model-A and model-B by your ratio](## Merge model-A and model-B by your ratio)
- [Multi merge command window](## Multi merge command window)
- [Available variables](### Available variables)
- [Personal Preset File](## Personal Preset File)
## Merge model-A and model-B by RATIO what you want
- merge models with supplied ratio.
- Preset works to Model B ratios, i.e. `IN_B_00`.
- example: if you use IN_A_00: 0.5, IN_B_00:0.3, merge run with equation as,
```
result_IN_00 = 0.5 * model_A_IN_00 + 0.3 * model_B_IN_00
```
## Multi merge command window
- You can run multiple merge in sequence, one after the other.
- 1 line represents 1 merge.
- Basically UI settings are used, but you can enter variables only where you want to make changes.
- Variables must be separated from each other by commas `,`.
- Variables are processed by order from before.
Later specifications will overwrite them.
### Available variables
- available variables shown below,
| keywords | description | sample |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- |
| O | Output file name. Subdirectories can be specified. Skip line if there is no directory or if there is a file and it cannot be overwritten. Add `.ckpt` at end of filename if dont exist | O=merge/test03/test-merge |
| IN_[AB]_[00-11] | merge ratio of INPUT block | IN_A_01=0.12345 |
| M_00 | merge ratio of MIDDLE block | |
| OUT_[AB]_[00-11] | merge ratio of OUTPUT block | |
| Model_A | model name | Model_A=sd-v1-5-pruned.ckpt |
| Model_B | model name | Model_B=sd-v1-5-pruned.ckpt |
| base_alpha | Merge ratio of places which not merged by layer. `A:(1-base_alpha), B:base_alpha` | base_alpha=0.0 |
| preset_weights | Specify weights by preset name. Preset value go into ratio of model B, and 1-B on ratio of model A. | preset_weights=GRAD_V |
- Command sample
```
O=merge/test04/SD15-75-IN_00, IN_A_00=0.75
Preset_Weights=ALL_A, O=merge/test06/SD15-WD13-2-8-OUT_11, OUT_A_11=0.2, OUT_B_11=0.8, Model_A=sd-v1-5-pruned, Model_B=wd-v1-3-float32
```
- tested with 25 merge, one time.
## Personal Preset File
- Add `preset_own.tsv` to save your own preset
- File path is `csv/preset_own.tsv`
- This file is **OUT OF CONTROL OF GIT**, which means do not overwrite with this repository update.
- preset files is loaded as order `preset_own.tsv`, `preset.tsv`
- `preset_own.tsv` needs two column, as below
![](misc/each/each_01.png)

BIN
misc/each/each_00.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

BIN
misc/each/each_01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 557 B

View File

@ -51,18 +51,18 @@ def on_ui_tabs():
sl_IN_A_10 = gr.Slider(label="IN_A_10", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_10")
sl_IN_A_11 = gr.Slider(label="IN_A_11", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_11")
with gr.Column():
sl_IN_B_00 = gr.Slider(label="IN_B_00", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_00")
sl_IN_B_01 = gr.Slider(label="IN_B_01", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_01")
sl_IN_B_02 = gr.Slider(label="IN_B_02", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_02")
sl_IN_B_03 = gr.Slider(label="IN_B_03", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_03")
sl_IN_B_04 = gr.Slider(label="IN_B_04", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_04")
sl_IN_B_05 = gr.Slider(label="IN_B_05", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_05")
sl_IN_B_06 = gr.Slider(label="IN_B_06", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_06")
sl_IN_B_07 = gr.Slider(label="IN_B_07", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_07")
sl_IN_B_08 = gr.Slider(label="IN_B_08", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_08")
sl_IN_B_09 = gr.Slider(label="IN_B_09", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_09")
sl_IN_B_10 = gr.Slider(label="IN_B_10", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_10")
sl_IN_B_11 = gr.Slider(label="IN_B_11", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_11")
sl_IN_B_00 = gr.Slider(label="IN_B_00", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_00")
sl_IN_B_01 = gr.Slider(label="IN_B_01", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_01")
sl_IN_B_02 = gr.Slider(label="IN_B_02", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_02")
sl_IN_B_03 = gr.Slider(label="IN_B_03", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_03")
sl_IN_B_04 = gr.Slider(label="IN_B_04", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_04")
sl_IN_B_05 = gr.Slider(label="IN_B_05", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_05")
sl_IN_B_06 = gr.Slider(label="IN_B_06", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_06")
sl_IN_B_07 = gr.Slider(label="IN_B_07", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_07")
sl_IN_B_08 = gr.Slider(label="IN_B_08", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_08")
sl_IN_B_09 = gr.Slider(label="IN_B_09", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_09")
sl_IN_B_10 = gr.Slider(label="IN_B_10", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_10")
sl_IN_B_11 = gr.Slider(label="IN_B_11", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_B_11")
with gr.Column():
gr.Slider(visible=False)
gr.Slider(visible=False)