ControlNet:结构条件注入

进阶 约 30 分钟 ControlNet结构控制条件注入零卷积进阶专题
前置知识点(建议先学)
学习状态:

一句话定义

ControlNet 把线稿、深度图、人体姿态等结构条件变成可注入扩散网络的额外分支:复制一份去噪网络作可训练副本,用零卷积把结构特征接回冻结的主干,实现「构图听控制图、内容听提示词」的分工。

为什么重要

在 ControlNet 之前,文字条件只能控制「画什么」,控制不了「怎么摆」——构图、姿态、透视全凭模型与种子心情。ControlNet 把生成从「抽卡」变成「可设计」,是开源生态从玩具走向生产力工具的分水岭;其「冻结主干 + 旁路注入」的模式也成了后续各类控制适配器(T2I-Adapter、IP-Adapter 等)的通用架构模板。

前置知识

kp-011(交叉注意力与条件机制);kp-008(三件套架构,理解「在主干之外加东西」意味着什么)。

核心概念

原理与机制

架构一句话:y = F(x; 主干) + Z( … Z(F'(x; 副本, 条件)) … ),副本处理条件后经一串零卷积加回主干各层。三个设计要点环环相扣:

  1. 为什么要副本而不是直接微调主干:直接微调会破坏数十亿参数里压缩的分布知识,且每个条件都要一份全量模型;副本只在条件分支上学习(约主干参数量的一个小比例),主干不动,一个基座可挂任意多个控制分支。
  2. 为什么要零卷积:若旁路初始随机,训练第一步就向主干注入垃圾信号,把预训练能力打散;零卷积保证 t=0 时旁路恒为零输出,主干行为与原模型完全一致,训练从「完美起点」出发逐步学习「何时、在哪注入多少结构信息」。这是全文最巧的一步,也是「控制不毁模型」的数学保证。
  3. 训练信号怎么来:对训练图自动提取各种控制图(对图跑 canny 得线稿、跑深度估计得深度图),让网络学会「给定这张线稿 + 这段提示词 → 还原那张图」,从而把「结构 → 图像」的映射压进副本。

使用端的旋钮:控制强度(旁路输出缩放,0~1,kp-004 三角权衡的又一实例——强度大则构图严格但细节可能僵硬);结束控制步(只在去噪前半程生效,构图由前半程决定、细节交还提示词,是「控制构图不控制笔触」的常用技巧)。多 ControlNet 可叠加(如线稿 + 深度),权重此消彼长需实测调和。

公式与推导

零卷积的初始性质可一句话证明:卷积核权重 W=0 则对任意输入输出为 0,旁路贡献为零;训练中梯度经零卷积反向传播仍非零(乘的是输入而非权重为零的路径……准确说:对 W 的梯度等于上游梯度乘输入 x,x 非零故可学习),网络得以从全零平滑长出控制能力——「初始无扰动、最终可学习」两全。

图示

控制图(线稿/深度/姿态)→可训练副本(零卷积输出初始为 0)⊕冻结主干(U-Net)→ε̂

文本条件(kp-011)与控制条件并行注入:文本管内容,控制图管布局。

直观类比

像给主笔画家配了一位「构图督导」:画家(主干)手艺不变(冻结),督导(副本)把蓝图钉在画架旁(条件注入),两人之间装了一个初始关闭的阀门(零卷积)——训练就是慢慢学会拧开阀门到合适开度(控制强度)。

实例或案例

常见误区

自测题

  1. 零卷积解决了什么矛盾?

答案要点:训练初期旁路不得干扰预训练主干(初始输出为 0),同时梯度可传播、权重可学习。

  1. 为什么用可训练副本而不是微调主干?

答案要点:保护基座通用能力、参数开销小、一个基座可挂多个条件分支。

  1. 「结束控制步」设为 0.5 的效果是什么?

答案要点:控制只在去噪前半程生效——构图被约束、细节阶段交还文本条件,画面更自然。

与其他知识点的关系

kp-015 是另一条「不改主干」的适配路线(低秩权重而非旁路);kp-016 的 IP-Adapter 沿用了同样的旁路注入思想但注入的是图像语义;kp-025 中「结构崩坏」的标准解法即本节。

延伸阅读

ControlNet 论文(ICCV 2023)第 3 节「 naïve 方案为何失败」的消融叙述值得精读——它解释了零卷积并非花哨技巧而是必需品。

相关知识点