第五章: ControlNet精准控制
ControlNet简介
什么是ControlNet
ControlNet = 给SD添加"骨架约束"的插件,让AI按照你的指引生成图片
传统SD: 文字描述 → AI随机理解 → 不可控的结果
ControlNet: 文字描述 + 参考图/线稿/姿态 → AI精确执行 → 可控的结果
核心能力:
- 🎨 姿态控制: 让角色摆出指定姿势
- 🖼️ 线稿上色: 把简笔画变成精美插画
- 🏞️ 场景复刻: 保持参考图的构图和景深
- ✏️ 边缘引导: 用涂鸦控制物体轮廓
ControlNet vs 传统img2img
| 对比项 | img2img | ControlNet |
|---|---|---|
| 控制方式 | 模糊的"参考" | 精确的"骨架约束" |
| 相似度 | 30-70%(不稳定) | 90%+(极高) |
| 适用场景 | 风格迁移 | 姿态/构图/线稿控制 |
| 学习难度 | 简单 | 中等 |
| 效果 | 随机性大 | 精确可控 |
举例:
需求: 让女孩做"OK"手势
img2img: 提示词写"ok gesture",但手势随机,可能错误
ControlNet: 上传OK手势骨骼图,100%还原手势
ControlNet安装
插件安装
方法1: WebUI内置安装(推荐)
1. Extensions > Available
2. 点击 "Load from"
3. 搜索 "ControlNet"
4. 找到 "sd-webui-controlnet"
5. 点击 Install
6. Settings > Reload UI
方法2: 手动安装
cd stable-diffusion-webui/extensions
git clone https://github.com/Mikubill/sd-webui-controlnet.git
# 重启WebUI
模型下载
必装模型(放入 models/ControlNet/ 目录):
1. OpenPose (姿态控制,最常用):
文件名: control_v11p_sd15_openpose.pth
大小: 1.45GB
下载: HuggingFace > lllyasviel/ControlNet-v1-1
用途: 人物姿态、骨骼控制
2. Canny (边缘检测):
文件名: control_v11p_sd15_canny.pth
大小: 1.45GB
用途: 保持物体轮廓、建筑线条
3. Depth (深度图):
文件名: control_v11f1p_sd15_depth.pth
大小: 1.45GB
用途: 场景构图、景深控制
4. Lineart (线稿提取):
文件名: control_v11p_sd15_lineart.pth
大小: 1.45GB
用途: 线稿上色、插画创作
5. Scribble (涂鸦):
文件名: control_v11p_sd15_scribble.pth
大小: 1.45GB
用途: 手绘草图控制
下载站点:
- HuggingFace: https://huggingface.co/lllyasviel/ControlNet-v1-1
- 国内镜像: https://hf-mirror.com
快速下载(推荐新手先装这3个):
- OpenPose (姿态,必装)
- Canny (边缘,必装)
- Depth (深度,推荐)
验证安装
1. 刷新WebUI
2. txt2img页面下方出现 "ControlNet" 折叠面板
3. 展开后看到 "Enable" 复选框
4. Preprocessor下拉菜单有 "openpose", "canny" 等选项
5. Model下拉菜单显示已下载的.pth文件
安装成功
ControlNet界面详解
主界面布局
ControlNet面板:
┌──────────────────────────────────────┐
│ ☑ Enable (启用) │
│ ☐ Low VRAM (低显存模式) │
│ ☐ Pixel Perfect (像素完美) │
├──────────────────────────────────────┤
│ 📷 [上传图片区域] │
│ 拖入参考图/姿态图/线稿 │
├──────────────────────────────────────┤
│ Control Type: [All ] │ ← 控制类型
│ Preprocessor: [openpose_full ] │ ← 预处理器
│ Model: [control_openpose ] │ ← 模型选择
├──────────────────────────────────────┤
│ Control Weight: [1.0] │ ← 控制强度
│ Starting Step: [0.0] │ ← 起始步数
│ Ending Step: [1.0] │ ← 结束步数
├──────────────────────────────────────┤
│ Control Mode: [Balanced ] │ ← 控制模式
└──────────────────────────────────────┘
核心参数解释
Enable (启用):
勾选后ControlNet才生效
可同时启用多个ControlNet(最多3个)
Preprocessor (预处理器):
作用: 从参考图提取骨架/边缘/深度信息
openpose_full: 提取完整人体骨骼(含手指、面部)
canny: 提取边缘线条
depth_midas: 提取深度信息
none: 不预处理,直接用上传的图(如已有骨骼图)
Model (模型):
对应Preprocessor选择相应模型:
openpose → control_openpose.pth
canny → control_canny.pth
depth → control_depth.pth
Control Weight (控制强度):
0.5: 轻度参考,AI有较大自由度
1.0: 标准强度,推荐
1.5: 强力约束,严格遵循
2.0: 极度约束,可能僵硬
Control Mode (控制模式):
Balanced: 平衡提示词和ControlNet 推荐
My prompt is more important: 优先提示词
ControlNet is more important: 优先骨架约束
OpenPose姿态控制
OpenPose基础用法
场景: 让角色摆出指定姿势
步骤:
1. 找参考姿态图(如舞蹈动作照片)
2. ControlNet面板:
- Enable:
- 上传姿态图
- Preprocessor: openpose_full
- Model: control_openpose
- Weight: 1.0
3. 主提示词:
Prompt: 1girl, school uniform, smile, outdoor
Negative: bad hands, extra fingers
4. Generate
效果: AI生成的女孩会完全还原参考图的姿势,但外貌、服装、背景按提示词来。
OpenPose变体
1. openpose (仅身体):
Preprocessor: openpose
提取: 身体骨骼(不含手指、面部)
速度: 快
适合: 全身动作、不需要细节手部
2. openpose_full (完整,推荐):
Preprocessor: openpose_full
提取: 身体+手指+面部朝向
速度: 中等
适合: 需要精确手势、表情方向
3. openpose_hand (仅手部):
Preprocessor: openpose_hand
提取: 手部骨骼(超精细)
适合: 特写手部动作
4. openpose_face (仅面部):
Preprocessor: openpose_face
提取: 面部关键点
适合: 表情控制
OpenPose实战案例
案例1: 复刻舞蹈动作
参考图: 芭蕾舞者单腿站立照片
ControlNet设置:
- Preprocessor: openpose_full
- Model: control_openpose
- Weight: 1.2 (稍微强化)
Prompt:
1girl, pink ballet dress, ballet shoes,
professional photography, stage lighting,
graceful, elegant, 8k uhd
生成结果: 不同女孩,但完美复刻芭蕾姿态
用时: 15秒
案例2: 多人合影姿态
参考图: 3个朋友合照
ControlNet:
- Preprocessor: openpose
- Weight: 1.0
Prompt:
3girls, casual wear, park background,
smiling, friendship, natural lighting
效果: 保持3人相对位置和姿态,但换成不同角色
案例3: 精确手势(OK手势)
参考图: 手做OK手势特写
ControlNet:
- Preprocessor: openpose_hand
- Weight: 1.3
Prompt:
1girl, making ok gesture, smile,
looking at viewer, close-up hand,
sharp focus on hand
效果: 手势100%正确,解决SD常见的"手残"问题
OpenPose骨骼图编辑
使用OpenPose Editor插件:
安装: Extensions > Available > 搜索 "OpenPose Editor"
功能:
- 在浏览器中直接绘制骨骼
- 拖动关节点调整姿态
- 不需要参考图,自己设计姿势
用法:
1. ControlNet面板点击 "Edit"
2. 出现骨骼人模型
3. 拖动关节点(肩、肘、膝盖等)
4. 设计完毕点 "Send to ControlNet"
5. Preprocessor选 "none"(已有骨骼图)
6. Generate
Canny边缘控制
Canny原理
Canny = 提取图像边缘线条,保持物体轮廓
适用场景:
- 建筑物线条控制
- 物体轮廓保持
- 构图复刻
- 简笔画上色
Canny基础用法
场景: 保持建筑物的结构线条
参考图: 一张房屋照片
ControlNet:
- Preprocessor: canny
- Model: control_canny
- Weight: 1.0
- Canny Low Threshold: 100 (边缘敏感度下限)
- Canny High Threshold: 200 (边缘敏感度上限)
Prompt:
modern architecture, sunset lighting,
professional photography, vibrant colors
效果: 保持房屋轮廓和结构,但材质、光线、风格按提示词变化
Canny阈值调节
Low/High Threshold 含义:
Low: 100, High: 200 (标准)
- 提取主要轮廓,忽略细节 推荐
Low: 50, High: 150 (低阈值)
- 提取更多细节边缘
- 适合: 精细线稿
Low: 150, High: 250 (高阈值)
- 只提取主要轮廓
- 适合: 简化构图
调节技巧:
1. 先用默认值(100/200)生成一次
2. 在ControlNet预览窗口查看提取的边缘图
3. 边缘太多太细 → 提高阈值
4. 边缘太少太粗 → 降低阈值
Canny实战案例
案例1: 建筑风格迁移
参考图: 欧式城堡照片
ControlNet:
- Preprocessor: canny
- Threshold: 100/200
Prompt:
(cyberpunk:1.3), neon lights, futuristic architecture,
night scene, holographic signs
效果: 城堡轮廓不变,变成赛博朋克风格
应用: 建筑设计方案探索
案例2: 简笔画上色
参考图: 手绘女孩线稿(黑白)
ControlNet:
- Preprocessor: canny 或 lineart
- Weight: 1.0
Prompt:
1girl, colorful illustration, anime style,
vibrant colors, detailed shading
效果: 线稿变成彩色精美插画
用时: 12秒
案例3: 照片转插画(保持构图)
参考图: 街道照片
ControlNet:
- Preprocessor: canny
- Weight: 0.8 (稍微宽松,保留艺术自由)
Prompt:
watercolor painting, artistic, impressionism,
soft brush strokes, pastel colors
效果: 照片构图不变,变成水彩画风格
Depth深度控制
Depth原理
Depth = 提取图像的前后景深信息,保持空间层次
深度图: 白色=近景,黑色=远景,灰色=中景
适用场景:
- 场景构图复刻
- 室内设计
- 风景层次保持
- 人物与背景关系
Depth预处理器选择
1. depth_midas (通用,推荐):
Preprocessor: depth_midas
精度: 高
速度: 快
适合: 大部分场景
2. depth_leres (超精细):
Preprocessor: depth_leres
精度: 极高(细节最好)
速度: 慢
适合: 复杂场景、多层次景深
3. depth_zoe (新算法):
Preprocessor: depth_zoe
精度: 高
速度: 中等
适合: 人物+场景组合
Depth实战案例
案例1: 室内设计方案
参考图: 现代客厅照片
ControlNet:
- Preprocessor: depth_midas
- Model: control_depth
- Weight: 1.0
Prompt:
luxury interior design, chinese style,
wooden furniture, warm lighting,
4k architectural photography
效果: 保持房间空间布局,家具位置,但风格变成中式
应用: 室内设计风格探索
案例2: 风景构图复刻
参考图: 山脉+湖泊+前景树木
ControlNet:
- Preprocessor: depth_leres (多层次)
- Weight: 0.9
Prompt:
fantasy landscape, magical forest,
glowing plants, aurora sky,
epic scenery, cinematic
效果: 保持山、湖、树的空间关系,变成奇幻风景
案例3: 人物景深关系
参考图: 人物在前,城市背景虚化
ControlNet:
- Preprocessor: depth_zoe
- Weight: 1.0
Prompt:
1girl, fashion photography, bokeh background,
shallow depth of field, professional
效果: 保持人物在前、背景在后的景深关系
Lineart线稿控制
Lineart vs Canny
| 对比 | Lineart | Canny |
|---|---|---|
| 提取内容 | 艺术线稿(柔和) | 硬边缘(锐利) |
| 适合 | 插画、动漫 | 建筑、物体 |
| 风格 | 手绘感 | 技术图纸感 |
Lineart预处理器
1. lineart (标准):
Preprocessor: lineart
提取: 干净线稿
适合: 动漫角色、插画
2. lineart_anime (动漫专用):
Preprocessor: lineart_anime
提取: 动漫风格线稿
适合: 二次元创作
3. lineart_realistic (写实):
Preprocessor: lineart_realistic
提取: 写实素描线条
适合: 写实素描上色
Lineart实战案例
案例1: 草稿变插画
参考图: 铅笔手绘草稿
ControlNet:
- Preprocessor: lineart_anime
- Model: control_lineart
- Weight: 1.1
Prompt:
1girl, anime style, colorful illustration,
cel shading, vibrant colors, detailed eyes
Checkpoint: Anything V5
效果: 草稿变成精美动漫插画
用时: 15秒
案例2: 照片转线稿再上色
参考图: 人物照片
Step 1: 提取线稿
- Preprocessor: lineart_realistic
- 保存提取的线稿图
Step 2: 用线稿生成
- 上传保存的线稿
- Preprocessor: none (已是线稿)
- Prompt: oil painting, classical art, detailed shading
效果: 照片→素描线稿→油画风格
Scribble涂鸦控制
Scribble用法
Scribble = 手绘涂鸦草图控制生成
适用场景:
- 快速草图创意
- 不需要精确线稿
- 3分钟从想法到成图
步骤:
1. 在画图软件(如Windows画图)随便画草图
2. 上传到ControlNet
3. Preprocessor: scribble_hed 或 scribble_pidinet
4. Prompt描述想要的效果
5. Generate
效果: 草图变精美作品
Scribble案例
案例: 5分钟从涂鸦到插画
1. 画图软件画草图(3分钟):
- 圆圈(头)+ 线条(身体)+ 三角(裙子)
- 背景画几条横线(天空地面)
2. ControlNet:
- Preprocessor: scribble_pidinet
- Weight: 0.9
3. Prompt:
1girl, beautiful, long dress, standing in field,
sunset, wind, anime style, detailed
4. Generate
效果: 粗糙涂鸦变成精美风中少女插画
适合: 快速可视化创意想法
多ControlNet组合
同时使用多个ControlNet
WebUI支持: 最多同时启用3个ControlNet
常见组合:
组合1: OpenPose + Canny (姿态+轮廓)
ControlNet 0:
- Type: OpenPose
- 参考图: 人物姿态
- Weight: 1.0
ControlNet 1:
- Type: Canny
- 参考图: 服装轮廓
- Weight: 0.8
效果: 精确控制姿态+服装细节
组合2: Depth + Canny (景深+线条)
ControlNet 0:
- Type: Depth
- 参考图: 场景深度
- Weight: 1.0
ControlNet 1:
- Type: Canny
- 参考图: 建筑线条
- Weight: 0.9
效果: 保持空间层次和建筑结构
用途: 建筑渲染、室内设计
组合3: OpenPose + Depth (人物姿态+场景深度)
ControlNet 0:
- Type: OpenPose
- Weight: 1.2
ControlNet 1:
- Type: Depth
- Weight: 0.7
效果: 人物姿态精确,场景层次自然
用途: 人物+环境合成
多ControlNet权重平衡
权重分配原则:
主控制: Weight 1.0-1.2 (如姿态)
辅助控制: Weight 0.6-0.8 (如背景深度)
微调控制: Weight 0.3-0.5 (如光影)
总和建议不超过2.5,否则过度约束
ControlNet高级技巧
技巧1: 分阶段控制
Starting/Ending Step:
起始步: 0.0 (从第0步开始)
结束步: 1.0 (到最后一步)
技巧: 调整控制的时间段
- 0.0 - 0.5: 仅前半段控制(构图),后半段自由发挥(细节)
- 0.3 - 1.0: 前期自由,中后期控制(保持创意+修正错误)
应用: 平衡控制和创造力
案例:
需求: 保持姿态,但允许AI自由创作细节
ControlNet:
- OpenPose
- Weight: 1.0
- Starting: 0.0
- Ending: 0.6 (前60%步数控制,后40%自由)
效果: 姿态正确,但服装、发型、背景更有创意
技巧2: 参考图预处理
手动调整预处理结果:
1. ControlNet面板启用 "Allow Preview"
2. 上传图后,点击 "💥" 预处理
3. 查看提取的骨骼/边缘图
4. 右键保存
5. 在PS/SAI中编辑(如删除多余线条)
6. 重新上传编辑后的图
7. Preprocessor选 "none"
8. Generate
用途: 精细调整控制信息
技巧3: 低权重叠加
创意探索模式:
ControlNet Weight: 0.3-0.5 (低权重)
效果: 轻度参考,AI有较大自由度
适合: 在保持大致构图下探索不同风格
vs
高权重(1.0+): 严格执行,适合精确复刻
技巧4: Pixel Perfect模式
Pixel Perfect (像素完美):
勾选后: 自动匹配参考图和生成图分辨率
作用: 避免缩放导致的变形
推荐: 始终开启
技巧5: ControlNet + img2img
组合使用:
1. img2img标签页
2. 上传参考图
3. Denoising: 0.5-0.7
4. 启用ControlNet (OpenPose/Depth)
5. Generate
效果: 既参考原图颜色,又控制骨架/深度
用途: 风格迁移+结构保持
ControlNet模型推荐优先级
新手必装(前3个)
1. OpenPose
用途: 姿态控制,使用频率最高
必装理由: 解决手部、姿态问题
2. Canny
用途: 轮廓控制,通用性强
必装理由: 简笔画上色、构图复刻
3. Depth
用途: 景深控制
必装理由: 场景创作必备
进阶选装
4. Lineart
用途: 线稿上色(插画向)
适合: 经常画插画的用户
5. Scribble
用途: 涂鸦草图
适合: 快速创意可视化
6. Tile (图片高清放大)
用途: 配合Hires.fix超级放大
适合: 需要生成4K+图片
7. Shuffle (色彩迁移)
用途: 保持颜色,改变内容
适合: 特殊创作需求
特殊用途
8. Seg (语义分割)
用途: 精确控制每个区域内容
难度: 高,需手动绘制分割图
9. Normal (法线贴图)
用途: 3D建模、材质设计
适合: 游戏美术、3D设计师
10. IP-Adapter (人物一致性)
用途: 保持角色外貌一致
难度: 高,需额外配置
常见问题
问题1: ControlNet不生效
排查:
1. 是否勾选 "Enable"
2. 是否上传了参考图
3. Preprocessor和Model是否匹配
4. Weight是否为0
5. 检查模型文件是否在正确目录
问题2: 生成速度变慢
原因: ControlNet增加计算量
优化:
1. 勾选 "Low VRAM" (低显存模式)
2. 减少同时启用的ControlNet数量
3. 降低参考图分辨率到512x512
4. 使用轻量化Preprocessor
问题3: 控制过度,画面僵硬
解决:
1. 降低Weight: 1.0 → 0.7
2. 调整Ending Step: 1.0 → 0.7
3. Control Mode: ControlNet is more important → Balanced
问题4: 控制不足,没效果
解决:
1. 提高Weight: 1.0 → 1.3
2. 检查Preprocessor是否正确提取(查看预览)
3. Control Mode: My prompt is more important → Balanced
4. 提示词是否与控制冲突(如OpenPose站立,提示词写sitting)
ControlNet实战项目
项目1: 动漫角色设计稿(30分钟)
需求: 从草图到成品角色设定
流程:
Step 1: 画草图(10分钟)
- 画图软件绘制角色草图
- 标注姿态、服装
Step 2: 线稿提取(5分钟)
- ControlNet: lineart_anime
- 生成干净线稿
Step 3: 上色版本(10分钟)
- 用生成的线稿
- Preprocessor: none
- Prompt: 详细描述配色、风格
- 批量生成5个配色方案
Step 4: 精修(5分钟)
- 选最佳,Hires.fix放大
- 微调提示词权重
产出: 高质量角色设定图×5
项目2: 建筑设计方案对比(20分钟)
需求: 同一建筑的多种风格方案
流程:
Step 1: 准备建筑照片
- 现代办公楼照片
Step 2: 提取结构
- ControlNet: Canny + Depth
- Canny Weight: 1.0 (保持线条)
- Depth Weight: 0.7 (保持空间)
Step 3: 批量生成风格
- Prompt 1: classical european architecture
- Prompt 2: futuristic cyberpunk building
- Prompt 3: traditional chinese architecture
- Prompt 4: eco-friendly green building
- Batch Count: 4
产出: 4种风格建筑方案,构图一致
用途: 设计提案、客户演示
项目3: 照片转多风格插画(15分钟)
流程:
原图: 女孩照片
ControlNet组合:
- OpenPose: 提取姿态
- Canny (Weight 0.5): 轻度参考轮廓
批量Prompt:
1. watercolor painting, soft pastel colors
2. oil painting, classical portrait, renaissance
3. anime style, cell shading, vibrant colors
4. pixel art, 16bit retro game style
5. vector illustration, flat design, minimalist
产出: 5种风格插画,姿态一致
用时: 每张12秒,共1分钟