71 lines
2.1 KiB
Markdown
71 lines
2.1 KiB
Markdown
|
|
# Documentation
|
|
- Class name: BatchNormalizeLatent
|
|
- Category: latent/filters
|
|
- Output node: False
|
|
|
|
BatchNormalizeLatent节点对潜在表示应用批量归一化,将每个潜在样本的分布调整为标准分布,从而稳定并可能改善生成过程。
|
|
|
|
# Input types
|
|
## Required
|
|
- latents
|
|
- 需要进行归一化的潜在表示。这个输入对归一化过程至关重要,因为它直接修改了这些潜在表示的分布。
|
|
- Comfy dtype: LATENT
|
|
- Python dtype: Dict[str, torch.Tensor]
|
|
- factor
|
|
- 一个缩放因子,用于在原始潜在表示和归一化后的潜在表示之间进行插值,允许对归一化效果进行可控调整。
|
|
- Comfy dtype: FLOAT
|
|
- Python dtype: float
|
|
|
|
# Output types
|
|
- latent
|
|
- 经过归一化处理的潜在表示,根据指定的factor进行调整,以潜在地提高生成模型的性能。
|
|
- Comfy dtype: LATENT
|
|
- Python dtype: Dict[str, torch.Tensor]
|
|
|
|
|
|
## Usage tips
|
|
- Infra type: `GPU`
|
|
- Common nodes: unknown
|
|
|
|
|
|
## Source code
|
|
```python
|
|
class BatchNormalizeLatent:
|
|
def __init__(self):
|
|
pass
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {
|
|
"required": {
|
|
"latents": ("LATENT", ),
|
|
"factor": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01, "round": 0.01}),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("LATENT",)
|
|
FUNCTION = "batch_normalize"
|
|
|
|
CATEGORY = "latent/filters"
|
|
|
|
def batch_normalize(self, latents, factor):
|
|
latents_copy = copy.deepcopy(latents)
|
|
t = latents_copy["samples"] # [B x C x H x W]
|
|
|
|
t = t.movedim(0,1) # [C x B x H x W]
|
|
for c in range(t.size(0)):
|
|
c_sd, c_mean = torch.std_mean(t[c], dim=None)
|
|
|
|
for i in range(t.size(1)):
|
|
i_sd, i_mean = torch.std_mean(t[c, i], dim=None)
|
|
|
|
t[c, i] = (t[c, i] - i_mean) / i_sd
|
|
|
|
t[c] = t[c] * c_sd + c_mean
|
|
|
|
latents_copy["samples"] = torch.lerp(latents["samples"], t.movedim(1,0), factor) # [B x C x H x W]
|
|
return (latents_copy,)
|
|
|
|
```
|