Motivation

为了增强VAE的生成质量, 通常的方法是增加空间分辨率(即, feature的分辨率). 但是如果使用自回归生成, 增加feature的size会导致建模长度指数级增加, 计算成本过高. 因此RQ-VAE提出: 不再增加feature size, 而是增加quantize的深度.

Method

RVQ

  1. 首先将原始的图片经过Encoder, 得到feature: . 其中:
    • 是原始的图片
    • 是encoder, 在这里使用了ResNet的架构, 使用CNN+Residual Blocks
    • 是隐空间向量, 或者说叫做feature vector
  2. 初始残差:
  3. 对于每一层(深度, 用表示), 首先计算quantize: , 其中:
    1. 表示codebook中第个向量. 实际上, 用表示更加合理
    2. 是codebook的大小
    3. 表示残差, 是深度为的时候的残差, 计算方法为
    4. 表示, 在深度为的时候, 应该使用codebook中序号为的基向量
  4. 最终, 将所有选中的基向量进行加和, 得到最终的重建结果:

这个方法类似:

假设有这几种面值的钱币, 需要凑出来173.6, 应该如何做:

  1. 第一步quantize选择, 残差为
  2. 第二步quantize选择, 残差为

RQ-Transformer

至于推理, 提出了RQ-Transformer架构. 使用两个Transformer, 一个生成当前patch的隐变量, 一个自回归生成当前隐变量对应的基向量序号序列. 然后, 根据序号求和得到最终的feature .

优点:

  1. 从粗糙到精细的建模方式
  2. 显著减少feature的size, 降低compute cost
  3. codebook复用率高, 无需很大(但仍然效率低, 利用率不高)

缺点:

  1. RQ-Transformer建模会有误差累积
  2. 不能仅依赖reconstruction loss进行训练, 会导致重建保真度降低, 需要引入类似GAN的对抗损失进行训练
  3. 训练时间成本高