Станислав Подгорский • Дональд Аджеро • Джанфранко Доретто
Папка Google Drive с моделями и качественными результатами
Состязательные латентные автоэнкодеры
Станислав Подгорский, Дональд Аджеро, Джанфранко ДореттоАннотация: Сети автоэнкодеров представляют собой неконтролируемые подходы, направленные на объединение генеративных и репрезентативных свойств путем одновременного изучения карты кодер-генератор. Несмотря на тщательное изучение, вопросы о том, обладают ли они такой же генеративной силой, как GAN, или обучаются ли распутанным представлениям, не были полностью решены. Мы представляем автокодировщик, который решает эти проблемы совместно, и который мы называем состязательным латентным автокодировщиком (ALAE). Это общая архитектура, которая может использовать последние улучшения в процедурах обучения GAN. Мы разработали два автоэнкодера: один на основе кодера MLP, а другой на основе генератора StyleGAN, который мы называем StyleALAE. Мы проверяем свойства распутывания обеих архитектур. Мы показываем, что StyleALAE может не только генерировать изображения лиц размером 1024x1024 с качеством, сравнимым со 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]},
}
Чтобы запустить демо-версию, вам понадобится графический процессор с поддержкой 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/podgorsky/ALAE/tree/master/configs. По умолчанию он использует один для набора данных FFHQ. Вы можете изменить конфигурацию, используя параметр -c
. Чтобы запустить celeb-hq
с разрешением 256x256, запустите:
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. |
│ ├ спальня.yaml | Файл конфигурации для набора данных спальни LSUN с разрешением 256x256. |
│ ├ celeba.yaml | Конфигурационный файл для набора данных CelebA с разрешением 128x128. |
│ ├ celeba-hq256.yaml | Конфигурационный файл для набора данных CelebA-HQ с разрешением 256x256. |
│ ├ 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 с использованием архитектуры Style. |
│ └ mnist_fc.yaml | Файл конфигурации для набора данных MNIST, использующий только полностью связанные слои (инвариант перестановки MNIST). |
├ подготовка_набора данных | Папка со скриптами для подготовки набора данных. |
│ ├ подготовить_celeba_hq_tfrec.py | Подготовить TFRecords для набора данных CelebA-HQ с разрешением 256x256. |
│ ├ подготовить_celeba_tfrec.py | Подготовить TFRecords для набора данных CelebA с разрешением 128x128. |
│ ├ подготовить_mnist_tfrec.py | Подготовить TFRecords для набора данных MNIST. |
│ ├ Split_tfrecords_bedroom.py | Чтобы отделить официальные записи TFRecords от бумаги StyleGAN для набора данных спальни LSUN. |
│ └ Split_tfrecords_ffhq.py | Чтобы отделить официальные записи TFRecords от документа StyleGAN для набора данных FFHQ. |
├ dataset_samples | Папка с примерами входных данных для разных наборов данных. Используется для цифр и тестовых входных данных во время обучения. |
├ make_figures | Скрипты для изготовления различных фигурок. |
├ метрики | Скрипты для расчета метрик. |
├ Principal_directions | Скрипты для вычисления главных векторов направления для различных атрибутов. Для интерактивной демонстрации . |
├ смешивание стилей | Примеры входных данных и сценарий для создания фигур, сочетающих стили. |
├ Training_artifacts | Место по умолчанию для сохранения контрольных точек/выходных результатов/графиков. |
│ └ download_all.py | Скрипт для скачивания всех предварительно обученных моделей. |
├interactive_demo.py | Запускаемый скрипт для интерактивной демонстрации. |
├ train_alae.py | Работоспособный скрипт для обучения. |
├ train_alae_separate.py | Запускаемый скрипт для обучения абляционному исследованию (отдельный кодер и дискриминатор). |
├ checkpointer.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
.
Обучение проводится с использованием TFRecords. 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 Диска из-за ограничения загрузки. Теперь скрипт настроен таким образом, что если ему не удастся загрузить данные с Google Диска, он попытается загрузить их с 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>
Он будет запускать обучение с использованием нескольких графических процессоров на всех доступных графических процессорах. Он использует 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 Кристианом Сегеди, Винсентом Ванхуком, Сергеем Иоффе, Джонатоном Шленсом и Збигневом Войной. Первоначально сеть была доступна по лицензии Apache 2.0 в репозитории моделей TensorFlow.
vgg16.pkl и vgg16_zhang_perceptual.pkl получены из предварительно обученной сети VGG-16 Кареном Симоняном и Эндрю Зиссерманом. Первоначально сеть была доступна по лицензии Creative Commons BY 4.0 на странице проекта Very Deep Convolutional Networks for Large-Scale Visual Recognition.
vgg16_zhang_perceptual.pkl является производным от предварительно обученных весов LPIPS Ричарда Чжана, Филиппа Изола, Алексея А. Эфроса, Эли Шехтмана и Оливера Ванга. Первоначально веса использовались в соответствии с «упрощенной» лицензией BSD с 2 пунктами в репозитории 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