هذا هو تنفيذ 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_eVectorQuantizer التي تحول إخراج التشفير إلى متجه منفصل واحد هو فهرس أقرب ناقل التضمين z_e -> z_qDecoder التي تحدد الخريطة 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 وحفظت التمثيلات الكامنة.