Skip to content

Commit 055c90f

Browse files
nipunjindalnjindalpatrickvonplaten
authored
[2737]: Add DPMSolverMultistepScheduler to CLIP guided community pipeline (#2779)
[2737]: Add DPMSolverMultistepScheduler to CLIP guided community pipelines Co-authored-by: njindal <[email protected]> Co-authored-by: Patrick von Platen <[email protected]>
1 parent 2ef9bdd commit 055c90f

File tree

2 files changed

+8
-16
lines changed

2 files changed

+8
-16
lines changed

examples/community/clip_guided_stable_diffusion.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
AutoencoderKL,
1212
DDIMScheduler,
1313
DiffusionPipeline,
14+
DPMSolverMultistepScheduler,
1415
LMSDiscreteScheduler,
1516
PNDMScheduler,
1617
UNet2DConditionModel,
@@ -63,7 +64,7 @@ def __init__(
6364
clip_model: CLIPModel,
6465
tokenizer: CLIPTokenizer,
6566
unet: UNet2DConditionModel,
66-
scheduler: Union[PNDMScheduler, LMSDiscreteScheduler, DDIMScheduler],
67+
scheduler: Union[PNDMScheduler, LMSDiscreteScheduler, DDIMScheduler, DPMSolverMultistepScheduler],
6768
feature_extractor: CLIPImageProcessor,
6869
):
6970
super().__init__()
@@ -125,17 +126,12 @@ def cond_fn(
125126
):
126127
latents = latents.detach().requires_grad_()
127128

128-
if isinstance(self.scheduler, LMSDiscreteScheduler):
129-
sigma = self.scheduler.sigmas[index]
130-
# the model input needs to be scaled to match the continuous ODE formulation in K-LMS
131-
latent_model_input = latents / ((sigma**2 + 1) ** 0.5)
132-
else:
133-
latent_model_input = latents
129+
latent_model_input = self.scheduler.scale_model_input(latents, timestep)
134130

135131
# predict the noise residual
136132
noise_pred = self.unet(latent_model_input, timestep, encoder_hidden_states=text_embeddings).sample
137133

138-
if isinstance(self.scheduler, (PNDMScheduler, DDIMScheduler)):
134+
if isinstance(self.scheduler, (PNDMScheduler, DDIMScheduler, DPMSolverMultistepScheduler)):
139135
alpha_prod_t = self.scheduler.alphas_cumprod[timestep]
140136
beta_prod_t = 1 - alpha_prod_t
141137
# compute predicted original sample from predicted noise also called

examples/community/clip_guided_stable_diffusion_img2img.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
AutoencoderKL,
1414
DDIMScheduler,
1515
DiffusionPipeline,
16+
DPMSolverMultistepScheduler,
1617
LMSDiscreteScheduler,
1718
PNDMScheduler,
1819
UNet2DConditionModel,
@@ -140,7 +141,7 @@ def __init__(
140141
clip_model: CLIPModel,
141142
tokenizer: CLIPTokenizer,
142143
unet: UNet2DConditionModel,
143-
scheduler: Union[PNDMScheduler, LMSDiscreteScheduler, DDIMScheduler],
144+
scheduler: Union[PNDMScheduler, LMSDiscreteScheduler, DDIMScheduler, DPMSolverMultistepScheduler],
144145
feature_extractor: CLIPFeatureExtractor,
145146
):
146147
super().__init__()
@@ -263,17 +264,12 @@ def cond_fn(
263264
):
264265
latents = latents.detach().requires_grad_()
265266

266-
if isinstance(self.scheduler, LMSDiscreteScheduler):
267-
sigma = self.scheduler.sigmas[index]
268-
# the model input needs to be scaled to match the continuous ODE formulation in K-LMS
269-
latent_model_input = latents / ((sigma**2 + 1) ** 0.5)
270-
else:
271-
latent_model_input = latents
267+
latent_model_input = self.scheduler.scale_model_input(latents, timestep)
272268

273269
# predict the noise residual
274270
noise_pred = self.unet(latent_model_input, timestep, encoder_hidden_states=text_embeddings).sample
275271

276-
if isinstance(self.scheduler, (PNDMScheduler, DDIMScheduler)):
272+
if isinstance(self.scheduler, (PNDMScheduler, DDIMScheduler, DPMSolverMultistepScheduler)):
277273
alpha_prod_t = self.scheduler.alphas_cumprod[timestep]
278274
beta_prod_t = 1 - alpha_prod_t
279275
# compute predicted original sample from predicted noise also called

0 commit comments

Comments
 (0)