generated at
hallatore氏改良版DPM++ 2M Karras
彩度を少し犠牲にする代わりに滑らかな画像を出力できる

比較画像

$ ~~\stable-diffusion-webui\repositories\k-diffusion\k_diffusion\sampling.py
の一番下に次のコードをコピペする
DPM++ 2M Karras v2.py
@torch.no_grad() def sample_dpmpp_2mV2(model, x, sigmas, extra_args=None, callback=None, disable=None): """DPM-Solver++(2M) V2.""" extra_args = {} if extra_args is None else extra_args s_in = x.new_ones([x.shape[0]]) sigma_fn = lambda t: t.neg().exp() t_fn = lambda sigma: sigma.log().neg() old_denoised = None for i in trange(len(sigmas) - 1, disable=disable): denoised = model(x, sigmas[i] * s_in, **extra_args) if callback is not None: callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised}) t, t_next = t_fn(sigmas[i]), t_fn(sigmas[i + 1]) h = t_next - t if old_denoised is None or sigmas[i + 1] == 0: x = (sigma_fn(t_next) / sigma_fn(t)) * x - (-h).expm1() * denoised else: h_last = t - t_fn(sigmas[i - 1]) r = h_last / h denoised_d = (1 + 1 / (2 * r)) * denoised - (1 / (2 * r)) * old_denoised x = (sigma_fn(t_next) / sigma_fn(t)) * x - (-h).expm1() * denoised_d #old_denoised = denoised #test new sampler sigma_progress = i / len(sigmas) adjustment_factor = 1 + (0.15 * (sigma_progress * sigma_progress)) old_denoised = denoised * adjustment_factor return x
hallatore氏改良版DPM++ 2M Karras#640a9da9e2dacc000080443b 0.15 0.20 0.25 に編集して強さを変えられる(らしい)

$ ~~\stable-diffusion-webui\modules\sd_samplers_kdiffusion.py
29行目の下に以下を追加する
DPM++ 2M Karras v2
('DPM++ 2M Karras v2', 'sample_dpmpp_2mV2', ['k_dpmpp_2m_ka'], {'scheduler': 'karras'}),