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