Diffusers 文档

SD3ControlNetModel

Hugging Face's logo
加入 Hugging Face 社区

并获取增强文档体验

以开始使用

SD3ControlNetModel

SD3ControlNetModel 是 ControlNet 在 Stable Diffusion 3 中的实现。

ControlNet 模型在 为文本到图像扩散模型添加条件控制 中被提出,由 Lvmin Zhang、Anyi Rao、Maneesh Agrawala 提出。它通过将模型条件化为其他输入,如边缘图、深度图、分割图和关键点,来实现对文本到图像生成的更大程度控制。

论文中的摘要是

我们介绍了 ControlNet,一种神经网络架构,用于向大型预训练文本到图像扩散模型添加空间条件控制。ControlNet 锁定生产就绪的大型扩散模型,并使用数百万图像预训练的深度、鲁棒编码层作为强力骨干,来学习各种条件控制。神经架构与“零卷积”(零初始化卷积层)相连,这些卷积层逐渐从零增长参数,确保没有有害噪声会影响微调。我们测试了各种条件控制,例如边缘、深度、分割、人体姿态等,并使用 Stable Diffusion,使用单个或多个条件,有或没有提示。我们表明,ControlNet 的训练对于小(<50k)和大(>1m)数据集来说都是稳健的。大量结果表明,ControlNet 可以促进控制图像扩散模型的更广泛应用。

从原始格式加载

默认情况下,SD3ControlNetModel 应使用 from_pretrained() 加载。

from diffusers import StableDiffusion3ControlNetPipeline
from diffusers.models import SD3ControlNetModel, SD3MultiControlNetModel

controlnet = SD3ControlNetModel.from_pretrained("InstantX/SD3-Controlnet-Canny")
pipe = StableDiffusion3ControlNetPipeline.from_pretrained("stabilityai/stable-diffusion-3-medium-diffusers", controlnet=controlnet)

SD3ControlNetModel

class diffusers.SD3ControlNetModel

< >

( sample_size: int = 128 patch_size: int = 2 in_channels: int = 16 num_layers: int = 18 attention_head_dim: int = 64 num_attention_heads: int = 18 joint_attention_dim: int = 4096 caption_projection_dim: int = 1152 pooled_projection_dim: int = 2048 out_channels: int = 16 pos_embed_max_size: int = 96 )

启用前向分块

< >

( chunk_size: Optional = None dim: int = 0 )

参数

  • chunk_size (int, 可选) — 前馈层的块大小。如果未指定,则将分别对每个 dim=dim 的张量运行前馈层。
  • dim (int, 可选,默认为 0) — 用于对前馈计算进行分块的维度。在 dim=0(批处理)或 dim=1(序列长度)之间选择。

将注意力处理器设置为使用 前馈分块

前向

< >

( hidden_states: FloatTensor controlnet_cond: Tensor conditioning_scale: float = 1.0 encoder_hidden_states: FloatTensor = None pooled_projections: FloatTensor = None timestep: LongTensor = None joint_attention_kwargs: Optional = None return_dict: bool = True )

参数

  • hidden_states (torch.FloatTensor 形状为 (批次大小, 通道, 高度, 宽度)) — 输入 hidden_states
  • controlnet_cond (torch.Tensor) — 形状为 (批次大小, 序列长度, 隐藏大小) 的条件输入张量。
  • conditioning_scale (float,默认为 1.0) — ControlNet 输出的比例因子。
  • encoder_hidden_states (torch.FloatTensor 形状为 (批次大小, 序列长度, 嵌入维度)) — 用于的条件嵌入(从输入条件(例如提示)计算的嵌入)。
  • timestep ( torch.LongTensor) — 用于指示去噪步骤。
  • joint_attention_kwargs (dict, 可选) — 如果指定,则传递给 AttentionProcessor 的关键字参数字典,如 diffusers.models.attention_processor 中的 self.processor 所定义。
  • return_dict (bool, 可选, 默认值 True) — 是否返回一个 ~models.transformer_2d.Transformer2DModelOutput 而不是一个简单的元组。

The SD3Transformer2DModel 的 forward 方法。

fuse_qkv_projections

< >

( )

启用融合的 QKV 投影。对于自注意力模块,所有投影矩阵(即查询、键、值)都被融合。对于交叉注意力模块,键和值投影矩阵被融合。

此 API 属于 🧪 实验性功能。

set_attn_processor

< >

( processor: Union )

参数

  • processor (dict of AttentionProcessor 或者仅 AttentionProcessor) — 实例化的处理器类或处理器类的字典,将被设置为 所有 Attention 层的处理器。

    如果 processor 是一个字典,键需要定义对应交叉注意力处理器的路径。在设置可训练注意力处理器时,强烈建议使用这种方式。

设置用于计算注意力的注意力处理器。

unfuse_qkv_projections

< >

( )

如果已启用,则禁用融合的 QKV 投影。

此 API 属于 🧪 实验性功能。

SD3ControlNetOutput

class diffusers.models.controlnet_sd3.SD3ControlNetOutput

< >

( controlnet_block_samples: Tuple )

< > 在 GitHub 上更新