diff --git a/b/src/diffusers/guiders/guider_utils.py b/b/src/diffusers/guiders/guider_utils.py new file mode 100644 index 000000000000..36affd1088af --- /dev/null +++ b/b/src/diffusers/guiders/guider_utils.py @@ -0,0 +1,8 @@ + """ + std_text = noise_pred_text.std(dim=list(range(1, noise_pred_text.ndim)), keepdim=True) + std_cfg = noise_cfg.std(dim=list(range(1, noise_cfg.ndim)), keepdim=True) + # Avoid division by zero when std_cfg is zero, which can produce NaN/Inf in noise predictions + std_cfg = std_cfg.clamp(min=1e-8) + # rescale the results from guidance (fixes overexposure) + noise_pred_rescaled = noise_cfg * (std_text / std_cfg) + # mix with the original results from guidance by factor guidance_rescale to avoid "plain looking" images diff --git a/src/diffusers/guiders/guider_utils.py b/src/diffusers/guiders/guider_utils.py index 7be68424c345..e1fa3a844f6c 100644 --- a/src/diffusers/guiders/guider_utils.py +++ b/src/diffusers/guiders/guider_utils.py @@ -389,6 +389,8 @@ def rescale_noise_cfg(noise_cfg, noise_pred_text, guidance_rescale=0.0): """ std_text = noise_pred_text.std(dim=list(range(1, noise_pred_text.ndim)), keepdim=True) std_cfg = noise_cfg.std(dim=list(range(1, noise_cfg.ndim)), keepdim=True) + # Avoid division by zero when std_cfg is zero, which can produce NaN/Inf in noise predictions + std_cfg = std_cfg.clamp(min=1e-8) # rescale the results from guidance (fixes overexposure) noise_pred_rescaled = noise_cfg * (std_text / std_cfg) # mix with the original results from guidance by factor guidance_rescale to avoid "plain looking" images