rescale: fast path, rename param
This commit is contained in:
+11
-8
@@ -335,20 +335,20 @@ class ScaledGuidancePredictor(NoisePredictor):
|
||||
"min": 0.0,
|
||||
"max": 100.0,
|
||||
}),
|
||||
"rescale": ("FLOAT", {
|
||||
"default": 0.0,
|
||||
"step": 0.1,
|
||||
"min": 0.0,
|
||||
"max": 100.0,
|
||||
"rescale_multiplier": ("FLOAT", {
|
||||
"default": 0.0,
|
||||
"min": 0.0,
|
||||
"max": 1.0,
|
||||
"step": 0.01
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, guidance, baseline, guidance_scale, rescale):
|
||||
def __init__(self, guidance, baseline, guidance_scale, rescale_multiplier):
|
||||
self.lhs = guidance
|
||||
self.rhs = baseline
|
||||
self.scale = guidance_scale
|
||||
self.rescale = rescale
|
||||
self.rescale_multiplier = rescale_multiplier
|
||||
|
||||
def get_conds(self):
|
||||
return self.merge_conds(self.lhs.get_conds(), self.rhs.get_conds())
|
||||
@@ -363,13 +363,16 @@ class ScaledGuidancePredictor(NoisePredictor):
|
||||
lhs = self.lhs.predict_noise(x, sigma, model, conds, model_options, seed)
|
||||
rhs = self.rhs.predict_noise(x, sigma, model, conds, model_options, seed)
|
||||
|
||||
if self.rescale_multiplier <= 0.0:
|
||||
return lhs * self.scale + rhs
|
||||
|
||||
sigma = sigma.view(sigma.shape[:1] + (1,) * (lhs.ndim - 1))
|
||||
x_scaled = x * (1. / (sigma.square() + 1.0))
|
||||
x_cfg = x_scaled - rhs - self.scale * lhs
|
||||
ro_pos = torch.std(x_scaled - (lhs + rhs), dim=(1, 2, 3), keepdim=True)
|
||||
ro_cfg = torch.std(x_cfg, dim=(1, 2, 3), keepdim=True)
|
||||
x_rescaled = x_cfg * (ro_pos / ro_cfg)
|
||||
x_final = torch.lerp(x_cfg, x_rescaled, self.rescale)
|
||||
x_final = torch.lerp(x_cfg, x_rescaled, self.rescale_multiplier)
|
||||
|
||||
return x_scaled - x_final
|
||||
|
||||
|
||||
Reference in New Issue
Block a user