هذا هو تنفيذ Pytorch للدلو التلقائي المتغير المتجه (https://arxiv.org/abs/1711.00937).
يمكنك العثور على التنفيذ الأصلي للمؤلف في TensorFlow هنا مع مثال يمكنك تشغيله في دفتر Jupyter.
لتثبيت التبعيات ، قم بإنشاء كوندا أو بيئة افتراضية مع Python 3 ثم تشغيل 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 على مكونات النموذج الأساسية التالية:
Encoder
التي تحدد الخريطة x -> z_e
VectorQuantizer
التي تحول إخراج التشفير إلى متجه منفصل واحد هو فهرس أقرب ناقل التضمين z_e -> z_q
Decoder
التي تحدد الخريطة z_q -> x_hat
وإعادة بناء الصورة الأصلية فئات التشفير / وحدة فك الترميز هي مداخن تلافيفية وذاتية ، والتي تشمل الكتل المتبقية في الهندسة المعمارية ، انظر ورقة Resnet. يتم تعريف النماذج المتبقية من قبل فصول ResidualLayer
و ResidualStack
.
يتم تنظيم هذه المكونات في بنية المجلد التالية:
models/
- decoder.py -> Decoder
- encoder.py -> Encoder
- quantizer.py -> VectorQuantizer
- residual.py -> ResidualLayer, ResidualStack
- vqvae.py -> VQVAE
لعينة من المساحة الكامنة ، نناسب pixelcnn على قيم البكسل الكامنة z_ij
. تتمثل الحيلة هنا في إدراك أن VQ VAE يقوم بتخطيط صورة إلى مساحة كامنة لها نفس بنية صورة قناة واحدة. على سبيل المثال ، إذا قمت بتشغيل معلمات VQ VAE الافتراضية ، فسوف تقوم بـ RGB Map Images للشكل (32,32,3)
إلى مساحة كامنة ذات الشكل (8,8,1)
، والتي تعادل صورة رمادية 8x8. لذلك ، يمكنك استخدام pixelcnn لتناسب توزيع على قيم "Pixel" للمساحة الكامنة 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 وحفظت التمثيلات الكامنة.