图像、潜变量和蒙版
在处理这些数据类型时,你需要了解 torch.Tensor
类。
完整文档请见这里,或者参考 Comfy 所需关键概念的介绍。
(image,)
而不是 (image)
下方大部分概念都在示例代码片段中有说明。
图像(Images)
IMAGE 是一个形状为 [B,H,W,C]
的 torch.Tensor
,其中 C=3
。如果你需要保存或加载图像,需要在 PIL.Image
格式和张量之间进行转换——请参见下方代码片段!注意,有些 pytorch
操作提供(或期望)[B,C,H,W]
,即“通道优先”,这样做是为了计算效率。请务必小心区分。
使用 PIL.Image
如果你想加载和保存图像,你需要用到 PIL:
蒙版(Masks)
MASK 是一个形状为 [B,H,W]
的 torch.Tensor
。
在许多场景下,蒙版的值为二值(0 或 1),用于指示哪些像素需要进行特定操作。
有时蒙版的值会在 0 到 1 之间,用于表示遮罩的程度(例如调整透明度、滤镜或图层合成)。
Load Image 节点生成的蒙版
LoadImage
节点会使用图像的 alpha 通道(即“RGBA”中的“A”)来创建蒙版。
alpha 通道的值会被归一化到 [0,1](torch.float32),然后再取反。
LoadImage
节点在加载图像时总会生成一个 MASK 输出。许多图片(如 JPEG)没有 alpha 通道,这种情况下,LoadImage
会创建一个形状为 [1, 64, 64]
的默认蒙版。
理解蒙版的形状
在 numpy
、PIL
等库中,单通道图像(如蒙版)通常表示为二维数组,形状为 [H,W]
。
这意味着 C
(通道)维度是隐式的,因此与 IMAGE 类型不同,蒙版的批量通常只有三维:[B, H, W]
。
有时你会遇到 B
维被隐式 squeeze 的蒙版,变成了 [H,W]
的张量。
在使用 MASK 时,你经常需要通过 unsqueeze 匹配形状,变成 [B,H,W,C]
,其中 C=1
。
要给 C
维 unsqueeze,请用 unsqueeze(-1)
,要给 B
维 unsqueeze,请用 unsqueeze(0)
。
如果你的节点接收 MASK 作为输入,建议总是检查 len(mask.shape)
。
潜变量(Latents)
LATENT 是一个 dict
;潜变量样本通过键 samples
引用,形状为 [B,C,H,W]
,其中 C=4
。