它给扩散模型补了什么
一条纯文字提示词对布局几乎没有控制力。你写「低角度、人物举起一只手」,每跑一次构图都不一样。ControlNet 补的就是这块:训练一份模型编码器的副本去接收第二路输入,也就是那张结构图,并在每一个去噪步骤里注入它。
结构图是预处理器从你给的图里提取的。openpose 预处理器把照片压成一个火柴人;深度预处理器把它变成一张灰度距离场;canny 预处理器把它变成黑底白线。活下来的部分就是会被强制执行的部分,整个设计思路就在这里:把你希望模型重新发挥的东西全部扔掉,只留下你要它守住的那一部分。
预处理器怎么挑
| 预处理器 | 保住什么 | 适合 |
|---|---|---|
| openpose | 关节位置 | 改姿势、留住一个手势 |
| depth 深度 | 空间布局、体积 | 室内、镜头几何、产品摆位 |
| canny / lineart | 精确轮廓 | logo、包装、机械形体 |
| scribble / softedge | 粗形状 | 用自己的草图定布局 |
| tile | 局部细节 | 放大时不让它乱加内容 |
这一步最常见的错误是默认就选 canny。canny 会把轮廓照抄,源图如果是某个真人的照片,生成出来的人就继承了那个人的体型和发型。你要的是姿势、不是这个身体时,正确的工具是 openpose。
真正要调的三个数
control weight(控制权重) 决定结构图说话有多大声,一般范围 0 到 2,真正好用的区间是 0.5 到 0.9。调高不等于更准,只是更僵。
引导开始步数 是从去噪进度的哪个比例开始施加条件,通常留在 0。布局就该留 0,因为构图是在最早那几步定下来的。
引导结束步数 是什么时候停,这是最被浪费的一个旋钮。把它设到 0.6 或 0.7,等于把最后三分之一的过程还给模型,而明暗、材质、颗粒感恰好是在那里加上去的。绝大多数「出图像描线稿」的抱怨,改这一个数就好了。
什么时候用它是白费劲
它补不了知识。权重本身画不出一匹像样的马,那么再完美的马的深度图,只会得到一匹形状正确的烂马。它也救不了自相矛盾的提示词:提示词写「坐着」,喂进去的却是站姿骨架,出来的就是一个从髋部折断的折中产物。
在托管平台上你通常看不到 ControlNet 这个开关,对应的入口是一个参考图槽位,标签可能叫「结构参考」或「风格参考」,预处理器已经替你选好了。调的直觉是通用的:出来的东西像照抄,就削弱参考或缩短它的作用时长;出来的东西像没看参考,那大概是这张结构图本身太含糊。