基于外部输入对扩散模型进行条件控制,需要修改模型架构或训练过程,以整合引导生成过程的额外数据。这通常通过将外部输入嵌入到模型的层中,或修改扩散过程以依赖于输入来实现。例如,像 Stable Diffusion 这样的文本到图像模型将文本提示作为外部输入,通过将其编码为嵌入并集成到模型的交叉注意力层中。这些嵌入影响每个去噪迭代中的噪声预测步骤,引导输出朝向文本中描述的期望内容。
一种常见方法是使用条件编码器,将外部输入(例如,文本、类别标签或图像)处理成潜在表示。然后将此表示与带噪声的输入拼接,或注入到模型的层中。例如,在类别条件图像生成中,将标签嵌入与时间步嵌入结合并馈送到模型的残差块中。类似地,在音频生成中,可以对频谱图或 MIDI 数据进行编码,并用于条件控制模型以生成符合特定模式的音乐。关键在于确保模型在训练过程中通过接触配对数据(例如,图像及其文本描述)来学习将外部输入与相应的输出关联起来。
另一种方法是修改扩散过程本身。像分类器引导(classifier guidance)这样的技术使用预训练的分类器在采样期间计算梯度,从而调整去噪步骤以与外部输入对齐。例如,如果基于对象类别进行条件控制,分类器的梯度会将生成的图像推向该类别的更高置信度。最近,像 ControlNet 这样的方法通过训练处理边缘图或分割掩码等输入的辅助网络,实现了细粒度的空间条件控制。这些网络输出的特征图与主扩散模型的特征融合,从而能够精确控制图像构成。开发者可以使用 PyTorch 等框架实现这些策略,通过扩展现有扩散架构,在其前向传播中包含条件控制机制。