从一团噪声到一张图:文生图到底是怎么工作的?

先给结论:文生图 = 文本条件 + 噪声起点 + 迭代去噪 + 解码成图。

模型不是在「画」一张图,而是在一遍遍地判断:当前这团噪声里,哪些部分像猫、哪些部分像背景、下一步该去掉多少噪声。

这篇不训练模型,只讲清原理。看完你应该能回答:为什么从噪声开始、CLIP 在干什么、Latent Diffusion 省了什么、CFG 为什么会让图更「听话」、以及为什么手和文字总是翻车。


一、整条链路长什么样

flowchart LR
    P[Prompt] --> T[Text Encoder<br/>CLIP / T5]
    N[Random Noise<br/>或 latent 噪声] --> D[Denoiser<br/>U-Net / DiT]
    T -->|cross-attention| D
    D -->|重复 N 步去噪| D
    D --> V[VAE Decoder]
    V --> I[Image]

这条链路里有三个关键角色:

角色作用常见实现
文本编码器把提示词变成一串向量CLIP、T5、VLM
去噪器每一步预测「噪声长什么样」,把它减掉U-Net、DiT、MMDiT
解码器把最终 latent 还原成像素图VAE decoder

模型不是一次生成整张图,而是从纯噪声开始,迭代几十步,每一步只去掉一点点噪声。最后剩下的,就是一张图。


二、扩散:从噪声里「雕刻」出图像

2.1 前向过程:把图一点点变成噪声

训练时,先拿一张真实图片 x0,按时间步 t 逐步加高斯噪声:

x_t = sqrt(alpha_bar_t) * x0 + sqrt(1 - alpha_bar_t) * epsilon
  • t 越大,图越糊、越接近纯噪声;
  • epsilon 是随机噪声;
  • 到 t = T 时,人眼已经看不出原图。

这就像把一张照片反复复印、加噪,直到变成一团雪花。

2.2 训练:让模型学会「预测噪声」

取一张图、随机选一个 t、加噪得到 x_t,然后让模型回答:

这团 x_t 里,哪些部分是刚刚加进去的噪声?

模型输出一个和 x_t 同形状的噪声预测,和真实噪声算 MSE。训练目标就是:

让「预测噪声」尽量接近「真实噪声」

模型不需要记住每张图,它学的是不同噪声水平下,图像应该长什么样的统计规律。

2.3 反向过程:从纯噪声开始去噪

生成时:

  1. 从标准高斯噪声 x_T 开始;
  2. 模型预测当前噪声;
  3. 按采样器规则减掉一部分噪声,得到 x_{T-1};
  4. 重复几十步,直到 x_0;
  5. 解码成图片。
flowchart LR
    X0[清晰图 x0] -->|逐步加噪| XT[近似纯噪声 xT]
    XT -->|模型逐步去噪| X0b[生成图 x0']

类比:雕刻。石头里本来没有雕像,但雕塑家知道每一刀该去掉什么。扩散模型也是「去掉不属于这张图的部分」。

2.4 采样器与步数

常见的 DDPM、DDIM、Euler、DPM-Solver 等,本质都是「怎么从预测的噪声走到下一步」的不同规则。

  • 步数少:快,但细节/稳定性可能差;
  • 步数多:慢,但通常更稳;
  • 蒸馏模型(Turbo、Lightning 等)可以把步数压到几步甚至一步。

所以「20 步和 50 步差别大不大」没有统一答案,取决于模型、采样器和任务。


三、Latent Diffusion:不在像素上做扩散

直接在 512×512×3 的像素上做几十步去噪,计算量很大。Latent Diffusion 的做法是:

  1. 用 VAE encoder 把图片压到一个小得多的 latent;
  2. 在 latent 上做扩散;
  3. 最后用 VAE decoder 还原成像素图。

以 SD 1.5 为例,512×512×3 的图片可以压到 64×64×4 的 latent,空间尺寸缩小 8 倍,计算量大幅下降。

flowchart LR
    I[512×512 图片] --> E[VAE Encoder]
    E --> L[64×64 latent]
    L --> D[扩散去噪]
    D --> V[VAE Decoder]
    V --> O[512×512 图片]

这带来两个结论:

  • 扩散模型主要在「压缩后的语义空间」里工作,不是在像素上逐点画;
  • VAE 的质量很关键:它决定了最终能还原多少细节,也决定了文字、边缘、纹理的上限。

现代模型会换更好的 VAE、更高分辨率的 latent,但「压缩 → 去噪 → 解码」这个结构没有变。


四、文字是怎么「控制」图像的

4.1 CLIP:让文字和图片落在同一个语义空间

CLIP 用海量「图片 + 配文」做对比学习:让匹配的图文向量靠近,不匹配的远离。

它本身不生成图,但它提供了一个关键能力:

文本和图像可以被映射到同一个语义空间里比较。

文生图模型把 CLIP/T5 的文本向量作为条件,注入到去噪器里。

4.2 Cross-Attention:每一步都「看一眼提示词」

在去噪器内部,图像 latent 被切成很多 token(或 patch),文本也是一串 token。

Cross-attention 让图像 token 去「查询」文本 token:

  • 当前这一步,图像哪些区域应该关注「猫」;
  • 哪些区域应该关注「窗台」;
  • 哪些区域应该关注「暖色调」。

所以提示词不是只在第一步生效,而是在每一步去噪中反复参与。

4.3 CFG:让模型更「听话」

Classifier-Free Guidance(CFG)同时算两次预测:

  • 有条件:看提示词;
  • 无条件:不看提示词;
  • 然后外推:
最终预测 = 无条件预测 + scale × (有条件预测 - 无条件预测)
  • scale 小:更自由、更有创意,但可能不听话;
  • scale 大:更贴提示词,但容易过饱和、僵硬、细节崩。

负向提示词(negative prompt)本质上也是在利用「无条件/反向」这一侧:告诉模型哪些方向不要走。

提示词不是命令,而是条件。模型会尽量满足,但它理解的是统计相关性,不是符号逻辑。


五、去噪器的进化:U-Net → DiT / MMDiT

5.1 U-Net 时代

Stable Diffusion 1.5 / SDXL 使用 U-Net:

  • 卷积 + 下采样/上采样;
  • 跳跃连接保留细节;
  • 在中间层插入 cross-attention,接收文本条件。

它很适合图像,但参数量、长程依赖和扩展性有上限。

5.2 DiT / MMDiT 时代

Diffusion Transformer(DiT)把 latent 切成 patch,当成 token 序列,用 Transformer 去噪:

  • 更容易扩展参数和数据;
  • 长程依赖建模更强;
  • 成为 SD3、FLUX、Qwen-Image 等模型的基础。

MMDiT(Multimodal Diffusion Transformer)进一步把图像 token 和文本 token 分成两路,再用联合 attention 交互,避免两种模态互相干扰。

5.3 Flow Matching / Rectified Flow

DDPM 的加噪/去噪路径是弯曲的,需要较多步数。Flow Matching / Rectified Flow 直接学习一个「从噪声流向数据」的速度场,让路径更直:

  • 训练目标更直接;
  • 采样步数可以更少;
  • SD3、FLUX 系列都采用了这类方法。
代际去噪器条件注入代表
早期 Latent DiffusionU-Netcross-attentionSD 1.5 / SDXL
DiT 时代Transformercross-attention / 联合 attentionSD3、FLUX、Qwen-Image
2025–2026DiT / MMDiT + Flow Matching文本编码器 + VLMFLUX.2、Qwen-Image 2.x

2026 年的开源文生图,主流已经不是「U-Net + DDPM」了;但底层仍然是「从噪声里迭代去噪」,只是去噪器和路径变了。


六、ControlNet、LoRA、IP-Adapter 在做什么

这些名字经常和文生图一起出现,但它们不是新的生成原理,而是在基础模型上加控制。

技术作用一句话
ControlNet用边缘、深度、姿态、分割图控制构图给去噪器加一个「空间条件」分支
LoRA小参数量微调风格/角色/画风不改变大模型,只挂一个低秩适配器
IP-Adapter用一张参考图当「图像提示词」把图像特征注入 cross-attention
Inpainting只重绘 mask 区域在 latent 上遮住一部分,重新去噪

它们都建立在一个前提上:基础模型已经学会了「图像长什么样」,这些技术只是告诉它「这次按什么条件长」。


七、为什么模型还是数不清手指、写不好字

7.1 手

  • 手在训练数据里姿态多、遮挡多、像素少;
  • 模型优化的是「看起来像手」,不是「解剖学正确」;
  • 手指数量、关节方向属于精细结构,容易在去噪过程中被「平均」掉。

7.2 文字

  • 文字需要精确的字形和排版,而 VAE 压缩 + 扩散去噪会损失高频细节;
  • 文本编码器对长字符串、罕见字的表征有限;
  • 早期模型的训练数据里,带文字的图片比例也不高。

新一代模型通过更好的文本编码器、更高分辨率、专门的数据和渲染后处理,已经把文字能力拉高了很多,但长文本、复杂排版仍然不稳定。

7.3 数量、空间关系、逻辑

「三只猫,左边两只,右边一只」这类要求,涉及:

  • 计数;
  • 空间关系;
  • 属性绑定(哪只猫是什么颜色)。

扩散模型学的是图像分布,不是符号推理。CLIP 文本向量对数字和关系的表达也偏弱,所以这类 prompt 经常「大概对,但细节不对」。

7.4 一致性

每次生成都是从新的随机噪声开始,所以同一角色在不同图里可能长得不一样。参考图、角色 LoRA、编辑模型,都是为了解决「一致性」。


八、另一条路线:自回归 / 统一多模态

扩散不是唯一答案。另一条路线是:

  1. 用 VQ-VAE / tokenizer 把图片变成离散 token;
  2. 用 Transformer 像生成文本一样,逐个预测图像 token;
  3. 再解码成图片。

Parti 等工作走过这条路:把图像离散成 token,再像语言模型一样生成。Muse 也用离散图像 token,只是生成方式不同(掩码生成),但同属「先 token 化、再生成」这一大类。

路线优点难点
扩散 / Flow细节丰富、训练稳定、生态成熟步数多、推理成本高
自回归和语言模型统一、便于多模态交错图像 token 序列长、细节/速度难平衡

很多商业产品并不公开自己的完整架构,可能混合了多种模型、重写、重排、超分和安全过滤。不要看到「某个产品很强」就反推它一定用了某一种论文结构。


九、看懂一个文生图产品,应该看什么

维度问题
基础模型是 SD 系、FLUX 系、Qwen 系,还是闭源模型?
文本编码器CLIP?T5?VLM?长 prompt 能力如何?
分辨率 / VAE原生多少?是否靠超分补细节?
控制能力支持 ControlNet、参考图、局部重绘吗?
一致性角色/风格能否跨图保持?
文字渲染中文/英文/长文本是否稳定?
成本与延迟步数、模型大小、是否蒸馏?
许可权重/商用/训练数据限制是什么?

「参数大」不等于「好用」;数据、文本编码器、训练目标、后处理,任何一个环节都会影响最终体验。


十、最后,用一句话记住

文本是条件,噪声是起点,去噪是过程,解码是出口。

  • 扩散模型学的是「不同噪声水平下,图像应该长什么样」;
  • Latent Diffusion 把这件事搬到压缩后的 latent 里做,省算力;
  • CLIP/T5 把提示词变成条件,cross-attention 在每一步注入;
  • CFG 让模型更贴提示词,但太大会僵硬;
  • DiT/MMDiT + Flow Matching 是 2025–2026 的主流骨架;
  • 手、文字、计数、空间关系仍然难,因为模型学的是分布,不是符号推理。

理解了这条链路,再去看 prompt、步数、CFG、ControlNet、LoRA,就不会把它们当成「玄学开关」了。


参考