ControlNet 控制 #

什么是 ControlNet? #

ControlNet 是一种为扩散模型添加精确空间控制的技术,可以通过各种条件图像来控制生成结果。

text
┌─────────────────────────────────────────────────────────────┐
│                    ControlNet 原理                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  传统生成:                                                  │
│  文本提示词 ──→ 扩散模型 ──→ 图像                           │
│  (控制有限,难以精确控制位置和姿态)                          │
│                                                             │
│  ControlNet 生成:                                           │
│  文本提示词 ──┐                                             │
│               ├──→ 扩散模型 + ControlNet ──→ 图像           │
│  条件图像 ───┘                                              │
│  (精确控制构图、姿态、边缘等)                                │
│                                                             │
│  ControlNet 架构:                                           │
│  ├── 零卷积层连接到 U-Net                                   │
│  ├── 训练时只更新 ControlNet 权重                           │
│  ├── 不影响基础模型                                         │
│  └── 可叠加多个 ControlNet                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

ControlNet 类型 #

主要类型概览 #

text
┌─────────────────────────────────────────────────────────────┐
│                   ControlNet 类型一览                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  结构控制:                                                  │
│  ├── Canny (边缘检测)                                       │
│  ├── Depth (深度图)                                         │
│  ├── Normal (法线图)                                        │
│  ├── Lineart (线稿)                                         │
│  └── Soft Edge (软边缘)                                     │
│                                                             │
│  姿态控制:                                                  │
│  ├── OpenPose (骨骼姿态)                                    │
│  └── DensePose (密集姿态)                                   │
│                                                             │
│  语义控制:                                                  │
│  ├── Segmentation (语义分割)                                │
│  ├── Shuffle (内容重组)                                     │
│  └── IP-Adapter (图像参考)                                  │
│                                                             │
│  其他控制:                                                  │
│  ├── Tile (分块处理)                                        │
│  ├── Inpaint (局部重绘)                                     │
│  └── Reference (参考图)                                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Canny 边缘检测 #

text
Canny ControlNet:

功能:
├── 检测图像边缘
├── 根据边缘轮廓生成图像
└── 保持精确的边缘结构

适用场景:
├── 线稿上色
├── 保持轮廓精确
├── 建筑、产品设计
└── 需要精确边缘的场景

参数:
├── 低阈值: 检测弱边缘
├── 高阈值: 检测强边缘
└── 推荐设置: 100, 200

使用示例:
┌─────────────────────────────────────────────────────────────┐
│  输入: 边缘检测图                                           │
│  ┌─────────────┐                                            │
│  │   ╭───╮     │                                            │
│  │   │   │     │  边缘轮廓                                  │
│  │   ╰───╯     │                                            │
│  └─────────────┘                                            │
│         │                                                    │
│         ▼                                                    │
│  输出: 填充颜色的图像                                        │
│  ┌─────────────┐                                            │
│  │   ╭───╮     │                                            │
│  │   │🎨 │     │  完整图像                                  │
│  │   ╰───╯     │                                            │
│  └─────────────┘                                            │
└─────────────────────────────────────────────────────────────┘

OpenPose 姿态控制 #

text
OpenPose ControlNet:

功能:
├── 检测人体骨骼关键点
├── 控制人物姿态
└── 支持多人姿态

关键点类型:
├── 身体: 18 个关键点
├── 手部: 21 个关键点
├── 面部: 70 个关键点
└── 全身模式

适用场景:
├── 控制人物姿势
├── 复现参考图姿态
├── 动作设计
└── 人物构图

使用方式:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│  1. 上传参考图片                                            │
│     └── 自动检测骨骼点                                      │
│                                                             │
│  2. 或手动编辑骨骼                                          │
│     └── 使用 OpenPose 编辑器                                │
│                                                             │
│  3. 生成图像                                                │
│     └── 人物会保持相同姿态                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Depth 深度控制 #

text
Depth ControlNet:

功能:
├── 分析图像深度信息
├── 保持空间结构
└── 控制前后景关系

深度图类型:
├── MiDaS: 通用深度估计
├── Zoe: 更精确的深度
├── Leres: 室内场景优化
└── Normal: 法线深度

适用场景:
├── 保持场景结构
├── 风格迁移
├── 室内设计
└── 3D 场景重建感

效果:
┌─────────────────────────────────────────────────────────────┐
│  原图              深度图              生成结果              │
│  ┌─────┐          ┌─────┐           ┌─────┐                │
│  │ 🏠  │    →     │ ░░▓▓│     →     │ 🏰  │                │
│  │ 🌳  │          │ ▓▓██│           │ 🌲  │                │
│  └─────┘          └─────┘           └─────┘                │
│                    深度映射          保持空间结构            │
└─────────────────────────────────────────────────────────────┘

Lineart 线稿 #

text
Lineart ControlNet:

类型:
├── Lineart: 通用线稿检测
├── Lineart Anime: 动漫线稿
├── Lineart Realistic: 写实线稿
└── Lineart Coarse: 粗线稿

功能:
├── 提取线稿
├── 根据线稿生成图像
└── 适合上色和细化

适用场景:
├── 线稿上色
├── 草图细化
├── 动漫创作
└── 插画工作流

使用技巧:
├── 配合高权重保持线稿结构
├── 可与颜色提示词结合
└── 适合动漫和插画风格

Tile 分块 #

text
Tile ControlNet:

功能:
├── 分块处理图像
├── 增加细节
├── 保持整体结构
└── 无缝拼接

适用场景:
├── 图像放大细化
├── 添加细节
├── 纹理增强
└── 高分辨率生成

参数:
├── 降采样率: 控制分块大小
├── 权重: 控制细节程度
└── 推荐配合 upscale 使用

工作流:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│  低分辨率图像 ──→ Tile ControlNet ──→ 高分辨率细节图像      │
│                                                             │
│  效果:                                                      │
│  ├── 保持整体构图                                           │
│  ├── 添加更多细节                                           │
│  └── 提高图像质量                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

IP-Adapter #

text
IP-Adapter (图像提示适配器):

功能:
├── 使用图像作为提示
├── 参考图像风格
├── 保持图像特征
└── 无需文本描述

类型:
├── IP-Adapter: 通用
├── IP-Adapter Plus: 更强特征保持
├── IP-Adapter Face: 面部特征
└── IP-Adapter Full Face: 完整面部

适用场景:
├── 风格迁移
├── 角色一致性
├── 图像变体
└── 参考图生成

使用方式:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│  参考图 ──→ IP-Adapter ──→ 相似风格的新图像                 │
│                                                             │
│  示例:                                                      │
│  输入: 一张动漫角色图                                       │
│  输出: 不同姿势/服装的相同角色                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

ControlNet 使用方法 #

基本使用步骤 #

text
WebUI 中使用 ControlNet:

1. 安装扩展
   ├── 扩展名: sd-webui-controlnet
   └── 从扩展列表安装

2. 下载模型
   ├── 存放位置: models/ControlNet/
   ├── 来源: Hugging Face
   └── 选择对应版本

3. 启用 ControlNet
   └── 勾选 Enable

4. 上传条件图
   ├── 直接上传图片
   └── 或使用预处理

5. 选择类型
   ├── 选择 ControlNet 类型
   └── 选择预处理器

6. 调整参数
   ├── 权重
   ├── 起止步数
   └── 控制模式

7. 生成图像

参数详解 #

text
ControlNet 参数:

Weight (权重):
├── 范围: 0-2
├── 默认: 1.0
├── 越高控制越强
└── 推荐: 0.8-1.2

Guidance Start (起始步数):
├── 范围: 0-1
├── 默认: 0
├── 控制何时开始影响
└── 0 = 从一开始

Guidance End (结束步数):
├── 范围: 0-1
├── 默认: 1
├── 控制何时停止影响
└── 1 = 到最后

Control Mode (控制模式):
├── Balanced: 平衡
├── My prompt is more important: 提示词优先
└── ControlNet is more important: ControlNet 优先

Resize Mode (调整模式):
├── Crop and Resize: 裁剪缩放
├── Resize and Fill: 缩放填充
└── Just Resize: 直接缩放

预处理器选择 #

text
预处理器与模型对应:

Canny:
├── 预处理器: Canny
├── 模型: control_canny
└── 用于边缘检测

OpenPose:
├── 预处理器: OpenPose
├── 模型: control_openpose
└── 用于姿态控制

Depth:
├── 预处理器: Depth_Midas/Depth_Zoe
├── 模型: control_depth
└── 用于深度控制

Lineart:
├── 预处理器: Lineart/LineartAnime
├── 模型: control_lineart
└── 用于线稿

Tile:
├── 预处理器: Tile
├── 模型: control_tile
└── 用于细节增强

IP-Adapter:
├── 预处理器: IP-Adapter
├── 模型: ip-adapter
└── 用于图像参考

多 ControlNet 组合 #

组合使用 #

text
多 ControlNet 叠加:

启用方式:
├── 设置中开启多 ControlNet
├── 默认支持多个
└── 可同时使用多种控制

常见组合:

1. OpenPose + Depth
   ├── 控制姿态 + 空间结构
   └── 适合人物场景

2. Canny + Tile
   ├── 边缘控制 + 细节增强
   └── 适合线稿上色

3. OpenPose + IP-Adapter
   ├── 姿态控制 + 风格参考
   └── 适合角色生成

4. Depth + Tile
   ├── 空间结构 + 细节
   └── 适合场景生成

权重分配:
├── 主要控制: 1.0-1.2
├── 辅助控制: 0.5-0.8
└── 避免冲突

组合示例 #

text
实战组合案例:

案例1: 角色姿态控制
┌─────────────────────────────────────────────────────────────┐
│  ControlNet 1: OpenPose (权重 1.0)                          │
│  ControlNet 2: IP-Adapter (权重 0.8)                        │
│  提示词: a girl in white dress                              │
│  效果: 指定姿态的角色图像                                   │
└─────────────────────────────────────────────────────────────┘

案例2: 场景风格迁移
┌─────────────────────────────────────────────────────────────┐
│  ControlNet 1: Depth (权重 1.0)                             │
│  ControlNet 2: Canny (权重 0.6)                             │
│  提示词: cyberpunk city, neon lights                        │
│  效果: 保持结构的风格迁移                                   │
└─────────────────────────────────────────────────────────────┘

案例3: 线稿上色
┌─────────────────────────────────────────────────────────────┐
│  ControlNet 1: Lineart (权重 1.2)                           │
│  ControlNet 2: Reference (权重 0.5)                         │
│  提示词: anime girl, colorful, detailed                     │
│  效果: 保持线稿的上色图像                                   │
└─────────────────────────────────────────────────────────────┘

实战应用 #

人物姿态控制 #

text
OpenPose 实战:

步骤:
1. 准备参考图
   └── 包含目标姿态的图片

2. 生成骨骼图
   ├── 上传到 ControlNet
   └── 自动检测或手动编辑

3. 设置参数
   ├── 权重: 1.0
   ├── 模型: control_openpose
   └── 预处理器: OpenPose

4. 编写提示词
   └── 描述人物外观和服装

5. 生成图像
   └── 人物会保持相同姿态

技巧:
├── 使用 OpenPose 编辑器调整姿态
├── 手部检测可能需要单独开启
└── 多人场景使用多人模式

线稿上色 #

text
Lineart/Canny 上色:

步骤:
1. 准备线稿
   └── 清晰的黑白线稿

2. 选择 ControlNet
   ├── Lineart: 适合动漫线稿
   └── Canny: 适合通用线稿

3. 设置参数
   ├── 权重: 1.0-1.2
   ├── 起始步数: 0
   └── 结束步数: 1

4. 编写提示词
   ├── 描述颜色
   ├── 描述风格
   └── 例: anime girl, blue hair, pink dress

5. 生成图像
   └── 线稿会被填充颜色

技巧:
├── 线稿越清晰效果越好
├── 可配合颜色提示词
└── 多次尝试调整权重

场景重构 #

text
Depth 场景重构:

步骤:
1. 准备参考场景
   └── 需要重构的场景图片

2. 生成深度图
   ├── 上传到 ControlNet
   └── 选择 Depth 预处理器

3. 设置参数
   ├── 权重: 0.8-1.0
   └── 模型: control_depth

4. 编写提示词
   └── 描述新场景内容

5. 生成图像
   └── 保持空间结构的新场景

效果:
├── 室内 → 室内(不同风格)
├── 室外 → 室外(不同风格)
└── 保持前后景关系

常见问题 #

ControlNet 不生效 #

text
排查步骤:

1. 检查是否启用
   └── 勾选 Enable

2. 检查模型文件
   ├── 是否下载正确
   └── 是否在正确目录

3. 检查预处理器
   ├── 是否选择正确
   └── 与模型是否匹配

4. 检查权重
   └── 权重是否 > 0

5. 检查显存
   └── ControlNet 需要额外显存

效果不理想 #

text
优化建议:

1. 调整权重
   ├── 效果太弱: 增加权重
   └── 效果太强: 降低权重

2. 调整起止步数
   ├── 前期控制: 起始 0
   └── 后期控制: 起始 0.5

3. 更换预处理器
   └── 不同预处理器效果不同

4. 检查条件图质量
   └── 高质量输入才有好输出

5. 尝试不同模型
   └── 同类型有多个可选模型

下一步 #

掌握 ControlNet 后,继续学习:

最后更新:2026-04-05