ControlNet是什么?给生成模型装上”骨架”的控制方式
提示词写到第三版,”画面左侧三分之一的白色香水瓶,瓶盖朝上,背后是柔和的窗光”,出来的构图依旧随机:瓶子有时居中、有时躺着、有时干脆变成两个。于是有人开始堆形容词,越堆越玄,可控性却没变好。
这不是文笔问题。文字能描述”有什么”,却很难规定”在哪儿”,而广告图最不能让步的恰恰是位置、比例和透视。ControlNet 就是为解决这件事设计的。
第一步:文字控制的天花板在哪
文本编码器交给模型的是一串语义向量,本质上是”什么和什么经常一起出现”的统计关联,不含坐标信息。扩散去噪的早期步骤决定大构图(物体位置、轮廓、透视),后期步骤才补纹理和细节。这意味着:一旦前几步采样走偏,后面再堆形容词也拉不回来。
同一条提示词换个 seed 构图就完全不同,也是这个原因——seed 决定了从噪声的哪个位置开始收敛。想做像素级的空间控制,就必须给模型输入一张本身带空间信息的图:边缘图、深度图、骨架图,或者一张草图。
第二步:核心设计——零初始化的”可训练副本”
ControlNet 的做法不是改动原模型,而是复制一份去噪网络(通常是 UNet 的 encoder 部分)当作可训练副本。条件图先经预处理器变成边缘/深度/骨架图,再由一个小卷积网络编码,逐层注入到主干网络里。
关键在 zero convolution(零初始化的 1×1 卷积):接入的瞬间权重全为 0,输出与原模型完全一致,所以不会破坏原有的生成能力;训练过程中权重才从 0 慢慢长大,学会”听条件图的话”。这个设计带来两个好处——它可以像插件一样挂到任何同底模的文生图模型上,也能多个条件叠加使用,而底模本身一个权重都不用动。
第三步:常用条件图各自管什么
- Canny 边缘:锁轮廓与线条,预处理双阈值常用 low=100 / high=200,适合产品外形、建筑、包装。
- Depth 深度图:锁前后景与空间层次,适合场景透视、遮挡关系。
- OpenPose 骨架:锁人物姿态,标准 18 或 25 个关键点,带手部细节时可到 100 点以上,适合人物广告。
- Scribble / Lineart:锁手绘草稿与线稿,适合从草图直接出图。
- Normal 法线图:锁几何起伏与受光方向,材质表现更准。
- Segmentation 语义分割:锁区域布局,用色块级方式规定”哪块是天空、哪块是地面”。
- Tile / Inpaint:偏重纹理保留与局部重绘,不算严格的空间约束。
另外,IP-Adapter、Reference-only 走的是”图像特征”而不是空间结构,管的是风格与外观,和 ControlNet 是互补的两条路,别混着调参。
第四步:三个真正要调的参数
控制权重(control weight):范围 0–2,常用 0.8–1.2。太低不起作用,太高画面发僵、边缘发黑、质感退化成”描边涂色”。
生效区间(start / end step,或 control guidance ratio):常见做法是去噪前段就起控(如 0.0–0.75),最后 20%–30% 放开,让模型自由补质感、光影和细节。全程锁死最容易出塑料感。
预处理器分辨率:建议与出图短边对齐(512 / 768 / 1024)。条件图分辨率低于出图,细节约束会糊;Canny 阈值调得太灵敏,会把噪点和材质纹理也当成”结构”锁进去,画面反而变脏。
第五步:多条件怎么叠,为什么会打架
可以同时挂 2–3 个,经典组合是 OpenPose 定人 + Depth 定场景。冲突通常来自两处:同类条件重复约束(两个都管轮廓),或者权重全部拉满。解法是把生效区间错开——结构类条件在前段强控,材质/风格类条件在后段轻控,总权重别超过 2.0。
调参顺序也有讲究:先只挂一个条件跑通,确认结构对了,再加第二个;一次全挂上去,出问题时根本判断不出是谁在捣乱。
结论:一套从零开始的配置
要出一张 1024×1024 的产品图,可以这样起步:准备干净的正视角参考 → Canny 预处理(100/200)提边缘 → ControlNet 权重 1.0、生效区间 0–0.75、预处理分辨率 1024 → 固定 seed,先只看构图,别急着评价质感 → 构图确认后再改提示词调光影材质 → 最后把权重降到 0.85 补一遍细节。
别指望一句提示词解决构图,也别把权重拉到 1.5 去换”更听话”。可控性来自条件图,不来自形容词。
在 AI广告 的批量素材生产里,ControlNet 常被用来把同一版分镜复用到多个 SKU;成熟的 AIGC广告 流程会先把条件图模板沉淀下来再交给生成环节,这样换产品时不用重调构图。