ControlNet 使用 #
ControlNet 概述 #
什么是 ControlNet? #
ControlNet 是一种条件控制技术,允许通过额外的输入(如姿态图、深度图、边缘图等)精确控制图像生成过程。
text
┌─────────────────────────────────────────────────────────────┐
│ ControlNet 原理 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 传统生成: │
│ 文本提示词 ──→ 模型 ──→ 图像(不可控) │
│ │
│ ControlNet 生成: │
│ 文本提示词 ──┐ │
│ ├──→ 模型 ──→ 图像(精确控制) │
│ 控制条件 ──┘ │
│ (姿态/深度/边缘) │
│ │
└─────────────────────────────────────────────────────────────┘
ControlNet 类型 #
text
┌─────────────────────────────────────────────────────────────┐
│ ControlNet 类型一览 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Canny - 边缘检测 │
│ ├── 输入:边缘图像 │
│ ├── 控制:轮廓和线条 │
│ └── 适用:线稿上色、轮廓保持 │
│ │
│ Depth - 深度估计 │
│ ├── 输入:深度图 │
│ ├── 控制:空间关系 │
│ └── 适用:场景、建筑、空间控制 │
│ │
│ OpenPose - 姿态检测 │
│ ├── 输入:姿态骨架 │
│ ├── 控制:人物动作 │
│ └── 适用:人物姿势控制 │
│ │
│ Normal - 法线图 │
│ ├── 输入:法线图 │
│ ├── 控制:表面细节 │
│ └── 适用:3D 效果、细节控制 │
│ │
│ Scribble - 涂鸦 │
│ ├── 输入:简单线条 │
│ ├── 控制:大致形状 │
│ └── 适用:草图生成 │
│ │
│ Tile - 分块控制 │
│ ├── 输入:原图 │
│ ├── 控制:局部细节 │
│ └── 适用:高清放大、细节增强 │
│ │
│ IP-Adapter - 图像适配 │
│ ├── 输入:参考图像 │
│ ├── 控制:风格和内容 │
│ └── 适用:风格迁移、角色一致性 │
│ │
└─────────────────────────────────────────────────────────────┘
基础 ControlNet 工作流 #
工作流结构 #
text
┌─────────────────────────────────────────────────────────────┐
│ ControlNet 工作流 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Load │ │ ControlNet │ │
│ │ Checkpoint │ │ Loader │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ │ ▼ │
│ │ ┌─────────────┐ ┌─────────────┐ │
│ │ │ Apply │ │ Preprocessor│ │
│ │ │ ControlNet │←────│ (可选) │ │
│ │ └──────┬──────┘ └─────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ CLIP Text │ │ │ │
│ │ Encode │────→│ KSampler │ │
│ └─────────────┘ │ │ │
│ │ │ │
│ ┌─────────────┐ │ │ │
│ │ CLIP Text │ │ │ │
│ │ Encode │────→│ │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
关键节点 #
text
1. ControlNet Loader
┌─────────────────────────────┐
│ control_net_name: 选择模型 │
│ │
│ 输出:CONTROL_NET │
└─────────────────────────────┘
2. Apply ControlNet
┌─────────────────────────────┐
│ conditioning: 条件输入 │
│ control_net: CONTROL_NET │
│ image: 控制图像 │
│ strength: 控制强度 │
│ │
│ 输出:CONDITIONING │
└─────────────────────────────┘
3. Preprocessor (可选)
┌─────────────────────────────┐
│ image: 原始图像 │
│ │
│ 功能:自动生成控制图像 │
│ 输出:处理后的控制图像 │
└─────────────────────────────┘
ControlNet 类型详解 #
Canny 边缘控制 #
text
Canny ControlNet:
用途:
├── 线稿上色
├── 保持轮廓
├── 边缘精确控制
工作流:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Load Image │────→│ Canny Edge │────→│ Apply │
│ │ │ Preprocessor│ │ ControlNet │
└─────────────┘ └─────────────┘ └─────────────┘
参数:
├── low_threshold: 低阈值 (50-100)
├── high_threshold: 高阈值 (100-200)
└── strength: 控制强度 (0.5-1.0)
示例应用:
原图线稿 → Canny → 生成上色图像
照片 → Canny → 保持轮廓的风格转换
OpenPose 姿态控制 #
text
OpenPose ControlNet:
用途:
├── 控制人物姿势
├── 保持动作一致性
├── 多人姿态控制
工作流:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Load Image │────→│ OpenPose │────→│ Apply │
│ (参考姿势) │ │ Preprocessor│ │ ControlNet │
└─────────────┘ └─────────────┘ └─────────────┘
检测内容:
├── 身体骨架
├── 手部关键点
├── 面部特征
└── 可单独或组合使用
参数:
├── detect_body: 检测身体
├── detect_hand: 检测手部
├── detect_face: 检测面部
└── strength: 控制强度 (0.7-1.0)
示例应用:
参考人物姿势 → OpenPose → 新人物保持相同姿势
Depth 深度控制 #
text
Depth ControlNet:
用途:
├── 保持空间关系
├── 场景结构控制
├── 建筑和室内
工作流:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Load Image │────→│ Depth │────→│ Apply │
│ │ │ Preprocessor│ │ ControlNet │
└─────────────┘ └─────────────┘ └─────────────┘
预处理器类型:
├── MiDaS - 通用深度估计
├── Zoe - 高质量深度
├── Leres - 细节深度
└── Normal - 法线深度
参数:
├── strength: 控制强度 (0.5-1.0)
└── 可与 Canny 组合使用
示例应用:
场景照片 → Depth → 保持空间关系的风格转换
Tile 细节控制 #
text
Tile ControlNet:
用途:
├── 高清放大
├── 细节增强
├── 保持纹理
工作流:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 低分辨率图 │────→│ Tile │────→│ Apply │
│ │ │ Preprocessor│ │ ControlNet │
└─────────────┘ └─────────────┘ └─────────────┘
特点:
├── 保持局部细节
├── 允许内容变化
├── 适合放大重绘
参数:
├── strength: 控制强度 (0.5-1.0)
└── 可与其他 ControlNet 组合
示例应用:
低分辨率图 → Tile → 高分辨率细节增强
IP-Adapter 图像适配 #
text
IP-Adapter ControlNet:
用途:
├── 风格迁移
├── 角色一致性
├── 参考图像生成
工作流:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Load Image │────→│ IP-Adapter │────→│ Apply │
│ (参考图) │ │ Apply │ │ ControlNet │
└─────────────┘ └─────────────┘ └─────────────┘
类型:
├── IP-Adapter - 标准版
├── IP-Adapter Plus - 增强版
├── IP-Adapter Face - 面部专用
└── IP-Adapter Style - 风格专用
参数:
├── weight: 影响权重 (0.5-1.0)
├── start_at: 开始影响时间
└── end_at: 结束影响时间
示例应用:
参考艺术作品 → IP-Adapter → 新内容保持相同风格
多 ControlNet 组合 #
组合原理 #
text
多 ControlNet 组合:
原理:
├── 多个条件叠加
├── 按顺序应用
└── 综合控制效果
组合方式:
Conditioning
│
▼
Apply ControlNet 1 ──→ Conditioning
│
▼
Apply ControlNet 2 ──→ Conditioning
│
▼
Apply ControlNet 3 ──→ KSampler
常用组合 #
text
推荐组合:
1. OpenPose + Depth
├── 控制人物姿势
├── 保持空间关系
└── 适用:人物场景
2. Canny + Depth
├── 保持轮廓
├── 保持空间
└── 适用:建筑、场景
3. OpenPose + Canny
├── 控制姿势
├── 保持轮廓
└── 适用:人物细节
4. Tile + IP-Adapter
├── 细节增强
├── 风格参考
└── 适用:高清风格化
组合强度建议:
├── 第一个 ControlNet: 0.7-1.0
├── 第二个 ControlNet: 0.5-0.8
└── 避免总强度过高
参数优化 #
强度调整 #
text
ControlNet 强度 (strength):
强度范围:0.0 - 1.0
效果:
├── 0.3-0.5 - 轻微影响
├── 0.5-0.7 - 中等影响
├── 0.7-0.9 - 强烈影响
└── 0.9-1.0 - 主导控制
选择建议:
├── 精确控制:0.8-1.0
├── 风格引导:0.5-0.7
├── 辅助控制:0.3-0.5
└── 需要测试找到最佳值
开始/结束时间 #
text
ControlNet 时间控制:
参数:
├── start_percent: 开始影响时间 (0.0-1.0)
└── end_percent: 结束影响时间 (0.0-1.0)
效果:
├── start: 0.0 - 从开始影响
├── start: 0.3 - 跳过早期步骤
├── end: 1.0 - 影响到最后
└── end: 0.7 - 提前结束影响
应用场景:
├── 早期控制:start=0, end=0.5
├── 后期控制:start=0.5, end=1.0
└── 全程控制:start=0, end=1.0
常见问题 #
问题 1:控制效果太强 #
text
症状:生成图像过于僵硬
解决:
├── 降低 ControlNet 强度
├── 调整开始/结束时间
├── 增加 CFG 值
└── 优化提示词
问题 2:控制效果太弱 #
text
症状:生成图像偏离控制条件
解决:
├── 提高 ControlNet 强度
├── 检查控制图像质量
├── 确保模型匹配
└── 调整预处理参数
问题 3:模型不匹配 #
text
症状:ControlNet 不生效或报错
解决:
├── 确认 ControlNet 与主模型版本匹配
├── SD 1.5 使用 SD 1.5 ControlNet
├── SDXL 使用 SDXL ControlNet
└── 检查模型文件完整性
下一步 #
现在你已经掌握了 ControlNet 使用,接下来学习 LoRA 微调,了解如何使用 LoRA 调整模型风格。
最后更新:2026-04-05