From ed5736139c2b3485f6c2fd3b35d900a042e9d54f Mon Sep 17 00:00:00 2001 From: DepFA <35278260+dfaker@users.noreply.github.com> Date: Mon, 26 Sep 2022 08:02:15 +0100 Subject: pass ddim_eta and ddim_discretize --- modules/sd_samplers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'modules/sd_samplers.py') diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index 1fc9d18c..39fdca70 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -120,9 +120,9 @@ class VanillaStableDiffusionSampler: # existing code fails with cetain step counts, like 9 try: - self.sampler.make_schedule(ddim_num_steps=steps, verbose=False) + self.sampler.make_schedule(ddim_num_steps=steps, ddim_eta=opts.ddim_eta, ddim_discretize=opts.ddim_discretize, verbose=False) except Exception: - self.sampler.make_schedule(ddim_num_steps=steps+1, verbose=False) + self.sampler.make_schedule(ddim_num_steps=steps+1,ddim_eta=opts.ddim_eta, ddim_discretize=opts.ddim_discretize, verbose=False) x1 = self.sampler.stochastic_encode(x, torch.tensor([t_enc] * int(x.shape[0])).to(shared.device), noise=noise) -- cgit v1.2.3 From 2ab3d593f9091689cdef07442df0213ef3242603 Mon Sep 17 00:00:00 2001 From: DepFA <35278260+dfaker@users.noreply.github.com> Date: Mon, 26 Sep 2022 09:56:47 +0100 Subject: pass extra KDiffusionSampler function parameters --- modules/sd_samplers.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'modules/sd_samplers.py') diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index 39fdca70..2ac44f6c 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -37,6 +37,11 @@ samplers = [ ] samplers_for_img2img = [x for x in samplers if x.name != 'PLMS'] +sampler_extra_params = { + 'sample_euler':['s_churn','s_tmin','s_noise'], + 'sample_heun' :['s_churn','s_tmin','s_noise'], + 'sample_dpm_2':['s_churn','s_tmin','s_noise'], +} def setup_img2img_steps(p, steps=None): if opts.img2img_fix_steps or steps is not None: @@ -224,6 +229,7 @@ class KDiffusionSampler: self.model_wrap = k_diffusion.external.CompVisDenoiser(sd_model, quantize=shared.opts.enable_quantization) self.funcname = funcname self.func = getattr(k_diffusion.sampling, self.funcname) + self.extra_params = sampler_extra_params.get(funcname,[]) self.model_wrap_cfg = CFGDenoiser(self.model_wrap) self.sampler_noises = None self.sampler_noise_index = 0 @@ -269,7 +275,12 @@ class KDiffusionSampler: if self.sampler_noises is not None: k_diffusion.sampling.torch = TorchHijack(self) - return self.func(self.model_wrap_cfg, xi, sigma_sched, extra_args={'cond': conditioning, 'uncond': unconditional_conditioning, 'cond_scale': p.cfg_scale}, disable=False, callback=self.callback_state) + extra_params_kwargs = {} + for val in self.extra_params: + if hasattr(opts,val): + extra_params_kwargs[val] = getattr(opts,val) + + return self.func(self.model_wrap_cfg, xi, sigma_sched, extra_args={'cond': conditioning, 'uncond': unconditional_conditioning, 'cond_scale': p.cfg_scale}, disable=False, callback=self.callback_state, **extra_params_kwargs) def sample(self, p, x, conditioning, unconditional_conditioning, steps=None): steps = steps or p.steps @@ -286,7 +297,12 @@ class KDiffusionSampler: if self.sampler_noises is not None: k_diffusion.sampling.torch = TorchHijack(self) - samples = self.func(self.model_wrap_cfg, x, sigmas, extra_args={'cond': conditioning, 'uncond': unconditional_conditioning, 'cond_scale': p.cfg_scale}, disable=False, callback=self.callback_state) + extra_params_kwargs = {} + for val in self.extra_params: + if hasattr(opts,val): + extra_params_kwargs[val] = getattr(opts,val) + + samples = self.func(self.model_wrap_cfg, x, sigmas, extra_args={'cond': conditioning, 'uncond': unconditional_conditioning, 'cond_scale': p.cfg_scale}, disable=False, callback=self.callback_state, **extra_params_kwargs) return samples -- cgit v1.2.3 From a860839f1ffa827cd0a9356d6d5e9125585a66e0 Mon Sep 17 00:00:00 2001 From: DepFA <35278260+dfaker@users.noreply.github.com> Date: Mon, 26 Sep 2022 15:43:16 +0100 Subject: take extra sampler properties from StableDiffusionProcessing --- modules/sd_samplers.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'modules/sd_samplers.py') diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index 2ac44f6c..b18beb21 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -125,9 +125,9 @@ class VanillaStableDiffusionSampler: # existing code fails with cetain step counts, like 9 try: - self.sampler.make_schedule(ddim_num_steps=steps, ddim_eta=opts.ddim_eta, ddim_discretize=opts.ddim_discretize, verbose=False) + self.sampler.make_schedule(ddim_num_steps=steps, ddim_eta=p.ddim_eta, ddim_discretize=p.ddim_discretize, verbose=False) except Exception: - self.sampler.make_schedule(ddim_num_steps=steps+1,ddim_eta=opts.ddim_eta, ddim_discretize=opts.ddim_discretize, verbose=False) + self.sampler.make_schedule(ddim_num_steps=steps+1,ddim_eta=p.ddim_eta, ddim_discretize=p.ddim_discretize, verbose=False) x1 = self.sampler.stochastic_encode(x, torch.tensor([t_enc] * int(x.shape[0])).to(shared.device), noise=noise) @@ -277,8 +277,8 @@ class KDiffusionSampler: extra_params_kwargs = {} for val in self.extra_params: - if hasattr(opts,val): - extra_params_kwargs[val] = getattr(opts,val) + if hasattr(p,val): + extra_params_kwargs[val] = getattr(p,val) return self.func(self.model_wrap_cfg, xi, sigma_sched, extra_args={'cond': conditioning, 'uncond': unconditional_conditioning, 'cond_scale': p.cfg_scale}, disable=False, callback=self.callback_state, **extra_params_kwargs) @@ -299,8 +299,8 @@ class KDiffusionSampler: extra_params_kwargs = {} for val in self.extra_params: - if hasattr(opts,val): - extra_params_kwargs[val] = getattr(opts,val) + if hasattr(p,val): + extra_params_kwargs[val] = getattr(p,val) samples = self.func(self.model_wrap_cfg, x, sigmas, extra_args={'cond': conditioning, 'uncond': unconditional_conditioning, 'cond_scale': p.cfg_scale}, disable=False, callback=self.callback_state, **extra_params_kwargs) -- cgit v1.2.3 From 48d5796f0dc6a60deccb591c9a2c47d2b132d3ac Mon Sep 17 00:00:00 2001 From: DepFA <35278260+dfaker@users.noreply.github.com> Date: Mon, 26 Sep 2022 17:49:18 +0100 Subject: pass eta to tex2img sampler --- modules/sd_samplers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'modules/sd_samplers.py') diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index b18beb21..fe2d0fb2 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -154,9 +154,9 @@ class VanillaStableDiffusionSampler: # existing code fails with cetin step counts, like 9 try: - samples_ddim, _ = self.sampler.sample(S=steps, conditioning=conditioning, batch_size=int(x.shape[0]), shape=x[0].shape, verbose=False, unconditional_guidance_scale=p.cfg_scale, unconditional_conditioning=unconditional_conditioning, x_T=x) + samples_ddim, _ = self.sampler.sample(S=steps, conditioning=conditioning, batch_size=int(x.shape[0]), shape=x[0].shape, verbose=False, unconditional_guidance_scale=p.cfg_scale, unconditional_conditioning=unconditional_conditioning, x_T=x, eta=p.ddim_eta) except Exception: - samples_ddim, _ = self.sampler.sample(S=steps+1, conditioning=conditioning, batch_size=int(x.shape[0]), shape=x[0].shape, verbose=False, unconditional_guidance_scale=p.cfg_scale, unconditional_conditioning=unconditional_conditioning, x_T=x) + samples_ddim, _ = self.sampler.sample(S=steps+1, conditioning=conditioning, batch_size=int(x.shape[0]), shape=x[0].shape, verbose=False, unconditional_guidance_scale=p.cfg_scale, unconditional_conditioning=unconditional_conditioning, x_T=x, eta=p.ddim_eta) return samples_ddim -- cgit v1.2.3 From adbd26a68ff3e4fdfd410859048a3b12f2d80ff6 Mon Sep 17 00:00:00 2001 From: DepFA <35278260+dfaker@users.noreply.github.com> Date: Tue, 27 Sep 2022 04:18:10 +0100 Subject: add missing s_tmax --- modules/sd_samplers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'modules/sd_samplers.py') diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index fe2d0fb2..666ee1ee 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -38,9 +38,9 @@ samplers = [ samplers_for_img2img = [x for x in samplers if x.name != 'PLMS'] sampler_extra_params = { - 'sample_euler':['s_churn','s_tmin','s_noise'], - 'sample_heun' :['s_churn','s_tmin','s_noise'], - 'sample_dpm_2':['s_churn','s_tmin','s_noise'], + 'sample_euler':['s_churn','s_tmin','s_tmax','s_noise'], + 'sample_heun' :['s_churn','s_tmin','s_tmax','s_noise'], + 'sample_dpm_2':['s_churn','s_tmin','s_tmax','s_noise'], } def setup_img2img_steps(p, steps=None): -- cgit v1.2.3