Stable Diffusion 架构详解

189 阅读5分钟

Stable Diffusion 架构详解

Stable Diffusion 是目前最流行的开源文本到图像生成模型之一,由 Stability AI 在 2022 年发布。它将扩散模型与潜在空间表示相结合,实现了高质量、可控的图像生成,同时大幅降低了计算成本。

Stable Diffusion 的核心创新:与直接在像素空间进行扩散不同,Stable Diffusion 在潜在空间(Latent Space)中进行扩散,通过 VAE 将图像压缩到低维表示,从而将计算量减少 85-90%,使得在消费级 GPU 上也能快速生成高质量图像。

本文内容:本文详细解析 Stable Diffusion 的架构组成和工作流程,包括:

  • VAE(变分自编码器):图像与潜在空间的编码解码
  • UNet 骨干网络:去噪的核心网络,支持文本条件生成
  • CLIP 文本编码器:将文本提示转换为条件向量
  • 潜在扩散过程:在潜在空间中的条件扩散迭代去噪
  • 完整生成流程:从文本提示到最终图像的端到端过程

适用对象:本文适合希望深入理解 Stable Diffusion 工作原理的读者,建议先阅读扩散模型原理了解扩散模型的基础知识。


Stable Diffusion 模型构成

参考 理解 Stable Diffusion UNet 网络

Stable Diffusion 模型包含三个核心组件:CLIPVAEUNet。这三个组件的参数和大小分布如下:

组件参数个数文件大小占比
CLIP123,060,480492 MB12%
VAE83,653,863335 MB8%
UNet859,520,9643.44 GB80%
Total1,066,235,3074.27 GB100%

关键观察

  • UNet 是核心网络:占模型总大小的 80%,是整个生图过程的核心。UNet 最初是为医学图像分割任务而提出的,但其架构特性展现了在图像其他领域的应用潜力。后续经过扩散模型的改进,很好地应用在了图像生成上,所以 Stable Diffusion 的 UNet 实际上在原 UNet 网络架构上做了一些改造。
  • CLIP 负责文本理解:虽然只占 12%,但负责将文本提示转换为条件向量,是文本到图像生成的关键桥梁。
  • VAE 负责空间转换:虽然只占 8%,但负责图像与潜在空间之间的编码解码,是潜在空间优化的关键。

这三个组件协同工作,共同实现了从文本到图像的生成过程。下面我们将详细解析每个组件的原理和作用。


变分自编码器(VAE)

Stable Diffusion 的架构建立在 变分自编码器(VAE)之上,它作为潜在空间压缩和解压缩的骨干。VAE 由一个将输入图像映射到低维潜在空间的编码器和一个从潜在代码重建图像的解码器组成。这种压缩减少了训练和推理期间的计算负载,因为扩散过程在潜在表示上操作而不是原始像素。Stable Diffusion 中的编码器使用 8 的下采样因子,将 512×512 像素图像转换为 64×64×4 潜在张量。解码器然后将这些潜在代码上采样到原始分辨率。VAE 在捕获语义信息方面的作用确保潜在空间保留输入数据的基本特征,从而在反向过程中实现精确去噪。VAE 的效率通过在大数据集上的预训练进一步增强,使其能够泛化到不同的图像类型。

VAE 编码器的工作原理:在 Stable Diffusion 里,VAE 编码器的任务是将真实图像 xx编码为潜在向量 z=VAE.encode(x)z = \text{VAE.encode}(x)。编码过程包括:

  1. 输入图像:例如 512×512×3 RGB 图像

  2. 卷积层提取特征:多层卷积逐渐降低空间分辨率(downsample),增加通道数,保留图像的主要结构信息

  3. 生成分布参数:输出 μ\mu(均值)和 σ\sigma(标准差),表示潜在空间分布:μ,σ=fencoder(x)\mu, \sigma = f_{\text{encoder}}(x)

  4. 采样潜在向量:使用 reparameterization trick 采样:z=μ+σϵ,ϵN(0,1)z = \mu + \sigma \odot \epsilon, \quad \epsilon \sim \mathcal{N}(0,1),其中 \odot是逐元素相乘

  5. 输出潜在空间表示:例如 64×64×4 的张量,这个潜在空间 zz就是 Stable Diffusion 扩散模型的输入

为什么 VAE 要输出概率分布

  • 随机性:生成不同风格的图像,即使输入相同的图像,采样不同的 zz也会产生略微不同的结果

  • 平滑潜在空间:保证潜在空间连续,方便扩散模型逐步去噪

  • 训练稳定:VAE 的损失函数中有 KL 散度,限制潜在空间分布接近标准正态分布:

L=xx2Reconstruction Loss+βDKL(N(μ,σ2)N(0,1))RegularizationL = \underbrace{\|x - x'\|^2}_{\text{Reconstruction Loss}} + \beta \cdot \underbrace{D_{KL}(\mathcal{N}(\mu, \sigma^2) \| \mathcal{N}(0, 1))}_{\text{Regularization}}

UNet 骨干网络

UNet 架构是 Stable Diffusion 去噪能力的核心。UNet 是一个具有编码器-解码器结构、跳跃连接和注意力机制的卷积神经网络。在扩散模型的上下文中,UNet 通过预测和减去每一步的噪声来迭代细化噪声潜在表示。UNet 的编码器部分从噪声潜在空间中提取分层特征,而解码器使用这些特征重建潜在表示。跳跃连接确保在去噪过程中保留高分辨率细节,防止信息丢失。此外,UNet 结合了交叉注意力层,将 CLIP 生成的文本嵌入整合到潜在空间中。这允许模型根据文本提示条件生成图像,使生成的输出与输入文本的语义内容对齐。UNet 的复杂性通过其模块化得到平衡,使其能够为特定任务进行训练,同时保持与更广泛的扩散框架的兼容性。

U-Net 的本质:稠密预测(Dense Prediction)网络

U-Net 不仅只能做语义分割,本质上它是一个 Dense Prediction(稠密预测) 的网络结构。它可以应用于多种任务:

  • 语义分割:对每个像素预测类别标签
  • 深度估计:对每个像素预测深度值
  • 光流:对每个像素预测运动向量
  • 去噪:对每个位置预测噪声强度
  • 超分辨率:对每个位置预测高分辨率像素值

U-Net 只关心一件事:

对输入的每一个空间位置(像素),都输出一个对应位置的结果。它并不关心你在预测什么。

在 Stable Diffusion 中,U-Net 对每个潜在空间位置预测的是:该位置的噪声强度(分量)。这与语义分割中预测"每个像素属于哪个类别"在结构上完全一致,只是输出从离散标签变成了连续数值。

UNet 的输入和输出

  • 输入

    • 噪声潜在向量ztz_t

    • 时间步 tt(embedding,表示噪声强度)

    • 文本条件 cc(CLIP 编码的文本向量)

  • 输出

    • 预测噪声ϵ^t\hat{\epsilon}_t

多次迭代的本质:生成时的"多次迭代"并不是多层网络的意思,而是在同一个网络上重复多步去噪。U-Net 网络本身只有一套参数(卷积层 + 下采样 + 上采样 + 跳跃连接),每次去噪步骤都使用同一个 U-Net。迭代次数是扩散过程的时间步数 TT(例如 T=50T = 50100100),每一步去噪都是在 ztz_t上预测噪声,然后更新 zt1z_{t-1}。因此,"多次迭代"指的是逐步应用同一个网络,而不是增加网络层数。

为什么需要多次迭代:生成是从完全噪声 → 干净潜在空间。一次去噪不能完全恢复潜在空间,否则质量低。每一步只去除部分噪声:

  • 高噪声阶段 → 大范围去除噪声,形成轮廓

  • 中噪声阶段 → 精细调整结构、纹理

  • 低噪声阶段 → 微调细节和颜色

多步迭代保证最终潜在向量 z0z_0足够接近真实潜在空间。训练出来的模型只能每次抹掉一部分噪声,因为模型学到的函数 ϵ^θ(zt,c,t)\hat{\epsilon}_\theta(z_t, c, t)只能预测当前噪声水平 tt的噪声成分。换句话说,模型学的是"在当前噪声水平下应该抹掉多少噪声,以及朝哪个方向去噪"。因为 zTz_T(完全噪声)离真实潜在空间 z0z_0太远,一次预测不可能直接抹掉所有噪声。所以生成阶段必须多次迭代(从 t=Tt=Tt=0t=0),每次迭代抹掉部分噪声,潜在向量逐步逼近干净的 z0z_0,最终解码成清晰图像。

CLIP 文本编码器集成

Stable Diffusion 利用CLIP(对比语言-图像预训练)文本编码器来弥合文本提示和视觉输出之间的差距。CLIP 模型最初由 OpenAI 开发,将文本和图像映射到共享的嵌入空间,从而实现模态之间的直接比较。在 Stable Diffusion 中,CLIP 分词器将输入提示处理为 768 维向量,然后作为条件信息输入到 UNet。这种集成允许模型生成与提示的语义含义对齐的图像,即使文本是抽象的或复杂的。在 Stable Diffusion 中使用 CLIP 特别值得注意,因为它避免了训练新文本编码器的需要,而是重新利用预训练的 CLIP 模型来提取嵌入。UNet 中的交叉注意力机制确保这些嵌入与潜在图像表示有效合并,引导去噪过程朝向期望的输出。

CLIP 的作用机制

  • 训练时:用 CLIP 文本向量条件模型学习文本 → 图像关系。模型看到大量图像-文本对(例如一张猫的图 + 文本描述"a cat"),对每张图,模型学习噪声潜在空间到干净潜在空间的映射:ϵ^θ(zt,c,t)true noise\hat{\epsilon}_\theta(z_t, c, t) \approx \text{true noise}

  • 生成时:文本向量只是提供"语义方向",指导去噪。生成过程中不做图像比较,也不需要"判断清晰度"。清晰度自然由模型迭代的去噪步数和训练学到的噪声预测能力决定

关键理解:模型知道"猫"越来越清晰,不是靠实时对比 CLIP 图像向量,而是依赖训练时学习的去噪预测能力 + 文本条件引导。生成阶段不对比任何图像向量,文本条件只是引导去噪的方向,而迭代步数保证潜在向量最终收敛到干净表示。清晰度由去噪迭代和训练的噪声预测精度自然决定。

Cross-Attention 机制详解

在 Stable Diffusion 中,文本条件通过 Cross-Attention(交叉注意力) 机制注入到 U-Net 中。Cross-Attention 使用经典的 Query-Key-Value (Q, K, V) 架构:

  • Query (Q):来自潜在特征图(Latent Feature Map)

    • 在 U-Net 的中间层和上采样时使用
    • 潜在空间是最抽象、最概括的语义表达,覆盖能力最强
    • 每个空间位置都是一个 query,询问"这里应该关注文本的哪些部分?"
  • Key 和 Value (K, V):来自CLIP Text Encoder 的文本向量

    • Key 用于匹配:文本中的哪些词与当前空间位置相关?
    • Value 用于传递信息:相关的文本语义应该如何影响去噪?

Cross-Attention 的工作原理

  1. 潜在特征图的每个位置生成一个 Query
  2. 文本向量的每个词生成一个 Key-Value 对
  3. Attention 计算:Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V
  4. 结果:每个空间位置根据文本语义调整其去噪方向

例如:文本 "a red apple on a table"

  • "apple" → 圆形、主体区域 → 这些位置的 Query 会高权重关注 "apple" 的 Key
  • "red" → 颜色信息 → 影响颜色通道的 Value
  • "table" → 下方平面 → 底部区域的 Query 关注 "table" 的 Key

这样,U-Net 在预测噪声时:

  • 在"该是苹果的地方",少预测噪声(保留结构)
  • 在"不该有结构的地方",多当成噪声抹掉

潜在扩散过程

Stable Diffusion 中的潜在扩散过程是与传统扩散模型的关键区别。通过在潜在空间中操作,模型减少了正在处理的数据的分辨率,这显著降低了内存和计算需求。前向扩散过程将高斯噪声应用于潜在表示,而反向过程使用 UNet 迭代去除这种噪声。这种方法在最小化扩散步骤复杂性的同时保持高分辨率输出质量。例如,模型的潜在空间优化允许它使用 64×64 潜在代码生成 768×768 像素图像,减少了 UNet 必须处理的参数数量。潜在扩散过程通过像 DDIM(去噪扩散隐式模型)这样的技术进一步优化,DDIM 用确定性步骤替换马尔可夫链以实现更快的推理。

条件扩散迭代去噪:Stable Diffusion 的核心是条件扩散模型(Conditional Diffusion Model)。生成过程从文本提示开始,具体流程如下:

  1. 文本处理:给定文本提示 pp(例如 "a cat"),使用 CLIP 文本编码器将其转换为向量表示:c=CLIP.encode(p)c = \text{CLIP.encode}(p)。这个向量包含语义信息,如"猫"、"小动物"、"可爱"等,生成模型会把这个向量当作条件,引导图像生成。

  2. 潜在空间初始化:在潜在空间(例如 64×64×4)随机采样高斯噪声:zTN(0,1)z_T \sim \mathcal{N}(0,1)

  3. 条件扩散迭代去噪(核心生成过程):每一步迭代包括:

    • 输入:当前潜在向量 ztz_t、文本条件向量 cc、时间步 tt(标记噪声强度)

    • U-Net 预测噪声ϵ^t=U-Net(zt,c,t)\hat{\epsilon}_t = \text{U-Net}(z_t, c, t)

    • 调度器(Scheduler)去噪zt1=Scheduler(zt,ϵ^t,t)z_{t-1} = \text{Scheduler}(z_t, \hat{\epsilon}_t, t)

      • 关键理解:去噪操作不在网络里,而是由一个**固定的数学公式(Scheduler)**完成
      • 常见的 Scheduler:DDPM、DDIM、Euler、DPM++ 等
      • Scheduler 根据预测的噪声 ϵ^t\hat{\epsilon}_t 和时间步 tt,用数学公式更新潜在向量
    • 重复:从 t=Tt=Tt=1t=1,逐步减少噪声,潜在向量慢慢变得"有结构"

  4. 解码潜在空间 → 图像:去噪完成后得到最终潜在向量 z0z_0,用 VAE Decoder 将潜在向量解码回真实图像:x=VAE.decode(z0)x = \text{VAE.decode}(z_0)

直观理解:想象你想生成一只猫的图像。起点是一张纯噪声图(什么都看不出来)。每一步迭代,模型看噪声 + 文本条件("a cat"),猜哪部分像猫,去掉一部分噪声,让图像逐渐呈现猫的轮廓、姿态、颜色。重复多次:第一次迭代模糊的猫形状,中间迭代轮廓更清晰、颜色大致出现,最后迭代猫清晰完整、背景、纹理、光影都有。结果:噪声 → 真实猫图像。关键点是每一步都是去掉噪声 + 增加结构,而文本条件保证"猫"特征被保留下来。

训练与生成的关系

  • 训练阶段:把干净潜在空间 z0z_0+ 文本条件 cc→ 添加噪声 ztz_t,并训练模型学会预测噪声 ϵ\epsilon 。训练目标是最小化预测噪声和真实噪声的差距(MSE):L=ϵϵ^θ(zt,t,c)2L = \|\epsilon - \hat{\epsilon}_\theta(z_t, t, c)\|^2

  • 生成阶段:从随机噪声 zTz_T→ 逐步去噪 → 干净潜在空间 z0z_0+ 文本条件 → 得到潜在空间

  • 核心就是训练阶段学会从任何噪声水平 ztz_t+ 条件 cc,预测该减掉多少噪声 ϵ\epsilon 。生成阶段用这个能力逐步去噪,从随机噪声还原到潜在空间干净表示z0z_0

训练与生成的详细对比

  • 训练阶段详细流程

    1. 真实图像 x0x_0 → VAE Encoder → 干净潜在向量 z0z_0
    2. 文本提示 pp → CLIP Text Encoder → 文本条件 cc
    3. 随机选择时间步 tt,添加噪声:zt=αtz0+1αtϵz_t = \sqrt{\alpha_t} \cdot z_0 + \sqrt{1-\alpha_t} \cdot \epsilon(其中 ϵ\epsilon 是已知的高斯噪声)
    4. U-Net 预测:ϵ^=U-Net(zt,t,c)\hat{\epsilon} = \text{U-Net}(z_t, t, c)
    5. 训练目标:最小化预测噪声和真实噪声的差距(MSE):L=ϵϵ^θ(zt,t,c)2L = \|\epsilon - \hat{\epsilon}_\theta(z_t, t, c)\|^2
  • 生成阶段详细流程

    1. 文本提示 pp → CLIP Text Encoder → 文本条件 cc
    2. 随机采样初始噪声:zTN(0,1)z_T \sim \mathcal{N}(0, 1)
    3. 迭代去噪(从 t=Tt=Tt=0t=0):
      • U-Net 预测噪声:ϵ^t=U-Net(zt,t,c)\hat{\epsilon}_t = \text{U-Net}(z_t, t, c)
      • Scheduler 去噪:zt1=Scheduler(zt,ϵ^t,t)z_{t-1} = \text{Scheduler}(z_t, \hat{\epsilon}_t, t)
    4. 最终潜在向量 z0z_0 → VAE Decoder → 生成图像 xx
  • 关键区别

    • 训练时噪声 ϵ\epsilon 是已知的(用于计算损失)
    • 生成时噪声是预测的(用于去噪)

Scheduler(调度器)的作用

去噪操作不在 U-Net 网络里,而是由一个**固定的数学公式(Scheduler)**完成。Scheduler 的作用是:

  • 根据 U-Net 预测的噪声 ϵ^t\hat{\epsilon}_t 和时间步 tt
  • 使用数学公式计算下一步的潜在向量 zt1z_{t-1}
  • 常见的 Scheduler:
    • DDPM:使用随机噪声 η\etazt1=αt1z^0+1αt1ηz_{t-1} = \sqrt{\alpha_{t-1}} \cdot \hat{z}_0 + \sqrt{1-\alpha_{t-1}} \cdot \eta
    • DDIM:确定性步骤,η=0\eta = 0 或重参数化
    • Euler:基于欧拉方法的数值求解
    • DPM++:改进的采样方法

为什么 Scheduler 不在网络里?

  • Scheduler 是数学公式,不需要学习参数
  • 它只是根据预测的噪声和噪声调度系数,计算去噪后的潜在向量
  • 这样可以灵活更换不同的 Scheduler,而不需要重新训练 U-Net

实现细节

Stable Diffusion 的实现是模块化和可扩展的,具有用于编码、去噪和解码的不同组件。来自 diffusers 库的UNet2DConditionModel用于预测潜在空间中的噪声,以 CLIP 嵌入为条件。在训练期间,模型学习使用 UNet 的残差和注意力层将噪声潜在代码映射到其原始表示。Medium 文章中提供的代码片段说明了如何初始化 UNet 并用文本嵌入进行条件化:

from diffusers import UNet2DConditionModel
unet = UNet2DConditionModel.from_pretrained("CompVis/stable-diffusion-v1-4", subfolder="unet")
noise_pred = unet(latents, t, encoder_hidden_states=text_embeddings)["sample"]

这种实现突出了 UNet 和 CLIP 之间的相互作用,文本嵌入直接影响去噪过程。此外,模型支持像Stable unCLIP这样的变体,它通过以 CLIP 图像嵌入为条件来增强文本到图像的生成。这些实现细节强调了 Stable Diffusion 在适应不同条件模态和任务方面的灵活性。

完整生成流程示例

以文本提示 "a cat" 为例,详细说明 Stable Diffusion 如何生成对应图像:

步骤 1:文本处理

  • 输入文本:"a cat"

  • CLIP 文本编码:c=CLIP.encode("acat")c = \text{CLIP.encode}("a cat")

  • 生成 768 维向量,包含语义信息("猫"、"小动物"、"可爱"等)

步骤 2:潜在空间初始化

  • 在潜在空间(64×64×4)随机采样高斯噪声:zTN(0,1)z_T \sim \mathcal{N}(0, 1)

  • 这是生成的起点,完全随机

步骤 3:条件扩散迭代去噪(核心过程)

  • t=Tt=Tt=1t=1,逐步迭代:

    • 输入:当前潜在向量 ztz_t、文本条件 cc、时间步tt

    • U-Net 预测:ϵ^t=U-Net(zt,c,t)\hat{\epsilon}_t = \text{U-Net}(z_t, c, t)

    • 去噪更新:zt1=denoise(zt,ϵ^t,t)z_{t-1} = \text{denoise}(z_t, \hat{\epsilon}_t, t)

  • 迭代过程:

    • 初期(tt 大):模糊的猫形状轮廓

    • 中期(tt 中等):轮廓更清晰,颜色大致出现

    • 后期(tt 小):猫清晰完整,背景、纹理、光影都有

步骤 4:解码潜在空间 → 图像

  • 去噪完成后得到最终潜在向量z0z_0

  • VAE Decoder 解码:x=VAE.decode(z0)x = \text{VAE.decode}(z_0)

  • 输出:根据 "a cat" 生成的猫图像

完整流程总结

训练阶段流程

sequenceDiagram
    participant Image as 真实图像<br/>x_0 (512×512×3)
    participant VAE_Enc as VAE Encoder
    participant Text as 文本提示<br/>&#34;a cat&#34;
    participant CLIP as CLIP Text Encoder
    participant Latent as 潜在空间
    participant UNet as U-Net
    
    Image->>VAE_Enc: 输入真实图像
    VAE_Enc->>VAE_Enc: 编码为潜在向量
    VAE_Enc->>Latent: 输出干净潜在向量 z_0<br/>(64×64×4)
    
    Text->>CLIP: 输入文本提示
    CLIP->>CLIP: 编码为文本向量
    CLIP->>CLIP: 生成文本向量 c<br/>(768维,K, V for Attention)
    
    Note over Latent: 随机选择时间步 t ∈ [1, T]<br/>采样噪声 ε ~ N(0,1)
    Latent->>Latent: 添加噪声<br/>z_t = √α_t·z_0 + √(1-α_t)·ε
    
    Latent->>UNet: 输入 z_t, 时间步 t
    CLIP->>UNet: 输入文本向量 c (K, V)
    UNet->>UNet: Cross-Attention<br/>(Q: 潜在特征, K,V: 文本向量)
    UNet->>UNet: 预测噪声 ε_pred
    
    Note over UNet: 计算损失<br/>L = ||ε - ε_pred||²
    UNet->>UNet: 反向传播更新参数

生成阶段流程

sequenceDiagram
    participant Text as 文本提示<br/>&#34;a cat&#34;
    participant CLIP as CLIP Text Encoder
    participant Latent as 潜在空间
    participant UNet as U-Net
    participant Scheduler as Scheduler
    participant VAE_Dec as VAE Decoder
    
    Text->>CLIP: 输入文本提示
    CLIP->>CLIP: 编码为文本向量
    CLIP->>CLIP: 生成文本向量 c<br/>(768维,K, V for Attention)
    
    Note over Latent: 初始化随机噪声
    Latent->>Latent: 采样 z_T ~ N(0,1)<br/>(64×64×4)
    
    loop 迭代去噪 (t = T 到 t = 1)
        Latent->>UNet: 输入 z_t, 时间步 t
        CLIP->>UNet: 输入文本向量 c (K, V)
        UNet->>UNet: Cross-Attention<br/>(Q: 潜在特征, K,V: 文本向量)
        UNet->>UNet: 预测噪声 ε_pred
        UNet->>Scheduler: 输出 ε_pred, z_t, t
        Scheduler->>Scheduler: 数学公式去噪<br/>(DDPM/DDIM/Euler等)
        Scheduler->>Latent: 更新潜在向量 z_{t-1}
        Note over Latent: 逐步减少噪声<br/>从粗结构到细节
    end
    
    Latent->>VAE_Dec: 输入最终潜在向量 z_0
    VAE_Dec->>VAE_Dec: 解码为图像
    VAE_Dec-->>Text: 输出最终图像 x<br/>(512×512×3)

流程说明

  1. 文本处理路径(蓝色)

    • 文本 → CLIP Text Encoder → 文本向量 c(作为 Cross-Attention 的 K, V)
  2. 潜在空间路径(橙色)

    • 随机噪声 → 初始潜在向量 z_T → 迭代去噪 → 最终潜在向量 z_0 → VAE Decoder → 图像
  3. U-Net 去噪路径(紫色)

    • 潜在向量 + 时间步 + 文本条件 → Cross-Attention → U-Net 预测噪声 → Scheduler 去噪 → 更新潜在向量
    • 循环执行直到 t = 0
  4. 训练路径(灰色虚线)

    • 训练时:真实图像 → VAE Encoder → 潜在向量 → 加噪 → 用于训练 U-Net

关键点

  1. 文本提示 → CLIP 向量 → 条件生成

  2. 生成从随机噪声潜在空间开始

  3. U-Net 在潜在空间中逐步去噪,潜在向量越来越像真实图像

  4. 最终用 VAE Decoder 转成 RGB 图像

  5. 这个过程保证了文本语义与图像内容一致,多样化生成(随机噪声不同 → 猫的姿态或风格不同)

生成顺序的确定性:如果初始噪声 zTz_T固定,再加上固定文本条件 cc,那么生成过程几乎是固定的。从 zTz0z_T \rightarrow z_0的迭代过程顺序和每一步的去噪结果都会固定。生成过程呈现出"粗到细"的顺序:

  • 初期噪声大 → 模型恢复粗结构(轮廓)

  • 中期 → 模型恢复颜色和主要特征

  • 后期 → 模型恢复细节

这个粗到细的去噪顺序是由噪声强度和模型预测决定的,不是随机的。随机噪声才是让同一文本生成多样化图像的关键。