DALL-E 图像生成架构
DALL-E 系列是 OpenAI 推出的文本到图像生成模型,从 DALL-E 1 的自回归范式到 DALL-E 2/3 的扩散模型架构,代表了图像生成技术的重大演进。
DALL-E 1:自回归图像生成
DALL-E 1 采用了类似 GPT 的自回归生成策略:
- 文本编码:使用 BPE Tokenizer 编码文本提示
- 图像 Token 化:通过 dVAE(discrete VAE)将 256×256 图像压缩为 32×32 的离散 Token 序列
- 自回归生成:以文本 Token 为条件,自回归生成图像 Token
- 图像解码: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 1 | DALL-E 2 | DALL-E 3 |
|---|---|---|---|
| 生成范式 | 自回归 | 扩散模型 | 扩散模型 |
| 图像分辨率 | 256×256 | 1024×1024 | 1024×1024+ |
| 文本对齐 | 中等 | 较好 | 优秀 |
| 文字渲染 | 差 | 差 | 较好 |
| 训练数据 | 2.5 亿图文对 | 6.5 亿图文对 | 未公开 |