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