跳转到内容
English

VAR:预测下一尺度,而非下一个 patch

交互教程

如果生成器先确定粗略图像,再并行填入更细空间信息呢?VAR 改变了自回归预测的顺序与目标。

前置阅读:VQGAN · VQ-VAE-2 · 注意力与自回归

VQGAN 将网格展平后逐码预测。VQ-VAE-2 已使用粗细网格,但各网格的先验仍逐位置生成。VAR 使用多尺度残差 tokenizer,让 Transformer 一次预测下一尺度的全部位置。

从编码特征与零重建开始。每个尺度缩放剩余残差、用共享字典量化、上采样并变换选中向量,再累加到重建中。下一残差就是尚未解释的部分。共享码 ID 不代表每尺度具有相同空间含义。

阅读顺序从左到右。点击模块,将它与计算和代码对应。代码为教学伪代码;来源链接提供论文方法或已核查的实现。

编码特征

卷积编码器产生最终 latent 特征网格。

f = encoder(x)
residual = f
f_hat = zeros_like(f)

残差量化

各尺度表示之前尺度之后的残差。

q = lookup(quantize(resize(residual, s_k)))
contribution = phi_k(upsample(q))
f_hat += contribution
residual -= contribution

下一尺度 Transformer

teacher forcing 输入只能包含先前目标尺度的信息。

next_input = resize(f_hat_coarser, s_k)
logits_k = transformer(next_input, level=k)

解码累计网格

最终图像解码器读取各尺度贡献之和。

image = decoder(f_hat)

查看固定版本来源

p(r1,…,rK)=∏k=1Kp(rk∣r<k)p(r_1,\ldots,r_K)=\prod_{k=1}^{K}p(r_k\mid r_{<k})

小演示计算边长 1、2、3、4 的网格。公开默认边长为 1、2、3、4、5、6、8、10、13、16,平方和为 680 个码位置。十次尺度预测不等于十个 token;token 数也不独立决定延迟。

改变参数,查看计算值,再把它与上方的真实模型说明对照。

解析教学模型 · 控件改变的是例子,不是训练后的研究模型。

1 × 12 × 2

教学尺度边长为 1、2、3、4;VAR 的公开尺度序列更长。

当前例子的计算值
量值
教学累计 token 数5
独立级数的名义 bits10.000

尺度 k 的输入由已累计的粗尺度重建缩放而来。块因果 mask 允许看到截至本尺度的输入,但不暴露本尺度的真实目标码。因此模型可在尺度内部交互,而不读取答案。

训练使用真实粗尺度信息,采样则由先前生成尺度构造。公开 train.py 训练第二阶段并加载 tokenizer,没有提供原始第一阶段的完整配方。代码使用可学习位置与尺度 embedding,而非 RoPE。

条件指标数值解释
ImageNet 256²;d30-re;论文表 1生成 FID ↓1.73包含拒绝采样;不是 tokenizer rFID。
默认 tokenizer 尺度序列编码位置数68010 个尺度边长平方之和。

最佳生成指标不是重建指标。VAR 比较还涉及参数量与采样选择。并行预测的依赖结构不同于完全逐码模型,这是设计取舍,而非违背概率链式法则。

为什么同尺度 attention 在这里不泄漏目标?

输入来自粗尺度重建;真实同尺度 ID 是标签,而非可见输入值。

返回学习地图

本页图形与伪代码为教学重绘。论文报告、固定实现观察和解析示例分别标记;未运行研究模型。