paper
Motivation
为了增强VAE的生成质量, 通常的方法是增加空间分辨率(即, feature的分辨率). 但是如果使用自回归生成, 增加feature的size会导致建模长度指数级增加, 计算成本过高. 因此RQ-VAE提出: 不再增加feature size, 而是增加quantize的深度.
Method
RVQ
- 首先将原始的图片经过Encoder, 得到feature: . 其中:
- 是原始的图片
- 是encoder, 在这里使用了ResNet的架构, 使用CNN+Residual Blocks
- 是隐空间向量, 或者说叫做feature vector
- 初始残差:
- 对于每一层(深度, 用表示), 首先计算quantize: , 其中:
- 表示codebook中第个向量. 实际上, 用表示更加合理
- 是codebook的大小
- 表示残差, 是深度为的时候的残差, 计算方法为
- 表示, 在深度为的时候, 应该使用codebook中序号为的基向量
- 最终, 将所有选中的基向量进行加和, 得到最终的重建结果:
这个方法类似:
假设有这几种面值的钱币, 需要凑出来173.6, 应该如何做:
- 第一步quantize选择, 残差为
- 第二步quantize选择, 残差为
- …
RQ-Transformer
至于推理, 提出了RQ-Transformer架构. 使用两个Transformer, 一个生成当前patch的隐变量, 一个自回归生成当前隐变量对应的基向量序号序列. 然后, 根据序号求和得到最终的feature .
优点:
- 从粗糙到精细的建模方式
- 显著减少feature的size, 降低compute cost
- codebook复用率高, 无需很大(但仍然效率低, 利用率不高)
缺点:
- RQ-Transformer建模会有误差累积
- 不能仅依赖reconstruction loss进行训练, 会导致重建保真度降低, 需要引入类似GAN的对抗损失进行训练
- 训练时间成本高