vqvae
1.0.0
这是量化量化变量自动编码器(https://arxiv.org/abs/1711.00937)的pytorch实现。
您可以在此处在TensorFlow中找到作者的原始实现,并在Jupyter笔记本电脑中运行一个示例。
要安装依赖项,请使用Python 3创建CONDA或虚拟环境,然后运行pip install -r requirements.txt
。
要运行VQ-VAE,只需运行python3 main.py
如果要保存模型,请确保包括-save
标志。您还可以在命令行中添加参数。默认值如下:
parser . add_argument ( "--batch_size" , type = int , default = 32 )
parser . add_argument ( "--n_updates" , type = int , default = 5000 )
parser . add_argument ( "--n_hiddens" , type = int , default = 128 )
parser . add_argument ( "--n_residual_hiddens" , type = int , default = 32 )
parser . add_argument ( "--n_residual_layers" , type = int , default = 2 )
parser . add_argument ( "--embedding_dim" , type = int , default = 64 )
parser . add_argument ( "--n_embeddings" , type = int , default = 512 )
parser . add_argument ( "--beta" , type = float , default = .25 )
parser . add_argument ( "--learning_rate" , type = float , default = 3e-4 )
parser . add_argument ( "--log_interval" , type = int , default = 50 )
VQ VAE具有以下基本模型组件:
x -> z_e
Encoder
类VectorQuantizer
类,将编码器输出转换为离散的单速矢量,该向量是最接近的嵌入向量z_e -> z_q
的索引z_q -> x_hat
并重建原始图像Decoder
类编码器 /解码器类是卷积和反向卷积堆栈,其中包括其体系结构中的残留块,请参见Resnet Paper。残留模型由ResidualLayer
和ResidualStack
类定义。
这些组件在以下文件夹结构中组织:
models/
- decoder.py -> Decoder
- encoder.py -> Encoder
- quantizer.py -> VectorQuantizer
- residual.py -> ResidualLayer, ResidualStack
- vqvae.py -> VQVAE
要从潜在空间进行采样,我们将PixelCNN拟合在潜在像素值z_ij
上。这里的诀窍是认识到VQ VAE将图像映射到具有与1通道图像相同结构的潜在空间。例如,如果运行默认的VQ VAE参数,则将RGB映射的形状图像(32,32,3)
到具有形状的潜在空间(8,8,1)
,该空间等同于8x8灰度图像。因此,您可以使用PixelCNN将分布拟合在8x8 1通道潜在空间的“像素”值上。
要在潜在表示上训练PixelCNN,您首先需要遵循以下步骤:
np.save
API保存离散的潜在空间表示。在quantizer.py
中,这是min_encoding_indices
变量。utils.load_latent_block
函数中指定保存的潜在空格数据集的路径。要运行PixelCNN,只需键入
python pixelcnn/gated_pixelcnn.py
以及任何参数(请参阅“ argparse语句”)。默认数据集是LATENT_BLOCK
,只有在您训练了VQ VAE并保存潜在表示的情况下才能使用。