← 返回题目列表

文生图模型是如何把文本注入扩散过程的?

高频 中等 第 7 / 25 题 更新于 2026/09/25
文生图交叉注意力CLIP条件生成
学习 AI 实战项目

简化版

文生图模型先把提示词编码成一串上下文化向量,再通过交叉注意力、联合注意力或特征调制等机制注入去噪网络。经典 Latent Diffusion 的 Cross-Attention 让图像特征提供 Query、文本特征提供 Key/Value,使不同空间特征能读取不同 Token;它提供软条件影响,但不保证词与区域精确一一对应。时间步或噪声强度也必须作为独立条件注入。

详细版

从文本到图像的完整链路

  1. 文本编码:提示词 → tokenizer → 文本编码器(CLIP/T5)→ 一串 token 嵌入 c(如 77×768)。
  2. 条件注入去噪:U-Net 在每一步预测噪声时,把 c 通过交叉注意力融合进图像特征:ε_θ(x_t, t, c)。
  3. 引导强度:配合 Classifier-Free Guidance,用 guidance scale 控制对文本的服从度。

交叉注意力怎么工作

在 U-Net 的注意力层里:

Q = W_Q · (图像潜特征)      # 来自当前被去噪的图像
K = W_K · c,  V = W_V · c    # 来自文本嵌入
Attention = softmax(Q·Kᵀ/√d) · V
  • Query 来自图像:每个空间位置发出「我该参考文本的哪部分」的查询。
  • Key/Value 来自文本:提供「文本里有哪些语义、对应什么内容」。
  • 结果是每个位置按与各文本 token 的相关度,加权吸收文本信息。

为什么是交叉注意力而不是简单拼接

  • 交叉注意力是空间自适应的:不同图像位置可以对文本 Token 分配不同权重,例如车附近的特征可能更多读取 red/car。
  • 简单注入一个池化文本向量不会显式保留逐 Token 的读取接口;不过 Cross-Attention 权重也不是可靠分割图,不能据此保证关系绑定。

文本编码器的选择

  • SD1.x:CLIP ViT-L/14 text encoder。
  • SDXL:CLIP ViT-L + OpenCLIP ViT-bigG 双编码器。
  • Imagen / SD3:引入 T5 等大语言模型编码器,长文本与复杂语义理解更强。

完整版教学

一、条件生成的一般框架

无条件扩散学的是 p(x),随机生成;文生图要学的是 p(x|c)——给定文本 c 时图像的分布。技术上只需把去噪网络从 ε_θ(x_t, t) 扩展成 ε_θ(x_t, t, c),让它「看着条件去噪」。

问题就归结为:c 这个条件,用什么方式喂进网络最有效? 常见有三种注入方式,文生图主要用第三种:

  1. 相加/拼接(用于标量或全局条件):把条件编码成向量,加到特征或时间嵌入上。适合类别标签、时间步这类全局、无空间结构的条件。
  2. 自适应归一化(AdaLN/FiLM):用条件生成缩放和偏移参数去调制特征。适合全局风格类条件,DiT 用得多。
  3. 交叉注意力(用于序列条件):适合文本这种变长、有语义结构的条件,能做空间自适应对齐。文生图的主力。

二、为什么文本必须用交叉注意力

文本有两个特点决定了它适合交叉注意力:

  • 变长且序列化:一句提示词有若干 token,长度不固定。交叉注意力天然处理变长序列。
  • 需要空间相关的条件读取:图像不同区域可能响应不同词。交叉注意力让每个空间 Token 分别对文本加权,但一个空间 Token 往往对应潜空间区域而非单个像素。

举例:“a cat wearing a red hat”。理想情况下,猫头附近的 Query 会更多读取 red/hat,身体区域更多读取 cat;训练只通过图文目标间接促成这种模式,并没有显式分割监督。因此注意力可能扩散、属性可能错绑,这套机制增强了组合条件能力,却不等于模型已经精确理解空间关系。

易错点:Cross-Attention 图可用于可视化或 Prompt-to-Prompt 一类编辑控制,但“注意力较高”不等于该词对像素具有严格因果归属,编辑影响也可能越过目标区域。

三、时间步条件:另一路不可忽视的注入

除了文本,时间步或噪声强度也是必须注入的条件:同一个带噪输入在不同 SNR 下对应的最优预测函数不同。常见 U-Net 用下面的方式编码,但并非只允许“相加”这一条路线:

  1. 把 t 或 log-SNR 用正弦/Fourier 特征或可学习嵌入变成向量;
  2. 过一个小 MLP 得到时间嵌入 t_emb;
  3. 在 U-Net 的多个残差块里把 t_emb 加到特征,或生成 scale/shift 调制参数。

面试常把「文本条件」和「时间条件」一起问,记住:文本走交叉注意力(空间自适应),时间走嵌入相加/调制(全局)。

四、CLIP 文本编码器的作用与局限

早期 Stable Diffusion 使用 CLIP 文本塔的隐藏状态,借助图文对比预训练获得视觉相关的语义表示。去噪网络仍需在扩散训练中学习如何读取这些状态,不能理解成直接把 CLIP 最终投影向量当作像素说明书。

  • SD 1.x 所用 CLIP 文本塔上下文窗口较短,对长文本、计数与复杂关系的表示有限;去噪架构、训练 Caption 和数据对齐质量也共同决定这些失败。
  • 更强或更多文本编码器能改善部分语义覆盖,但不会单独保证计数与空间关系正确,还需要训练数据和生成骨干配合。

五、把整条链路串起来(文生图一次前向)

  1. “a red car on green grass” → tokenize → CLIP → 文本嵌入 c;
  2. 当前潜图 z_t 进 U-Net;
  3. U-Net 每个残差块注入时间嵌入 t_emb;每个注意力块用交叉注意力融合 c;
  4. U-Net 输出噪声预测 ε_θ(z_t, t, c);
  5. 配合 CFG:再算一次无条件 ε_θ(z_t, t, ∅),外推放大;
  6. 采样器据此得到 z_{t-1},循环若干步 → z₀ → VAE 解码 → 图像。

六、跟踪一个文本 token 如何影响图像

设文本编码器输出 77 个 token、每个 768 维,U-Net 某层有 1024 个空间位置。Cross-Attention 让 1024 个图像 query 对 77 个文本 key 打分,形成 1024×77 的相关度矩阵;“red”相关 token 可在对应空间位置获得更高权重,从而改变该位置的去噪方向。

Q: image features [1024, d]
K,V: text features [77, d]
attention map: [1024, 77]
output: text-conditioned image features [1024, d]
失败类型示例应测能力
属性错绑红球变成红盒属性绑定
数量错误三只生成两只计数
关系错误猫没有在桌下空间关系

文本编码器的上下文长度会截断过长提示,词序、权重语法和 tokenizer 也会改变条件表示。评测不能只看 CLIP 相似度,还应检查属性绑定、数量、空间关系和同 seed 下的可控变化,否则模型可能只抓住关键词却组合错误。

七、常见误区与追问

  • 误区:文本只在开头喂一次。 经典条件扩散通常在每个去噪时间步的指定条件层读取文本;并非网络的每一层都一定含 Cross-Attention。
  • 误区:Cross-Attention 图就是词的精确分割图。 权重是内部软路由证据,会跨层、跨头变化,不能直接解释成因果像素归属。
  • 追问:Q/K/V 分别来自哪? Q 来自图像特征,K、V 来自文本嵌入。这是交叉注意力和自注意力的关键区别(自注意力 QKV 全来自图像自身)。
  • 追问:SD 为什么常数不清物体个数、搞错空间关系? 文本表示、训练 Caption、图文对齐粒度和去噪网络的组合建模都会影响;更强文本编码器只能缓解其中一部分。
  • 追问:负面提示词怎么注入? 走 CFG 的无条件分支位置,把 ∅ 换成负面提示嵌入,让生成远离它。

八、加强记忆

记住两条条件通道:文本是序列条件,经典 LDM 由图像 Query 通过 Cross-Attention 读取文本 Key/Value;时间或噪声强度是全局条件,常经 Fourier/正弦嵌入和 MLP 注入残差块。Cross-Attention 提供空间相关的软读取,不是词—像素硬绑定;CFG 放大条件差分,也不补足关系推理。计数或方位失败要同时检查文本编码器、Caption/数据对齐和去噪骨干,而不能只归因于 CLIP。