MCPcopy Index your code
hub / github.com/VisionXLab/OF-Diff / p_sample_ddim

Method p_sample_ddim

ldm/models/diffusion/ddim.py:181–251  ·  view source on GitHub ↗
(self, x, c, t, index, repeat_noise=False, use_original_steps=False, quantize_denoised=False,
                      temperature=1., noise_dropout=0., score_corrector=None, corrector_kwargs=None,
                      unconditional_guidance_scale=1., unconditional_conditioning=None,
                      dynamic_threshold=None)

Source from the content-addressed store, hash-verified

179
180 @torch.no_grad()
181 def p_sample_ddim(self, x, c, t, index, repeat_noise=False, use_original_steps=False, quantize_denoised=False,
182 temperature=1., noise_dropout=0., score_corrector=None, corrector_kwargs=None,
183 unconditional_guidance_scale=1., unconditional_conditioning=None,
184 dynamic_threshold=None):
185 b, *_, device = *x.shape, x.device
186
187 if unconditional_conditioning is None or unconditional_guidance_scale == 1.:
188 model_output = self.model.apply_model(x, t, c)
189 else:
190 x_in = torch.cat([x] * 2)
191 t_in = torch.cat([t] * 2)
192 if isinstance(c, dict):
193 assert isinstance(unconditional_conditioning, dict)
194 c_in = dict()
195 for k in c:
196 if isinstance(c[k], list):
197 c_in[k] = [torch.cat([
198 unconditional_conditioning[k][i],
199 c[k][i]]) for i in range(len(c[k]))]
200 else:
201 c_in[k] = torch.cat([
202 unconditional_conditioning[k],
203 c[k]])
204 elif isinstance(c, list):
205 c_in = list()
206 assert isinstance(unconditional_conditioning, list)
207 for i in range(len(c)):
208 c_in.append(torch.cat([unconditional_conditioning[i], c[i]]))
209 else:
210 c_in = torch.cat([unconditional_conditioning, c])
211 model_uncond, model_t = self.model.apply_model(x_in, t_in, c_in).chunk(2)
212 model_output = model_uncond + unconditional_guidance_scale * (model_t - model_uncond)
213
214 if self.model.parameterization == "v":
215 e_t = self.model.predict_eps_from_z_and_v(x, t, model_output)
216 else:
217 e_t = model_output
218
219 if score_corrector is not None:
220 assert self.model.parameterization == "eps", 'not implemented'
221 e_t = score_corrector.modify_score(self.model, e_t, x, t, c, **corrector_kwargs)
222
223 alphas = self.model.alphas_cumprod if use_original_steps else self.ddim_alphas
224 alphas_prev = self.model.alphas_cumprod_prev if use_original_steps else self.ddim_alphas_prev
225 sqrt_one_minus_alphas = self.model.sqrt_one_minus_alphas_cumprod if use_original_steps else self.ddim_sqrt_one_minus_alphas
226 sigmas = self.model.ddim_sigmas_for_original_num_steps if use_original_steps else self.ddim_sigmas
227 # select parameters corresponding to the currently considered timestep
228 a_t = torch.full((b, 1, 1, 1), alphas[index], device=device)
229 a_prev = torch.full((b, 1, 1, 1), alphas_prev[index], device=device)
230 sigma_t = torch.full((b, 1, 1, 1), sigmas[index], device=device)
231 sqrt_one_minus_at = torch.full((b, 1, 1, 1), sqrt_one_minus_alphas[index],device=device)
232
233 # current prediction for x_0
234 if self.model.parameterization != "v":
235 pred_x0 = (x - sqrt_one_minus_at * e_t) / a_t.sqrt()
236 else:
237 pred_x0 = self.model.predict_start_from_z_and_v(x, t, model_output)
238

Callers 2

ddim_samplingMethod · 0.95
decodeMethod · 0.95

Calls 5

noise_likeFunction · 0.90
quantizeMethod · 0.80
apply_modelMethod · 0.45

Tested by

no test coverage detected