Skip to content

DALL-E 图像生成架构

DALL-E 系列是 OpenAI 推出的文本到图像生成模型,从 DALL-E 1 的自回归范式到 DALL-E 2/3 的扩散模型架构,代表了图像生成技术的重大演进。

DALL-E图像生成示意

DALL-E 1:自回归图像生成

DALL-E 1 采用了类似 GPT 的自回归生成策略:

  1. 文本编码:使用 BPE Tokenizer 编码文本提示
  2. 图像 Token 化:通过 dVAE(discrete VAE)将 256×256 图像压缩为 32×32 的离散 Token 序列
  3. 自回归生成:以文本 Token 为条件,自回归生成图像 Token
  4. 图像解码:dVAE 解码器将 Token 序列还原为图像
python
# DALL-E 1 的 dVAE 编码过程
import torch

class dVAE(nn.Module):
    def __init__(self, num_tokens=8192, embed_dim=64):
        super().__init__()
        self.encoder = ConvEncoder()  # 卷积编码器
        self.codebook = nn.Embedding(num_tokens, embed_dim)
        self.decoder = ConvDecoder()  # 卷积解码器

    def encode(self, x):
        z = self.encoder(x)  # [B, embed_dim, H/8, W/8]
        # 量化:找最近的 codebook 向量
        distances = (z.permute(0,2,3,1).unsqueeze(-2) -
                     self.codebook.weight.unsqueeze(0,0,0))
        indices = distances.argmin(dim=-1)  # [B, H/8, W/8]
        return indices

    def decode(self, indices):
        z_q = self.codebook(indices)  # 量化向量
        z_q = z_q.permute(0, 3, 1, 2)
        return self.decoder(z_q)

DALL-E 2:扩散模型架构

DALL-E 2(unCLIP)采用了完全不同的架构,基于扩散模型:

  • CLIP 文本编码器:将文本提示编码为语义向量
  • Prior 模型:从文本向量生成对应的图像 CLIP 向量
  • Decoder 扩散模型:从图像 CLIP 向量生成 64×64 图像
  • Upsampler:超分辨率到 256×256 和 1024×1024

unCLIP 命名

DALL-E 2 被称为 unCLIP,因为它执行的是 CLIP 的逆过程:CLIP 将图像映射到文本空间,而 DALL-E 2 从文本空间"逆映射"回图像空间。

DALL-E 3:对齐与理解

DALL-E 3 的核心改进在于文本-图像对齐:

  • 更强的文本理解:使用更强大的语言模型理解复杂提示
  • 自动提示重写:将用户简短提示扩展为详细描述
  • 细节生成能力:在文字渲染、空间关系等方面显著提升
  • 安全过滤:内置内容安全策略

架构对比

特性DALL-E 1DALL-E 2DALL-E 3
生成范式自回归扩散模型扩散模型
图像分辨率256×2561024×10241024×1024+
文本对齐中等较好优秀
文字渲染较好
训练数据2.5 亿图文对6.5 亿图文对未公开

相关资源

最近更新