ستانيسلاف بيدورسكي • دونالد أ. أدجيروه • جيانفرانكو دوريتو
مجلد Google Drive مع النماذج والنتائج النوعية
أجهزة الترميز التلقائي الكامنة الخصومة
ستانيسلاف بيدورسكي، دونالد أدجيروه، جيانفرانكو دوريتوالملخص: شبكات التشفير التلقائي هي أساليب غير خاضعة للرقابة تهدف إلى الجمع بين الخصائص التوليدية والتمثيلية من خلال تعلم خريطة مولد التشفير في وقت واحد. على الرغم من دراستها على نطاق واسع، إلا أن القضايا المتعلقة بما إذا كانت لديهم نفس القوة التوليدية لشبكات GAN، أو تعلم التمثيلات المفككة، لم تتم معالجتها بشكل كامل. نحن نقدم أداة تشفير تلقائية تعالج هذه المشكلات بشكل مشترك، والتي نطلق عليها اسم Adversarial Latent Autoencoder (ALAE). إنها بنية عامة يمكنها الاستفادة من التحسينات الأخيرة في إجراءات تدريب GAN. لقد قمنا بتصميم اثنين من أجهزة التشفير التلقائي: أحدهما يعتمد على تشفير MLP، والآخر يعتمد على مولد StyleGAN، والذي نسميه StyleALAE. نحن نتحقق من خصائص فك التشابك لكلا البنيتين. نوضح أن StyleALAE لا يمكنه فقط إنشاء صور وجه مقاس 1024 × 1024 بجودة مماثلة لـ StyleGAN، ولكن بنفس الدقة يمكنه أيضًا إنتاج عمليات إعادة بناء الوجه ومعالجته بناءً على صور حقيقية. وهذا يجعل ALAE أول جهاز تشفير تلقائي قادر على المقارنة مع قدرات نوع الهندسة المعمارية للمولد فقط وتجاوزها.
@InProceedings{pidhorskyi2020adversarial,
author = {Pidhorskyi, Stanislav and Adjeroh, Donald A and Doretto, Gianfranco},
booktitle = {Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR)},
title = {Adversarial Latent Autoencoders},
year = {2020},
note = {[to appear]},
}
لتشغيل العرض التوضيحي، ستحتاج إلى تثبيت وحدة معالجة الرسومات (GPU) القادرة على CUDA وPyTorch >= v1.3.1 وبرامج تشغيل cuda/cuDNN. تثبيت الحزم المطلوبة:
pip install -r requirements.txt
تنزيل النماذج المدربة مسبقًا:
python training_artifacts/download_all.py
قم بتشغيل العرض التوضيحي:
python interactive_demo.py
يمكنك تحديد تكوين yaml للاستخدام. توجد التكوينات هنا: https://github.com/podgorskiy/ALAE/tree/master/configs. بشكل افتراضي، يستخدم واحدًا لمجموعة بيانات FFHQ. يمكنك تغيير التكوين باستخدام المعلمة -c
. للتشغيل على celeb-hq
بدقة 256 × 256، قم بتشغيل:
python interactive_demo.py -c celeba-hq256
ومع ذلك، بالنسبة للتكوينات الأخرى غير FFHQ، فإنك تحتاج إلى الحصول على متجهات اتجاه رئيسية جديدة للسمات.
يتم تنظيم التعليمات البرمجية الموجودة في المستودع بطريقة تجعل جميع البرامج النصية يجب تشغيلها من جذر المستودع. إذا كنت تستخدم IDE (مثل PyCharm أو Visual Studio Code)، فما عليك سوى تعيين دليل العمل للإشارة إلى جذر المستودع.
إذا كنت تريد التشغيل من سطر الأوامر، فأنت بحاجة أيضًا إلى تعيين متغير PYTHONPATH للإشارة إلى جذر المستودع.
على سبيل المثال، لنفترض أننا قمنا باستنساخ المستودع إلى دليل ~/ALAE ، ثم قم بما يلي:
$ cd ~/ALAE
$ export PYTHONPATH=$PYTHONPATH:$(pwd)
الآن يمكنك تشغيل البرامج النصية على النحو التالي:
$ python style_mixing/stylemix.py
طريق | وصف |
---|---|
علاء | المجلد الجذر للمستودع |
├ التكوينات | مجلد مع ملفات التكوين yaml. |
│ ├ غرفة نوم.يامل | ملف التكوين لمجموعة بيانات غرفة النوم LSUN بدقة 256 × 256. |
│ ├ celeba.yaml | ملف التكوين لمجموعة بيانات CelebA بدقة 128 × 128. |
│ ├ سيليبا-hq256.yaml | ملف التكوين لمجموعة بيانات CelebA-HQ بدقة 256 × 256. |
│ ├ celeba_ablation_nostyle.yaml | ملف التكوين لمجموعة بيانات CelebA 128x128 لدراسة الاستئصال (بدون أنماط). |
│ ├ celeba_ablation_separate.yaml | ملف التكوين لمجموعة بيانات CelebA 128x128 لدراسة الاستئصال (جهاز تشفير ومميز منفصل). |
│ ├ celeba_ablation_z_reg.yaml | ملف التكوين لمجموعة بيانات CelebA 128x128 لدراسة الاستئصال (الانحدار في الفضاء Z، وليس W). |
│ ├ ffhq.yaml | ملف التكوين لمجموعة بيانات FFHQ بدقة 1024x1024. |
│ ├ mnist.yaml | ملف التكوين لمجموعة بيانات MNIST باستخدام بنية النمط. |
│ └ mnist_fc.yaml | ملف التكوين لمجموعة بيانات MNIST باستخدام الطبقات المتصلة بالكامل فقط (Permutation Invariant MNIST). |
├ إعداد مجموعة البيانات | مجلد يحتوي على نصوص برمجية لإعداد مجموعة البيانات. |
│ ├ تحضير_celeba_hq_tfrec.py | لإعداد TFRecords لمجموعة بيانات CelebA-HQ بدقة 256 × 256. |
│ ├ تحضير_celeba_tfrec.py | لإعداد TFRecords لمجموعة بيانات CelebA بدقة 128 × 128. |
│ ├ تحضير_mnist_tfrec.py | لإعداد TFRecords لمجموعة بيانات MNIST. |
│ ├ Split_tfrecords_bedroom.py | لفصل سجلات TFRecords الرسمية عن ورق StyleGAN لمجموعة بيانات غرفة النوم LSUN. |
│ └ Split_tfrecords_ffhq.py | لفصل سجلات TFRecords الرسمية عن ورقة StyleGAN لمجموعة بيانات FFHQ. |
├ dataset_samples | مجلد يحتوي على مدخلات نموذجية لمجموعات بيانات مختلفة. تستخدم للأرقام ومدخلات الاختبار أثناء التدريب. |
├ make_figures | مخطوطات لصنع شخصيات مختلفة. |
├ المقاييس | البرامج النصية لمقاييس الحوسبة. |
├ الإتجاهات الرئيسية | البرامج النصية لحساب متجهات الاتجاه الرئيسية لمختلف السمات. للعرض التفاعلي . |
├ style_mixing | عينة من المدخلات والنصوص لإنتاج أشكال خلط الأنماط. |
├ Training_artifacts | المكان الافتراضي لحفظ نقاط التفتيش/مخرجات العينة/المؤامرات. |
│ └ download_all.py | سكريبت لتحميل كافة النماذج المدربة مسبقا. |
├interactive_demo.py | برنامج نصي قابل للتشغيل للعرض التوضيحي التفاعلي. |
├ Train_alae.py | برنامج نصي قابل للتشغيل للتدريب. |
├ Train_alae_separate.py | برنامج نصي قابل للتشغيل للتدريب على دراسة الاستئصال (جهاز تشفير ومميز منفصل). |
├ Checker.py | وحدة لحفظ/استعادة أوزان النموذج وحالة المحسن وسجل الخسارة. |
├ custom_adam.py | مُحسِّن آدم المخصص لمعادلة معدل التعلم ونسخة تجريبية من الثانية الصفرية. |
├ dataloader.py | وحدة تحتوي على فئات مجموعة البيانات، والمحملات، والمكررات، وما إلى ذلك. |
├ defaults.py | تعريف متغيرات التكوين مع القيم الافتراضية. |
├ Launcher.py | مساعد لتشغيل وحدة معالجة الرسومات المتعددة، والتدريب على العمليات المتعددة. يقوم بإعداد التكوين والتسجيل. |
├ lod_driver.py | فئة مساعد لإدارة الشبكة المتنامية/المستقرة. |
├ lreq.py | وحدات Linear و Conv2d و ConvTranspose2d المخصصة لمعادلة معدل التعلم. |
├ model.py | وحدة مع تعريف النموذج عالي المستوى. |
├ model_separate.py | نفس ما ورد أعلاه، ولكن لدراسة الاجتثاث. |
├ net.py | تعريف كافة كتل الشبكة لأبنية متعددة. |
├ التسجيل.py | تسجيل كتل الشبكة للاختيار من ملف التكوين. |
├ جدولة.py | برامج جدولة مخصصة ذات بداية دافئة وتجميع العديد من أدوات تحسين الأداء. |
├ Tracker.py | وحدة لتخطيط الخسائر. |
└ utils.py | مصمم للمكالمات غير المتزامنة، ومصمم للتخزين المؤقت، وتسجيل كتل الشبكة. |
في قاعدة التعليمات البرمجية هذه، يتم استخدام yacs للتعامل مع التكوينات.
تقبل معظم البرامج النصية القابلة للتشغيل المعلمة -c
التي يمكنها تحديد ملفات التكوين المراد استخدامها. على سبيل المثال، لإنشاء أرقام إعادة الإعمار، يمكنك تشغيل:
python make_figures/make_recon_figure_paged.py
python make_figures/make_recon_figure_paged.py -c celeba
python make_figures/make_recon_figure_paged.py -c celeba-hq256
python make_figures/make_recon_figure_paged.py -c bedroom
التكوين الافتراضي هو ffhq
.
يتم التدريب باستخدام TRecords. تتم قراءة سجلات TFRecords باستخدام DareBlopy، والذي يسمح باستخدامها مع Pytorch.
في ملفات التكوين وكذلك في جميع البرامج النصية للتحضير، من المفترض أن جميع مجموعات البيانات موجودة في /data/datasets/
. يمكنك إما تغيير المسار في ملفات التكوين، أو إنشاء رابط رمزي إلى المكان الذي تخزن فيه مجموعات البيانات.
قد تكون الطريقة الرسمية لإنشاء CelebA-HQ صعبة. يرجى الرجوع إلى هذه الصفحة: https://github.com/suvojit-0x55aa/celebA-HQ-dataset-download يمكنك الحصول على مجموعة البيانات التي تم إنشاؤها مسبقًا من: https://drive.google.com/drive/folders/11Vz0fqHS2rXDb5pprgTjpD7S2BAJhi1P
لتنزيل النماذج المدربة مسبقًا، قم بتشغيل:
python training_artifacts/download_all.py
ملاحظة : كانت هناك مشكلات في تنزيل النماذج من Google Drive بسبب حد التنزيل. الآن، تم إعداد البرنامج النصي بطريقة تجعله إذا فشل في تنزيل البيانات من Google Drive، فسيحاول تنزيلها من S3.
إذا واجهت مشكلات، فحاول حذف جميع ملفات *.pth، وتحديث حزمة dlutils ( pip install dlutils --upgrade
) ثم قم بتشغيل download_all.py
مرة أخرى. إذا لم يحل ذلك المشكلة، يرجى فتح موضوع. يمكنك أيضًا تجربة تنزيل النماذج يدويًا من هنا: https://drive.google.com/drive/folders/1tsI1q1u8QRX5t7_lWCSjpniLGlNY-3VY?usp=sharing
في ملفات التكوين، يشير OUTPUT_DIR
إلى المكان الذي يتم حفظ الأوزان فيه والقراءة منه. على سبيل المثال: OUTPUT_DIR: training_artifacts/celeba-hq256
في OUTPUT_DIR
يقوم بحفظ ملف last_checkpoint
الذي يحتوي على المسار إلى اختيار .pth
الفعلي مع وزن النموذج. إذا كنت تريد اختبار النموذج باستخدام ملف وزن محدد، فيمكنك ببساطة تعديل ملف last_checkpoint
.
لإنشاء أشكال خلط الأنماط، قم بتشغيل:
python style_mixing/stylemix.py -c <config>
حيث بدلاً من <config>
ضع واحدًا مما يلي: ffhq
, celeba
, celeba-hq256
, bedroom
لإنشاء إعادة الإعمار باستخدام صور متعددة النطاق:
python make_figures/make_recon_figure_multires.py -c <config>
لإنشاء إعادة الإعمار من كافة مدخلات العينة على صفحات متعددة:
python make_figures/make_recon_figure_paged.py -c <config>
هناك أيضًا:
python make_figures/old/make_recon_figure_celeba.py
python make_figures/old/make_recon_figure_bed.py
لإنشاء إعادة الإعمار من مجموعة اختبار FFHQ:
python make_figures/make_recon_figure_ffhq_real.py
لتوليد رقم الاستيفاء:
python make_figures/make_recon_figure_interpolation.py -c <config>
لإنشاء شكل اجتياز:
(بالنسبة لمجموعات البيانات الأخرى غير FFHQ، ستحتاج إلى العثور على الاتجاهات الرئيسية أولاً)
python make_figures/make_traversarls.py -c <config>
لجعل شخصية الجيل تعمل:
make_generation_figure.py -c <config>
بالإضافة إلى تثبيت الحزم المطلوبة:
pip install -r requirements.txt
سوف تحتاج إلى تثبيت DareBlopy:
pip install dareblopy
لتشغيل التدريب:
python train_alae.py -c <config>
سيتم تشغيل تدريب GPU متعدد على جميع وحدات معالجة الرسومات المتاحة. ويستخدم DistributedDataParallel
للتوازي. إذا توفرت وحدة معالجة رسومات واحدة فقط، فسيتم تشغيلها على وحدة معالجة رسومات واحدة، ولا حاجة إلى رعاية خاصة.
العدد الموصى به من وحدات معالجة الرسومات هو 8. قد تواجه إمكانية النسخ على عدد أقل من وحدات معالجة الرسومات مشكلات. قد تحتاج إلى ضبط حجم الدفعة في ملف التكوين اعتمادًا على حجم ذاكرة وحدات معالجة الرسومات.
بالإضافة إلى تثبيت الحزم المطلوبة وDareBlopy، تحتاج إلى تثبيت TensorFlow وdnnlib من StyleGAN.
يجب أن يكون Tensorflow الإصدار 1.10
:
pip install tensorflow-gpu==1.10
يتطلب إصدار CUDA 9.0.
ربما تكون أفضل طريقة هي استخدام Anaconda للتعامل مع هذا، لكنني أفضل تثبيت CUDA 9.0 من مستودعات نظام التشغيل pop-os (يعمل على Ubuntu):
sudo echo "deb http://apt.pop-os.org/proprietary bionic main" | sudo tee -a /etc/apt/sources.list.d/pop-proprietary.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 204DD8AEC33A7AFF
sudo apt update
sudo apt install system76-cuda-9.0
sudo apt install system76-cudnn-9.0
ثم قم فقط بتعيين متغير LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH=/usr/lib/cuda-9.0/lib64
Dnnlib هي حزمة مستخدمة في StyleGAN. يمكنك تثبيته مع:
pip install https://github.com/podgorskiy/dnnlib/releases/download/0.0.1/dnnlib-0.0.1-py3-none-any.whl
تعتمد جميع التعليمات البرمجية لتشغيل المقاييس بشكل كبير على تلك الموجودة في مستودع StyleGAN. كما أنه يستخدم نفس النماذج المدربة مسبقًا:
https://github.com/NVlabs/stylegan#licenses
inception_v3_features.pkl وinception_v3_softmax.pkl مشتقان من شبكة Inception-v3 المدربة مسبقًا بواسطة Christian Szegedy وVincent Vanhoucke وSergey Ioffe وJonathon Shlens وZbigniew Wojna. تمت مشاركة الشبكة في الأصل بموجب ترخيص Apache 2.0 في مستودع TensorFlow Models.
vgg16.pkl وvgg16_zhang_perceptual.pkl مشتقان من شبكة VGG-16 المدربة مسبقًا بواسطة كارين سيمونيان وأندرو زيسرمان. تمت مشاركة الشبكة في الأصل بموجب ترخيص Creative Commons BY 4.0 على صفحة مشروع الشبكات التلافيفية العميقة جدًا للتعرف البصري على نطاق واسع.
vgg16_zhang_perceptual.pkl مشتق أيضًا من أوزان LPIPS المدربة مسبقًا بواسطة ريتشارد تشانغ، وفيليب إيزولا، وأليكسي أ. إفروس، وإيلي شيختمان، وأوليفر وانغ. تمت مشاركة الأوزان في الأصل بموجب ترخيص BSD 2-Clause "المبسط" في مستودع PerceptualSimilarity.
أخيرًا، لتشغيل المقاييس:
python metrics/fid.py -c <config> # FID score on generations
python metrics/fid_rec.py -c <config> # FID score on reconstructions
python metrics/ppl.py -c <config> # PPL score on generations
python metrics/lpips.py -c <config> # LPIPS score of reconstructions