これは、ベクトルQuantizated変異オートエンコーダー(https://arxiv.org/abs/1711.00937)のpytorch実装です。
Jupyterノートブックで実行できる例を使用して、著者の元の実装をTensorflowで見つけることができます。
依存関係をインストールするには、Python 3を使用してCondaまたは仮想環境を作成し、 pip install -r requirements.txt
を実行します。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
クラスz_e -> z_q
のインデックスである離散1ホットベクトルに変換するVectorQuantizer
クラスz_q -> x_hat
を定義し、元の画像を再構築するDecoder
クラスエンコーダ /デコーダークラスは、畳み込み式および逆畳み込みスタックであり、アーキテクチャに残留ブロックが含まれます。残差モデルはResidualLayer
およびResidualStack
クラスによって定義されます。
これらのコンポーネントは、次のフォルダー構造に編成されています。
models/
- decoder.py -> Decoder
- encoder.py -> Encoder
- quantizer.py -> VectorQuantizer
- residual.py -> ResidualLayer, ResidualStack
- vqvae.py -> VQVAE
潜在スペースからサンプリングするために、潜在的なピクセル値z_ij
にピクセルクンを適合させます。ここでのトリックは、VQ VAEが1チャネル画像と同じ構造を持つ潜在的な空間に画像をマッピングすることを認識することです。たとえば、デフォルトのVQ VAEパラメーターを実行すると、形状(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をトレーニングして潜在表現を保存した場合にのみ機能します。