よくわからないおすすめパラメーター
name | params | source |
---|---|---|
emi | s1=0.6, s2=0.4, b1=1.1, b2=1.2 | link |
emi2.0 | s1=1.2, s2=0.7, b1=1.1, b2=1.3 | |
emi2.5 | s1=1.2, s2=0.7, b1=1.1, b2=1.3 |
emi1 - float16
とても良い
emi1 - bfloat16 → float16だった
10枚1分5秒。
freeuモジュールでbfloat16はサポートされていないエラーが出る
emi1 - float16 (no freeu)
freeuを使わないと彩度が下がって画風も若干大人しくなる。10枚1分3秒。
emi1 - float32 (no freeu)
かなりいいけど3倍ぐらい時間がかかる。10枚3分6秒。あと「UserWarning: 1Torch was not compiled with flash attention」という警告が出るのが気になる。
emi1 - float32
ところどころ描き込みのクオリティがすごい。betrayer1ではfloat16を使っていたけど、今回は32にしようと思った。10枚3分3秒。
emi1 - float32 (PyTorch 2.5 (前は2.2))
PyTorchを最新にした。気のせいとは思うけどクオリティが上がった気がする。10枚3分0秒。
emi1 - float32 (PyTorch 2.5 以後同様) - emi2のfreeu謎パラメーター
気になったのでemi2の謎パラメーターをemi1に使ってみた。極端な色使いが減るのかもしれない。10枚3分5秒。
emi2 - float32
emi2。確かにちょっと変わった。良くなったという感じでもないけど。3分7秒
emi2 - float16
明らかに今までにない画風は混ざっている。10枚1分3秒。
emi2 - float16 (old freeu params)
たまたまかもしれないけど、前のparamsのほうが面白い画像は多い気がする。
emi2 - float32 (old freeu params)
今の単語が微妙なだけかもしれない。ただ特にネガティブプロンプトの磨き込みは必要そう。
emi2.5 - float16 (old freeu params)
だいぶん画風が偏るようになった。どこかの単語の問題?
emi2.5 - float16
バリエーションが少ない。
emi2.5 - float16
百枚ぐらいランダムに生成。顔がだいぶん欧米風?になっている。
emi2.5は、emi2にCosmicManという人物画像用基盤モデルをマージしたもの。全身絵の生成が安定したとのこと。
今回の用途(ポートレイト画像の生成)には微妙に不向きな感じがする。
emi2 - float16
emi2は、emiに1000枚学習データを追加して倍の時間学習させたモデル。
確かにバリエーションは増えつつ、安定もしている気がする。
emi2 - float16 (oldparams)
やっぱりよく分からないパラメーターはemi1のやつが断然いい。
emi1 - float16 (oldparams)
emi2と甲乙つけがたい。emi2のほうが安定はしている気がする。採用したいものが多いかは別。
とりあえずfloat32でも100枚ずつ作ってみて考える。
色々作ったけど、float32だと試行回数が稼げないので16の方が良い。emi2はいまいち採用したいと思うものが少ない気がする。
なので変わり映えしないけど前と同じfloat16-emi1で量産する。
b1=1.5, b2=1.6, s1=0.9, s2=0.2
freeuのreadmeにあったパラメーター。詳細さが消える。
b1=1.3, b2=1.4, s1=0.9, s2=0.2
ちょっと色味がおかしいけどよく見る感じになった。
とりあえずグリッドサーチ中
パラメーターを変えるだけでここまで変わっていくのは面白い。
グリッドサーチコードメモ
# 以下の範囲をグリッドサーチする。
# b1: 1 ≤ b1 ≤ 1.2
# b2: 1.2 ≤ b2 ≤ 1.6
# s1: 0.2 ≤ s1 ≤ 1
# s2: 0.2 ≤ s2 ≤ 1
import numpy as np
b1 = np.linspace(1, 1.2, 3)
b2 = np.linspace(1.0, 1.6, 5)
s1 = np.linspace(0.2, 1, 4)
s2 = np.linspace(0.2, 1, 4)
params_list = [
dict(b1=b1_, b2=b2_, s1=s1_, s2=s2_)
for b1_ in b1
for b2_ in b2
for s1_ in s1
for s2_ in s2
]
g = torch.Generator(device="cuda").manual_seed(42)
prompt, jender, hair = generate_prompt()
for para in tqdm(params_list):
print(para)
pipe.enable_freeu(**para)
g = g.manual_seed(42)
prompt = "anime artwork, anime style, (portrait), knight, 1girl, adult, blond hair, scarf, brave, medieval, fantasy, ((transparent))"
for i in range(4):
# prompt, jender, hair = generate_prompt()
# is_female = ("female" in jender) or ("girl" in jender) or ("woman" in jender)
filename = f"{prompt}__{image_id:05d}.png"
out_path = out_dir / "current" / (" ".join([f"{k}-{para[k]:.3f}" for k in para]) + "__" + filename)
# out_path = out_dir / "current" / (("f" if is_female else "m") + "-" + hair) / filename
out_path.parent.mkdir(exist_ok=True, parents=True)
image_id += 1
nega = "(embedding:unaestheticXLv31:0.5), photo, deformed, realism, disfigured, low contrast, bad hand"
image = pipe(
prompt=prompt,
negative_prompt=nega,
num_inference_steps=20,
generator=g
).images[0]
image.save(out_path)
emi, emi2.0, emi2.5の違いメモ
サンプルコードについては、emiはfloat16、emi2.0以降はbfloat16という違いのみ。