2.4 KiB
2.4 KiB
Documentation
- Class name: RescaleClassifierFreeGuidance
- Category: custom_node_experiments
- Output node: False
- Repo Ref: https://github.com/comfyanonymous/ComfyUI_experiments
RescaleClassifierFreeGuidance节点的'patch'方法旨在通过引入一个重新缩放操作来修改给定的模型。它调整模型的内部配置,对分类器的引导信号应用动态缩放因子,从而允许对模型的行为进行更精细的控制。这种方法特别适用于微调模型的输出以满足特定的要求或约束。
Input types
Required
- model
- ‘model’参数对于节点至关重要,因为它代表了将由‘patch’方法修改的机器学习模型。它是主要的输入,决定了节点的操作以及修补过程后模型的后续行为。
- Comfy dtype: MODEL
- Python dtype: torch.nn.Module
- multiplier
- ‘multiplier’参数在控制应用于模型引导信号的重新缩放程度中起着关键作用。它是一个浮点数,决定了原始配置和重新缩放配置之间的平衡,直接影响修补后模型的输出。
- Comfy dtype: FLOAT
- Python dtype: float
Output types
- modified_model
- ‘modified_model’输出是将‘patch’方法应用于输入模型的结果。它是原始模型的修改版本,其引导信号的缩放因子已调整,这可能导致基于指定的乘数产生不同的结果。
- Comfy dtype: MODEL
- Python dtype: torch.nn.Module
Usage tips
- Infra type: GPU
Source code
class RescaleClassifierFreeGuidance:
@classmethod
def INPUT_TYPES(s):
return {'required': {'model': ('MODEL',), 'multiplier': ('FLOAT', {'default': 0.7, 'min': 0.0, 'max': 1.0, 'step': 0.01})}}
RETURN_TYPES = ('MODEL',)
FUNCTION = 'patch'
CATEGORY = 'custom_node_experiments'
def patch(self, model, multiplier):
def rescale_cfg(args):
cond = args['cond']
uncond = args['uncond']
cond_scale = args['cond_scale']
x_cfg = uncond + cond_scale * (cond - uncond)
ro_pos = torch.std(cond, 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 = multiplier * x_rescaled + (1.0 - multiplier) * x_cfg
return x_final
m = model.clone()
m.set_model_sampler_cfg_function(rescale_cfg)
return (m,)