ControlNet 用一条可训练的旁路把姿态、边缘、深度这类结构信号注入预训练的 UNet,做到"结构锁死、权重不伤"。本节拆开旁路注入的机制,给出姿态、边缘、深度三种结构信号的选型与组合范例。
上一节我们说条件都挤在注意力层,可一旦要控制的不是语义而是"骨架",文本与普通参考图就使不上劲了——我说不清"这个姿势的关节角度",草稿又不能把筋都描出来。ControlNet 的出现就是为了这个:它让模型严格地、可复现地沿着"骨架/边缘/深度"一步步画,且不必为它重训整个底座。理解它的关键在一个词:旁路。
ControlNet 的聪明在于它不改动已经训练好的 UNet 主体,而是把这堆结构信号先送进一条"旁路卷积网络",再把旁路的输出以加法或拼接的方式加回原 UNet 的对应层。这样既把结构信息喂给了模型——网络在上采样推理时会参考姿态/边缘——又完全保留原有权重,避免灾难性遗忘,也便于随时卸下旁路回到纯文本生成。
这个"不动主干、只接旁路"的手法是它对比"为每种结构重新微调底座"的最大优势,也是它能在生态里快速铺开的原因。旁路可以理解成给高压往模型的一叠浓淡得当的"构造图",模型照它来起形。
姿态骨架(pose):用一根根关键点连线表达人的关节位置。它擅长控制"这个人站在哪、手往哪儿、身体怎么转",是人物生成首选的骨架信号。局限在它只管骨架,不表达肌肉线条与姿态之外的内容。
边缘(canny):把画面主要轮廓与结构边界用线描出来。模型会"沿这条线内上色",适合做线稿上色、从线稿出成品、锁死构图边界。局限是它对低对比轮廓不敏感,细节会在描边时丢失一部分。
深度(depth):用深度图表达景物的相对远近层次,让模型知道"前景在人前、背景在深处"。适合场景结构复杂的图,能稳住透视关系。局限是深度图本身获取也要一个深度估计器,会引入额外误差。
| 结构信号 | 对应什么图纸 | 管辖的是 | 选型倾向 |
|---|---|---|---|
| 姿态 pose | 关节骨架 | 人的动作站位 | 人物、动作戏 |
| 边缘 canny | 轮廓描线 | 构图边界 | 线稿、版式 |
| 深度 depth | 远近层次 | 场景透视 | 复杂场景、建筑 |
实践里最有价值的是组合:一张图可以同时喂姿态与边缘,分别锁住动作与构图;再加文本描述风格,就构成"结构 + 文本"的完整控制链。调优要点是每类条件各配一个权重:结构权重决定"锁得多死",文本权重决定"多自由"。权重失衡通常表现为——结构飘了(骨架没被记住)或画面僵了(细节全部被结构焊死、毫无生发性)。
用一张流程示意把旁路画出来:
上面这张流程把"结构锁死"落成了四个可追踪的环节:原始结构信号经旁路卷积变换,变成能被主 UNet 理解的特征,再以加法拼回各层。主 UNet 始终未被改动——这既是它不破坏底座的原因,也是它随手可卸的秘密。
用 ControlNet 前先要有一张"图纸",图纸本身的来源就是一处常见却被低估的质量关口。姿态骨架多半来自人体姿态估计器,它对遮挡与多人场景往往画不准,关节点一旦错位,后面所有图都跟着歪。边缘图的质量取决于边缘检测阈值:阈值太高丢细节、太低全是噪点,常常需要针对不同题材重新调。深度图则由单目深度估计网络给出,对透明物、镜子、空旷天空这类"测不出距离"的区域特别不可靠。所以生产里常见的一课是:宁可先在源头校准图纸,也不要在成图时去救图纸。图纸干净,旁路才有意义;图纸本身带病,结构控制只会把病放大。
任何一种结构控制都有一个共同的"度"字。结构性太强,画面被焊成塑胶;结构性太弱,则形同虚设。经验上的折中是把单类结构权重放到中档,再通过起始时间步决定"从采样第几步才开始听结构"。一个很好用的直觉是:结构权重决定了"骨架有多硬",起始时间步决定"这张硬骨架从多早开始说话"。想让动作准、但面部和细节仍自由,就让结构晚期接入;想要从头到尾被锁死,就早接。多数默认是采样中段接入,目的就是为了"形准 + 神活"各让一步。
ControlNet 类工具里,不可见的高手是"权重与起始时间步":太早投入结构会在低层把画面焊死,太晚会只起部分作用;多数默认配置把结构在采样中途接入。跌坑常见三种:一是不理解"权重低了结构会漂",以为图崩了是模型坏了;二是同时给相互矛盾的姿态与边缘,两股力互相撕扯;三是把 ControlNet 权重当成总权重一路拉满,牺牲了文本自由度。合理做法是把单类结构权重放到中档,再按成图逐步微调。
⚠️ 常见坑:结构权重拉满 + 文本权重低,虽然结构忠实了,画面却失去了文本带来的生气;两类权重要一起看。
💡 关键直觉:ControlNet 是把"结构图纸"递给模型而不是重训模型——所以结构权重管锁死,文本权重管自由,两者在画布上掰手腕。
结构控制的思路并不仅限单张静图。当场景从"画一张"变成"让一张脸/一个动作在连续帧里保持",ControlNet 的思路同样被借来用:比如先用姿态序列锁住每一帧的骨架,再让它跟随同一套身份与风格去生成视频或图像序列。这样做的意义在于,把"结构锁死"从空间域扩展到时间域——不仅每一帧要形准,帧与帧之间还得连贯。很多"换背景不换人""保持同一角色动作"的生产需求,底层都是这种"时间上接力复用结构"的手艺。这里的注意点与单张同理:结构要准、权重要稳、起始时间步要一致,否则画面会在连续帧之间抖闪。
最后一个值得停下来想的问题是:ControlNet 为什么能快速铺满整个工具生态,几乎成了"可控生成"的代名词?答案还是那个"旁路"。因为它不重训底座,任何人都能基于同一个底盘挂上自己对结构信号定制的旁路,并且不会彼此破坏。于是姿态、边缘、深度、甚至更冷门的法线、涂鸦,都被社区不过街巷地一一接上。对使用者而言,好处是选择多、可叠加、门槛低;代价是参数不少、选型要看图说话。这一节你已经拿到打开这些旋钮的地图——结构信号从哪来、旁路怎么接、权重及时机该怎么调,都不再是黑盒。
结构锁死的本领已就位,下一节补一块拼图——把"某个角色/画面语义"约出来,看轻量 LoRA 与提示反转怎么各显神通。