扩散模型:条件控制与 Guidance
扩散模型一旦进入真实应用,几乎不可能只做无条件生成。
你通常会希望它受到某种条件控制,例如用文本提示词描述主体、风格和约束,用类别标签指定对象,用边缘图或深度图约束几何布局,用参考图像提供身份和外观锚点,或用布局框指定画面版式。
因此,conditioning 和 guidance 其实是扩散落地时最核心的两层设计。
Conditioning 是“告诉模型你想要什么”,Guidance 是“推理时把模型更用力地往这个条件上推”。前者偏训练和结构设计,后者偏采样时的控制强度。
Prompt 像客户需求,conditioning 是画师能读懂这份需求,guidance scale 像你在旁边不断强调“更像赛博朋克一点”。强调太弱会跑题,太强可能画面僵硬、细节变怪。
1. 条件生成的统一形式
无条件扩散通常学习:
条件扩散则学习:
其中 是条件,可以是把 prompt 变成语义条件的文本编码,也可以是从参考图、首帧或局部区域中提取的图像特征,还可以是边缘、深度、姿态、分割图这类结构图,或为视频、动作生成和机器人场景提供时间约束的动作 / 视频上下文。
这意味着模型不只是回答“这张带噪图里有什么噪声”,而是回答:
“在给定条件 的情况下,这张带噪图应该往哪个方向去噪。”
2. 为什么条件控制是扩散成功的关键
如果没有条件控制,扩散模型只能回答“从噪声里生成一张合理图片”。
但真正有价值的生成任务通常要求指定内容、约束结构、保留输入并支持局部编辑:主体、风格、场景要贴合用户意图,布局、姿态、边缘和深度不能随意漂移,身份、构图、背景或未编辑区域还需要保持一致。
所以条件控制让扩散模型从“生成器”变成“可控生成器”。
3. Classifier Guidance
早期的一个思路是使用额外训练好的分类器 ,在采样时利用分类器梯度引导生成。
对应更新方向里会出现:
直觉上,扩散模型方向给出“样本应如何变得更自然”的去噪方向,分类器方向给出“样本应如何更像类别 ”的条件梯度。两者叠加后,样本会更朝目标条件靠拢。它的优点是条件信号明确、解释性强;缺点是需要额外分类器,而且每个噪声水平下都要有可用的条件判别模型,高分辨率或文本、布局、姿态这类复杂条件也很难都交给普通分类器。
4. Classifier-Free Guidance
后来更主流的是 classifier-free guidance,因为它不需要单独训练外部分类器。
训练时让模型既见到带条件样本,也见到去掉条件的样本。
采样时组合:
这里 是无条件分支,表示不看条件时的自然去噪方向; 是条件分支,表示看条件 后的去噪方向; 是 guidance scale,控制条件偏移被放大的强度。
5. 这个公式的直觉是什么
可以把:
理解成“条件 给去噪方向带来的额外偏移”。
guidance scale 则控制这个偏移被放大多少。
一个直观例子:提示词“雨夜中的霓虹便利店”
当 很小,模型更像在生成一张“普通但合理的街景”;当 合理,画面开始明显对齐到“雨夜、便利店、霓虹反光”;当 太大,则可能出现过饱和、结构扭曲和局部异常锐化。
这说明 guidance 不是越大越好,而是在“条件贴合”和“自然图像分布”之间拉扯。
6. 不同条件类型的控制方式
6.1 文本条件
这是最常见、影响最大的形式。
文本编码器把提示词变成条件表示,再通过 cross-attention 或其他注入方式送进 UNet / Transformer。
优点是语义表达强,文本可以低成本描述主体、风格、关系、材质和场景;缺点是抽象、模糊和歧义都高。
文本条件的强大之处,在于它几乎可以零成本表达非常丰富的意图:主体、风格、光照、镜头、材质、时代感、情绪都能写进 prompt。问题也恰恰来自这里。文字天然带歧义,同一句话在不同模型、不同训练数据和不同 guidance 下,可能对应完全不同的图像先验。
因此文本条件更像一种“高层意图接口”,适合给出方向,但不适合单独承担精确结构约束。真实系统里,若任务要求布局准确、姿态固定、局部编辑可控,通常就要在文本之外再叠加结构或图像条件。
6.2 结构条件
例如边缘图约束轮廓和局部边界,深度图约束前后距离和空间层次,法线图约束表面朝向,人体姿态约束骨架、关节位置和动作姿势。
这类条件比文本更“硬”。
它们强约束几何和布局,适合图像编辑和结构控制。
结构条件的本质,是把“哪里该有什么几何关系”直接交给模型,而不是让模型从文本里自己猜。边缘图、深度图、法线图、姿态骨架这类输入都属于这一类。它们并不直接规定纹理、材质和光影,但会强烈约束空间排布和轮廓走向。
这也是为什么结构条件特别适合编辑任务。因为编辑往往不是“重画一张新图”,而是“在尽量不破坏已有结构的前提下改一部分内容”。结构条件越清楚,模型自由发挥的空间越会被限制在真正允许变动的那部分。
一个直观例子:建筑草图生成
如果只有文本“现代风格三层建筑”,模型可以生成很多种不同透视和布局。
如果再给一张边缘草图,模型就会被强约束在这份结构上,只在材质、光照和细节上发挥。
6.3 图像条件
例如 image-to-image 以输入图为起点、在保留结构的同时重绘外观,inpainting 只重绘 mask 区域,风格迁移保留内容或布局但改变材质和画风,参考图生成则从参考图继承身份、角色、商品或构图线索。
这里的关键问题常常不是“生成什么”,而是“保留输入中的哪些信息,又允许改动哪些信息”。
图像条件最大的难点,是控制“继承”和“修改”的边界。若条件太强,模型可能几乎只是重绘原图,改不出用户真正想要的新属性;若条件太弱,又会把该保留的身份、构图、光照关系甚至主体轮廓一起丢掉。image-to-image、inpainting 和参考图生成,本质上都在处理这个平衡问题。
因此图像条件任务通常不只是调 guidance,还要一起调噪声强度、mask 范围、保真权重和注入层级。很多编辑系统看起来是“一个模型 + 一张参考图”,实际上背后是在仔细管理哪些信息走主干、哪些信息只做辅助偏置。
7. Conditioning 注入位置为什么重要
同样的条件,不同注入方式效果可能差很多。常见策略包括直接把结构图或 mask 与 noisy latent 拼接输入、用 cross-attention 让图像 latent 读取文本或其他条件 token、用 adaptive normalization 改变归一化尺度和偏置,或增加 ControlNet 风格的专门控制分支。直观上,低层注入更影响边缘、纹理、局部位置和精细结构,高层注入更影响主体类别、构图意图和全局语义。所以条件注入不是一个统一接口,而是和条件本身类型强耦合。
如果再说得工程一点,注入位置本质上决定了条件是在影响局部纹理、空间结构,还是全局语义。例如边缘图和深度图往往更适合进入较低层或独立控制分支,因为它们直接约束空间组织;文本条件通常更适合在跨层 attention 中不断提供语义偏置,因为它对不同尺度的特征都可能有作用。
这也是为什么“同一个条件换一种注入方式效果差很多”并不奇怪。条件本身不是抽象的标签,而是带着信息形状和约束强度来的。只有注入路径和条件性质匹配,控制能力才会稳定。
8. ControlNet 一类方法为什么有用
当条件很强、结构很明确时,只靠原模型里的普通 cross-attention 往往不够。
这时 ControlNet 一类方法的核心价值,是在保留主模型生成先验、风格和语义能力的同时,增加专门处理边缘、深度、姿态等结构条件的控制分支。这样模型既能保住画面质量、语义丰富度和基础审美,又能让姿态、轮廓、深度或布局稳定约束输出。
一个例子:姿态驱动角色生成
如果要根据人体骨架生成角色图像,模型既要听懂“角色长什么样”,也要服从“姿态必须如此”。
ControlNet 风格的方法之所以实用,就是因为它把这种强约束条件单独建模,而不是只让主干网络“顺便学会”。
9. Guidance 与采样器的耦合
这一点很容易被忽略。
guidance scale 越大,采样轨迹往往越陡、越不稳定。
因此不同 solver 对高 guidance 的兼容性不同。
这也是为什么高 guidance 场景下 DPM-Solver++ 的价值更明显:它对 guided diffusion ODE 的稳定性更友好;低阶 solver 在极强 guidance 时则更容易发散,因为一阶近似难以跟上被放大的陡峭轨迹。所以 guidance 不只是“条件控制开关”,它会改变整个数值求解问题。
这点在少步采样时尤其明显。步数越少,每一步承担的轨迹修正越重;guidance 再一放大,数值路径就更容易变陡。于是同一个模型、同一个 prompt,只是换一个 solver 或把 guidance 多调两档,最后的稳定性和细节行为就可能明显不同。
因此更成熟的做法不是把 guidance 当成单独超参,而是把它和 sampler 一起调。对交互预览、生产默认、极高控制强度这三类场景,往往都需要不同的 solver-guidance 组合。
10. 负面提示词与多条件组合
现实生成系统中,常常不仅有正条件,还会有 negative prompt、多参考图和局部区域条件:前者告诉模型应远离哪些属性、风格或伪影,后两者同时提供身份、风格、姿态、材质等锚点,并限定约束只在 mask 或指定区域内生效。
这时可以把总条件理解为某种组合:
工程上真正难的地方在于条件优先级、冲突覆盖规则和层级作用范围:文本、结构、参考图和 mask 哪个约束更强要明确;当参考图要保身份、文本要改风格时,需要定义谁让步;不同条件应影响局部纹理、空间结构还是全局语义,也要在系统里说清楚。
负面提示词本质上是在补充“不要往哪些方向去”,而多条件组合则是在同时告诉模型“该往哪些方向去”。一旦条件数量增多,系统不再只是做简单相加,而是在管理多个约束源之间的博弈。文本想改风格,结构条件想保布局,参考图想保身份,mask 又只允许局部变化,这些约束经常天然冲突。
所以多条件系统真正困难的地方,不是再多接一个输入,而是建立一套优先级与冲突处理规则。否则你会得到一种看似“什么条件都支持”,实际上每多加一个条件就更难预测行为的系统。
11. 三个真实场景
11.1 文生图广告海报
主要依赖文本条件。
如果还要求保留版式,则会叠加布局条件。
广告海报场景里,文本条件通常负责主题、风格和卖点语义,布局条件则负责标题区、主体区、留白区和品牌元素位置。这里最常见的问题不是模型不会画,而是文字、版式和视觉主体互相抢空间。因此光靠 prompt 往往不够,必须给模型更明确的版面约束。
这类任务也最能说明 guidance 的两面性。guidance 太弱,画面容易只剩泛化审美,没有广告感;guidance 太强,又可能让主体过度锐化、颜色过饱和,甚至压坏版面可读性。
11.2 人像编辑
常常是图像条件 + mask + 文本条件共同作用。
模型必须既保住未编辑区域,又只修改目标区域。
人像编辑最怕的是“编辑目标完成了,但身份一致性丢了”。例如用户只想改发色、补妆、换背景或调整服装风格,但模型却顺手把脸型、年龄感、五官比例也一起改了。这里图像条件和 mask 的价值,就是把编辑限制在可接受范围内。
因此人像编辑比纯文生图更依赖局部控制稳定性。你不仅要看改动区域是否符合文本要求,还要看未编辑区域是否保持一致、边界过渡是否自然、肤色与光照是否连续。这些都比“单张图好不好看”更重要。
11.3 视频或动作生成
还会出现时间条件、动作轨迹或参考帧条件。
这时 guidance 不再只是单帧问题,而是时序一致性问题。
一旦进入视频或动作生成,条件控制的难度会立刻放大。因为模型不只要在每一帧上听懂条件,还要让这些条件在时间上保持一致。单帧上正确的结构约束,未必能自动延续成跨帧稳定的运动;单帧上好看的 guidance,未必不会在长序列里积累抖动。
因此视频和动作场景特别需要把 guidance、时间建模和采样预算放在一起看。很多单帧上有效的技巧,一到长序列里就会暴露闪烁、身份漂移、动作不连贯或局部结构反复重写的问题。
12. 常见误区
误区 1:Guidance scale 越大越好
实际上它经常在“更贴条件”和“更像自然图像”之间拉扯。
更大的 guidance 确实常能让条件更“显眼”,但它并不免费。代价通常表现为颜色过饱和、局部纹理过硬、结构不自然,甚至数值求解更容易不稳。很多场景下,guidance 从中等调到很高,得到的不是“更好”,而是“更用力但更假”。
误区 2:所有条件都能用同样方式注入
文本、结构、参考图、mask 的信息性质完全不同。
文本更像语义偏置,结构条件更像硬约束,图像条件更像保真锚点,mask 则是在限定编辑作用域。把这些条件都当成“另一个 embedding”来处理,往往会损失控制力。条件接口设计一旦偷懒,后面就会用更多 prompt 工程和更多超参去补。
误区 3:条件控制只影响生成内容,不影响采样稳定性
高 guidance 会明显改变求解难度。
尤其在少步采样、强控制和多条件组合下,guidance 已经不只是“内容控制旋钮”,而是直接改写了去噪轨迹的形状。只看内容层,不看数值层,很容易在离线样例里被方法骗过去。
13. 推荐跳转
14. 一个总判断
扩散模型中的 conditioning 决定“生成什么”,guidance 决定“朝目标拉多狠”。
它们不是附加功能,而是现代扩散系统从实验室研究走向可控生成产品的关键分界线。
快速代码示例
1 | def cfg_eps(model, x_t, t, cond, uncond, scale=7.5): |
这段代码展示了最常见的 Classifier-Free Guidance 组合方式:同一步上分别预测条件/无条件噪声,再按 scale 做线性外推。scale 越大,条件遵从性通常越强,但过大时也更容易引入伪影或不稳定。
工程收束
Guidance 不是“把 scale 调大”这么简单,而是在条件遵从、视觉质量、稳定性和时延之间做取舍。强 guidance 可能提升条件遵从,也可能带来伪影、结构过拟合、负面提示副作用和推理成本上升;验收时要分开看基础生成、控制、系统和任务四层。
- Title: 扩散模型:条件控制与 Guidance
- Author: Charles
- Created at : 2025-05-10 09:00:00
- Updated at : 2025-05-10 09:00:00
- Link: https://charles2530.github.io/2025/05/10/ai-files-diffusion-guidance-and-conditioning/
- License: This work is licensed under CC BY-NC-SA 4.0.