菜单

文本条件

相关源文件

本文档解释了在Stable Diffusion v1中,文本提示是如何被编码并用于条件化图像生成过程的。文本条件化是通过将自然语言翻译成指导扩散过程的表示,从而使模型能够根据文本描述生成图像。有关模型整体架构的信息,请参阅模型架构,有关UNet骨干的具体细节,请参阅UNet架构

1. 文本条件概述

Stable Diffusion v1中的文本条件化是一个多阶段过程,它将文本提示转换为嵌入(embeddings),然后使用这些嵌入来指导扩散过程。关键组件包括:

  1. 一个文本编码器(CLIP ViT-L/14),将文本转换为嵌入。
  2. 一个交叉注意力机制,将这些文本嵌入注入UNet骨干。
  3. 一个无分类器引导(classifier-free guidance)方法,平衡文本提示的符合度和图像质量。

来源

2. 文本编码

2.1 CLIP文本编码器

Stable Diffusion v1使用预训练的CLIP(Contrastive Language-Image Pre-training,对比语言-图像预训练)ViT-L/14文本编码器将文本提示转换为嵌入。该编码器在训练和推理过程中保持冻结,意味着其权重不会被更新。

FrozenCLIPEmbedder类实现了这个文本编码器。

来源

2.2 Tokenization过程

编码前,文本提示必须先被分词。CLIP分词器将文本字符串转换为模型可以处理的token ID。

  1. 文本被分割成token(单词或子词)。
  2. 添加特殊token(例如,开始/结束token)。
  3. 序列被填充或截断到固定长度(默认为77个token)。
  4. Token ID被转换为张量格式。

来源

2.3 文本嵌入生成

文本嵌入过程:

  1. Token ID由CLIP transformer处理。
  2. Transformer输出最终的隐藏状态(嵌入)。
  3. 这些嵌入捕获了文本的语义含义。
  4. 嵌入的维度为[batch_size, sequence_length, embedding_dim]

来源

3. 交叉注意力机制

3.1 交叉注意力如何工作

交叉注意力是允许UNet模型被文本嵌入条件化的机制。它的工作方式是:

  1. 将UNet的特征视为查询(queries)。
  2. 使用文本嵌入作为键(keys)和值(values)。
  3. 计算UNet特征和文本嵌入之间的注意力分数。
  4. 使用这些注意力分数将文本信息融入扩散过程。

来源

3.2 空间转换器中的实现

在Stable Diffusion的代码库中,交叉注意力是通过SpatialTransformer模块实现的,该模块集成到UNet架构中。该模块:

  1. 对输入特征应用归一化。
  2. 重塑特征以进行注意力计算。
  3. 使用Attention类与文本嵌入执行交叉注意力。
  4. 重塑结果并将其投影回原始特征空间。

来源

4. 文本引导的扩散过程

4.1 与潜在扩散(Latent Diffusion)的集成

文本条件化与潜在扩散过程的集成如下:

  1. 在潜在空间中采样随机噪声。
  2. 在每个去噪步骤:
    • UNet预测需要去除的噪声。
    • 交叉注意力层注入文本信息来指导此预测。
    • 噪声预测受到文本嵌入的影响。
  3. 这种引导的去噪过程逐渐将噪声转化为与文本描述匹配的潜在表示。
  4. 解码器最终将潜在表示转换为图像。

来源

4.2 无分类器引导(Classifier-Free Guidance)

Stable Diffusion v1使用无分类器引导(CFG)来增强文本到图像的对齐。

  1. 在训练过程中,文本条件化会随机地有10%的时间被丢弃,以教会模型进行无条件生成。
  2. 在推理过程中,会同时生成有条件和无条件的预测。
  3. 这些预测会通过一个引导尺度(guidance scale)参数(w)进行组合。
    • 预测 = 无条件预测 + w * (有条件预测 - 无条件预测)
  4. 较高的引导尺度值可以增加对文本提示的符合度,但可能会降低图像的多样性和质量。

来源

5. 技术实现细节

5.1 文本编码器架构

CLIP文本编码器架构:

来源

5.2 注意力实现

Stable Diffusion的Transformer实现中的注意力机制:

来源

5.3 UNet集成

UNet模型通过在多个分辨率应用的“空间转换器”来集成文本条件化。

来源

6. 实践考虑

6.1 文本提示工程(Prompt Engineering)

文本条件化的有效性取决于文本提示的质量。

提示类型特性示例
简单基本描述“一张猫的照片”
详细特定属性“一张暹罗猫的照片,蓝眼睛,坐在红色沙发上”
风格化艺术指导“莫奈风格的水彩画猫”
复杂多元素“一只猫和一只狗在花园里玩耍,有花和喷泉”

6.2 文本条件的局限性

Stable Diffusion v1中的文本条件化存在一些局限性:

  1. 有限的组合理解能力(例如,“一个红色的立方体叠在一个蓝色球体上”)
  2. 无法渲染可读的文本。
  3. 以英语为中心进行训练,导致对其他语言的有效性降低。
  4. 继承自训练数据的文化和人口统计学偏见。
  5. 有限的上下文窗口(77个token)限制了提示的长度。

来源

6.3 文本编码器参数

CLIP ViT-L/14文本编码器具有以下规格:

参数
模型类型视觉Transformer (ViT)
版本Large/14
嵌入维度768
Transformer层数12
注意力头数12
最大序列长度77个token
词汇量大小49,408 tokens
模型状态冻结(未训练)

来源

7. 总结

文本条件化是使Stable Diffusion能够从文本描述生成图像的核心机制。它通过以下方式实现:

  1. 使用冻结的CLIP ViT-L/14文本编码器将文本提示编码为嵌入。
  2. 通过UNet中的交叉注意力将这些嵌入注入扩散过程。
  3. 使用无分类器引导来平衡文本符合度和图像质量。

这种方法使模型能够理解和可视化自然语言中所描述的各种概念,使其成为创意应用和内容生成等领域的强大工具。