ControlNet 基础概念

ControlNet 是一种通过额外输入条件(如边缘图、深度图、人体姿态等)控制 Stable Diffusion 生成结果的模型。它通过复制原始模型的权重并添加可训练层实现高精度控制,适合需要构图、细节强约束的场景。

安装与配置

确保已安装 Python 3.8+ 和 PyTorch 1.12+。通过以下命令安装 ControlNet 扩展(以 Stable Diffusion WebUI 为例):

git clone https://github.com/Mikubill/sd-webui-controlnet.git

将克隆的文件夹放入 WebUI 的 extensions 目录,重启 WebUI 后可在界面看到 ControlNet 标签页。

预处理条件生成

ControlNet 依赖输入条件图,常用工具如下:

  • 边缘检测:使用 Canny、MLSD 或 HED 模型生成线稿
  • 深度图:MiDaS 或 ZoeDepth 模型生成场景深度
  • 人体姿态:OpenPose 提取骨骼关键点

示例代码(Canny 边缘检测):

import cv2
image = cv2.imread("input.jpg")
edges = cv2.Canny(image, 100, 200)
cv2.imwrite("edges.png", edges)

参数配置技巧

  1. 权重控制Control Weight(默认 1.0)决定条件影响强度,超过 1.5 可能导致过度扭曲
  2. 引导时机Starting Control StepEnding Control Step 控制条件介入的时机范围
  3. 预处理 bypass:勾选 Pixel Perfect 自动匹配分辨率,避免手动缩放失真

实战案例流程

案例:保持人物姿势的二次元风格转换

  1. 输入原图并通过 OpenPose 提取姿势关键点
  2. 在 ControlNet 中加载姿势图,选择 openpose_full 模型
  3. 提示词示例:"anime girl, detailed face, vibrant colors, 4k"
  4. 设置 Denoising Strength 为 0.4-0.6 保留原图结构
  5. 调整 Control Weight 至 1.2 强化姿势约束

常见问题解决

  • 边缘残留:降低 Control Weight 或提高 Denoising Strength
  • 色彩异常:在提示词中添加颜色描述(如 "warm color palette"
  • 构图偏移:检查预处理图与输入分辨率是否一致,启用 Pixel Perfect

高级应用组合

多个 ControlNet 可叠加使用,例如:

  • 第一个单元:Canny 控制整体轮廓
  • 第二个单元:Depth 维持场景透视
  • 第三个单元:Tile 模型增强细节修复

参数示例:

controlnet_1: {"model": "canny", "weight": 0.8}
controlnet_2: {"model": "depth", "weight": 0.5}

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐