跳转到内容
English

FlowMo:Transformer 通过 flow 重建图像

交互教程

FlowMo 是由压缩图像编码提供条件、使用 Transformer flow 解码器重建的直接例子。

前置阅读:DiTo · DiT · TiTok

TiTok 证明全局 slots 可替代空间瓶颈;DiTo 证明迭代去噪可训练图像 tokenizer。FlowMo 结合 Transformer 离散瓶颈与 flow 解码器,并通过后训练改善采样重建。这是理解设计的对照,不表示架构相同。

双流 Transformer 在图像 patch 与 latent queries 间交换信息。无查表量化 LFQ 将编码输出转为二进制码。另一个双流 Transformer 根据带噪图像、编码和时间预测像素空间速度。重建需要采样条件分布,不是一次调用直接得到 RGB。

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

双流编码器

queries 汇聚图像信息,LFQ 将取值转为 bit。

z = encoder(image_patches,latent_queries)
c = lfq(z)

条件 flow 解码器

图像坐标与 slot 身份采用不同位置约定。

v = decoder(noisy_image,c,t)
x_estimate = noisy_image - t*v

迭代重建

每个积分步都调用 Transformer。

state = noise
for t,t_next in schedule:
    state += (t_next-t)*decoder(state,c,t)

查看固定版本来源

Lflow=E∥vθ(xt,t,c)−(ϵ−x)∥2\mathcal{L}_{\mathrm{flow}}=\mathbb{E}\|v_\theta(x_t,t,c)-(\epsilon-x)\|^2

固定代码定义 xₜ=(1−t)x+tε、目标 ε−x,以及单步干净估计 xₜ−t v。采样向更小 t 移动。演示完整采用这套约定。论文部分公式采用不同符号写法,不能与代码更新混抄。

code 数必须说明单位。FlowMo-Hi 内部有 256 个 slot,每个 56 bit;结果表将其计为 1024 个 14-bit code。两种描述均为 14336 名义 bit,在 256² 像素上是 0.21875 bpp,尚未考虑熵编码或封装。

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

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

x = 2, t = 0ε = −1, t = 1

直线路径速度已知;学习模型需要估计速度,本演示不衡量其误差。

当前例子的计算值
量值
t0.500
x_t = (1 − t) × 2 + t × (−1)0.500
v = ε − x-3
Δt = −t / steps-0.100
一次反向更新0.800

阶段 1A 联合训练 tokenizer,使用 flow loss、单步 LPIPS-VGG 项及 LFQ 项。阶段 1B 冻结编码器,通过八步重建链反向传播,结合 ResNet 感知目标与 flow loss。后续独立 MaskGIT 建模 codes。因此,无 GAN 不等于只有 diffusion L2;八步后训练链也不自动等于评估步数。

条件指标数值解释
ImageNet-256,Lo,256 × 18 bitrFID ↓ / PSNR ↑0.95 / 22.075 万验证图像;论文主表
ImageNet-256,Hi,1024 × 14 bitrFID ↓ / PSNR ↑0.56 / 24.93code 单位不同于内部 slot 数

报告的 Lo/Hi 编码器加解码器约 945M 参数,规模较大。质量比较须计入采样调用、随机种子和后训练。重建保真度不能证明文字对齐。代码使用多轴 RoPE,但广播 latent 索引代表 slot 身份,并非物理三维点。

重建采样时 flow 解码器能看到原始干净图像吗?

它收到压缩编码和带噪状态;干净图像是训练目标,不是采样输入。

返回学习地图

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