Diffusers 中的 ControlNet

Hugging Face 已将 ControlNet 集成到 diffusers 库中,通过 StableDiffusionControlNetPipeline,允许用户使用深度图、分割图、涂鸦和关键点等特定空间上下文来条件化图像生成。此集成提供了一个最小化的接口来定制生成过程,使得可以将草图转换为艺术绘画,或在不同角色之间保持完全相同的姿势。

ControlNet 架构与训练

ControlNet 是由 Lvmin Zhang 和 Maneesh Agrawala 提出的框架,为文本到图像的扩散模型添加条件控制。该架构通过创建扩散模型(例如 Stable Diffusion 的潜在 UNet)预训练参数的 可训练副本,同时保留 锁定副本(原始参数)来实现。

关键技术细节包括:

  • 参数保留:锁定副本保留了从大规模数据集学习到的通用知识,而可训练副本学习任务特定的空间条件。
  • 零卷积:可训练副本与锁定副本通过 “zero convolution” 层相连。这些层在训练期间被优化,以确保冻结模型已学到的语义在加入新条件时得以保留。
  • 条件特异性:每一种新的空间条件都需要一套单独训练的 ControlNet 权重。例如,Canny 边缘图和语义分割图各自使用不同的权重。

推理与内存管理

运行 ControlNet 需要同时加载预训练的扩散模型权重和对应的 ControlNet 权重。例如,在 Stable Diffusion v1‑5 上使用一个 ControlNet 检查点会额外增加约 7 亿参数,导致相较于标准 Stable Diffusion 更高的显存需求。

为优化性能,Hugging Face 在 diffusers 实现中推荐以下技术:

  • Smart CPU Offloading:使用 enable_model_cpu_offload() 可确保模型组件(CLIP 文本编码器、UNet、ControlNet、VAE 解码器)仅在需要时才加载到 GPU 内存,从而显著降低 VRAM 消耗。
  • Fast Schedulers:将默认的 PNDMScheduler 替换为 UniPCMultistepScheduler,可将推理步数从 50 减少到 20,且质量损失不大。
  • Attention Acceleration:启用 xformers 的内存高效注意力进一步提升速度和内存利用率。

通过这些优化,在 V100 GPU 上使用约 4 GB VRAM,图像生成大约只需 3 秒。

实现与使用案例

StableDiffusionControlNetPipeline 通过将文本提示与空间条件相结合,实现了灵活的图像生成。

单一条件示例

  • Canny Edge Detection:用户可以使用 OpenCV 生成图像的 Canny 边缘图,ControlNet 随后利用该图保持原图的精确构图,同时更换主体(例如在经典画作的姿势下渲染不同的名人)。
  • OpenPose:使用 controlnet_aux 中的 OpenposeDetector,用户可以从图像中提取人体姿势,并将这些精确姿势应用到新生成的角色上,如超级英雄做瑜伽。
  • DreamBooth Integration:ControlNet 可与微调模型结合使用。通过 DreamBooth 微调的模型(例如 Mr. Potato Head 模型)可以在 StableDiffusionControlNetPipeline 中使用,将特定主体放置在受控的空间构图中。

组合多重条件

多个 ControlNet 条件可以同时用于同一图像。通过向管道传入 ControlNetModel 实例列表以及对应的条件列表,用户可以组合不同的空间控制。

为优化多条件结果,推荐以下策略:

  • Masking:对某一条件图的区域进行遮罩,使其不与另一条件图重叠(例如遮罩 Canny 图的中心,为 OpenPose 图留出空间)。
  • Conditioning Scale:调整 controlnet_conditioning_scale,以在不同空间条件之间设定优先级。

支持的条件模型

  • 深度 (sd-controlnet-depth)
  • HED (sd-controlnet-hed)
  • 法线 (sd-controlnet-normal)
  • 涂鸦 (sd-controlnet-scribble)
  • 分割 (sd-controlnet-seg)
  • OpenPose (sd-controlnet-openpose)
  • MLSD (sd-controlnet-mlsd)
  • Canny (sd-controlnet-canny)

Sources