ControlNet:深度解析与图像控制教程 – wiki大全

ControlNet:深度解析与图像控制教程

导言

在人工智能领域,尤其是生成式AI和计算机视觉方面,对图像生成过程的精细控制一直是研究与应用的热点。传统的图像生成模型,如Stable Diffusion,虽然能够生成高质量的图像,但用户往往难以对其内容、构图和风格进行精确的控制。为了解决这一痛点,ControlNet应运而生,它以其卓越的图像控制能力,彻底改变了我们与生成式AI互动的方式。

本文将深入探讨ControlNet的工作原理、核心优势,并通过详细的教程,指导读者如何利用ControlNet实现对图像生成的精准控制。

什么是ControlNet?

ControlNet是一种神经网络结构,旨在为大型预训练扩散模型(如Stable Diffusion)添加额外的条件控制。它通过将扩散模型的内部层与“条件输入”连接起来,使得用户可以引导生成过程,使其遵循特定的空间布局、姿态、深度信息、边缘检测图或其他结构性输入。

ControlNet 的核心思想

ControlNet 的核心思想是,复制预训练模型(例如 Stable Diffusion 的 U-Net 架构)的权重,并将这些复制的权重分成两部分:

  1. “可训练副本”(Trainable Copy):这部分网络层是全新的,并且可以根据特定的条件输入(如边缘图、深度图、人体姿态骨架等)进行训练。
  2. “锁定副本”(Locked Copy):这部分网络层的权重在整个训练过程中保持锁定,不进行任何更新。它的作用是保留预训练模型已有的强大图像生成能力和知识。

通过这种“锁定-训练”的策略,ControlNet 能够在不损害原始模型生成质量的前提下,有效地学习如何根据新的条件输入来控制图像生成。它还引入了一个“零卷积层”(Zero Convolution Layer),用于在训练开始时将条件输入编码为零噪声,确保训练的稳定性。

ControlNet 的工作原理

  1. 输入条件图像:用户提供一张额外的“条件图像”。这张图像不是用于生成,而是作为“蓝图”或“指导”。例如,它可以是一个物体的边缘图、一张人物的骨骼姿态图、一张深度图、一张分割图等。
  2. 提取特征:ControlNet 对这张条件图像进行处理,提取出其结构性特征。这一步通常涉及特定的预处理模型(如Canny边缘检测器、OpenPose姿态检测器、MiDaS深度估计算法等),将原始图像转换为ControlNet可以理解的“条件图”。
  3. 条件注入:提取到的条件特征被注入到扩散模型的每一层。通过“可训练副本”的学习,ControlNet 能够理解这些条件特征,并将其融入到图像的去噪过程中。
  4. 引导去噪:在图像生成(去噪)的每一步,扩散模型都会同时考虑文本提示(Text Prompt)和 ControlNet 提供的条件信息。这意味着生成的图像不仅符合文本描述,而且严格遵循条件图像所提供的结构性指导。
  5. 生成结果:最终,模型生成一张既符合文本提示又精确匹配条件结构的新图像。

ControlNet 的优势与应用场景

优势

  • 精确控制:解决了传统扩散模型难以控制图像结构、构图、姿态等的问题。
  • 保持风格:在进行结构性改变的同时,能够很好地保持原始模型的图像生成风格和质量。
  • 用途广泛:支持多种条件输入,满足不同场景下的控制需求。
  • 低成本训练:由于大部分预训练模型的权重被锁定,ControlNet 的训练成本相对较低。

常见应用场景

  • 人物姿态控制:通过OpenPose模型,将人物照片或草图转化为骨骼姿态图,ControlNet可以生成相同姿态但风格完全不同的新人物图像。
  • 构图与布局控制:使用Canny边缘检测或线稿图作为输入,可以精确地控制生成图像的物体轮廓和整体布局。
  • 深度信息控制:利用MiDaS等深度估计算法生成的深度图,可以控制生成图像的景深和三维结构。
  • 语义分割控制:通过输入语义分割图,精确指定画面中不同区域应生成什么物体。
  • 图像修复与重绘:在修复或重绘图像时,可以利用ControlNet保留原图的结构。
  • 设计与艺术创作:设计师和艺术家可以更快地将草图或概念转化为高质量的图像,同时保持对其结构和创意的控制。
  • 视频生成:通过对视频帧序列应用ControlNet,可以保持物体在不同帧之间的连贯性。

ControlNet 图像控制教程

本教程将以最常见的 Stable Diffusion WebUI (Automatic1111) 为例,演示如何使用 ControlNet。

准备工作

  1. 安装 Stable Diffusion WebUI:确保你已经安装并成功运行 Stable Diffusion WebUI。
  2. 安装 ControlNet 扩展
    • 打开 WebUI,进入 Extensions 选项卡。
    • 选择 Install from URL,在 URL for extension's git repository 粘贴 https://github.com/Mikubill/sd-webui-controlnet.git
    • 点击 Install
    • 安装完成后,回到 Installed 选项卡,点击 Apply and restart UI
  3. 下载 ControlNet 模型:ControlNet 需要针对不同条件图的专用模型。这些模型通常在 Hugging Face 或 Civitai 上可以找到。
    • 访问 ControlNet 的 Hugging Face 页面(例如:https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main)。
    • 根据你的需求下载相应的 .pth.safetensors 模型文件,例如 control_v11p_sd15_canny.pthcontrol_v11p_sd15_openpose.pth 等。
    • 将下载的模型文件放入 Stable Diffusion WebUI 根目录下的 extensions/sd-webui-controlnet/models 文件夹内。

使用 ControlNet 生成图像

Canny 边缘检测 为例,控制图像构图:

  1. 启动 Stable Diffusion WebUI
  2. 选择模型:在 Stable Diffusion checkpoint 下拉菜单中选择一个你喜欢的 SD 1.5 或 SDXL 模型(根据你下载的 ControlNet 模型版本选择,目前大多为 SD 1.5)。
  3. 填写文本提示 (Prompt)
    • Prompt 文本框中输入你希望生成的图像描述,例如:a futuristic city, cyberpunk style, neon lights, rainy street
    • (可选)在 Negative prompt 中输入你不希望出现的元素。
  4. 展开 ControlNet 模块:在页面下方找到并点击 ControlNet 模块将其展开。
  5. 启用 ControlNet
    • 勾选 Enable
    • (可选)勾选 Pixel Perfect 以获得更精确的结果。
  6. 上传条件图像
    • 将你想要作为构图参考的图像拖拽到 ControlNet 模块的图像输入区域。这张图片可以是简单的线稿、建筑照片等。例如,你可以上传一张建筑物的照片。
  7. 选择 Control Type 和 Preprocessor/Model
    • Control Type:选择 Canny
    • Preprocessor:选择 canny(WebUI 会自动识别并显示)。这将使用 Canny 算法从你上传的图像中提取边缘。
    • Model:选择你下载并放入 models 文件夹的对应 Canny 模型,例如 control_v11p_sd15_canny
  8. 调整 Control Weight (可选)
    • Control Weight:控制 ControlNet 对生成结果的影响强度。值越高,生成的图像越严格遵循条件图;值越低,则有更多自由度。
  9. 预览预处理图 (可选)
    • 点击 Preprocessor 下方的 Bomb 图标(通常是小炸弹或预览按钮)。
    • 稍等片刻,WebUI 会在右侧显示经过 Canny 预处理器处理后的边缘图,你可以检查是否符合预期。
  10. 生成图像
    • 设置其他生成参数,如 Sampling methodSampling stepsCFG Scale 等。
    • 点击 Generate

WebUI 将开始生成图像。你会发现生成的图像在构图和边缘结构上严格遵循你上传的 Canny 边缘图,同时结合了你的文本提示来填充细节和风格。

其他常见 Control Type 的使用

  • OpenPose (人物姿态控制)
    • Control Type: OpenPose
    • Preprocessor: openposeopenpose_full (包含手部和面部)
    • Model: control_v11p_sd15_openpose
    • 用途:上传人物照片,提取骨骼,生成相同姿态的人物。
  • Depth (深度信息控制)
    • Control Type: Depth
    • Preprocessor: depth_midasdepth_leres
    • Model: control_v11f1p_sd15_depth
    • 用途:上传照片,提取深度信息,生成具有相同景深和三维感的图像。
  • Normal Map (法线贴图)
    • Control Type: Normal Map
    • Preprocessor: normal_bae
    • Model: control_v11p_sd15_normalbae
    • 用途:利用法线贴图控制物体的表面细节和光照方向。
  • Scribble / Lineart (线稿/涂鸦)
    • Control Type: ScribbleLineart
    • Preprocessor: pidinet_scribblelineart_realistic
    • Model: control_v11p_sd15_scribble / control_v11p_sd15_lineart
    • 用途:将简单的手绘线稿或涂鸦转化为精美图像。

进阶技巧

  • 多 ControlNet 组合:WebUI 允许同时启用多个 ControlNet 模块。例如,你可以同时使用 Canny 和 OpenPose 来控制图像的构图和人物姿态。
  • Reference Only ControlNet:一些 ControlNet 模型支持 Reference Only 模式,它不直接控制结构,而是引导模型参考输入图像的风格或色彩。
  • 调整权重曲线:在 ControlNet 模块中,你可以点击 Control Weight 旁边的图标来调整权重曲线,使其在生成过程的不同阶段具有不同的影响。
  • LoRA 与 ControlNet 结合:ControlNet 可以与 LoRA (Low-Rank Adaptation) 模型无缝结合,在保持结构控制的同时,还能应用特定的风格或角色。

总结

ControlNet 作为一项革命性的技术,极大地拓展了生成式AI的应用边界,让用户能够以前所未有的精度控制图像生成。无论是艺术家、设计师还是普通用户,都可以通过 ControlNet 将创意变为现实,创作出更具个性化和符合预期的视觉作品。随着研究的不断深入,ControlNet及其变种必将在未来的AI图像生成领域扮演更加重要的角色。

滚动至顶部