Повторная реумплемация пит-пит-пит-пит-пик-пит-пит-пик с предварительно обученными весами из DeepMind.
Этот репозиторий содержит переосмысление Pytorch Op-For-Op Pytorch Biggan, которая была выпущена с помощью бумажной крупномасштабной тренировки Gan для синтеза естественного изображения с высокой точностью от Эндрю Брока, Джеффа Донахью и Карен Симоньян.
Эта внедрение Pytorch Biggan обеспечивается предварительно предварительно проведенными моделями 128x128, 256x256 и 512x512 от DeepMind. Мы также предоставляем сценарии, используемые для загрузки и преобразования этих моделей из моделей Tensorflow Hub.
Эта переопределение была сделана из необработанного графа вычислений версии TensorFlow и ведут себя аналогично версии TensorFlow (дисперсия разницы в выходных данных порядка 1E-5).
В настоящее время эта реализация содержит только генератор, поскольку веса дискриминатора не были выпущены (хотя структура дискриминатора очень похожа на генератор, поэтому его можно было бы добавить довольно легко. Скажите, если вы хотите сделать это PR, я был бы рад помочь.)
Это репо было протестировано на Python 3.6 и Pytorch 1.0.1
Pytorch предварительно подготовлен Biggan может быть установлен из PIP следующим образом:
pip install pytorch-pretrained-bigganЕсли вы просто хотите поиграть с Gan, этого должно быть достаточно.
Если вы хотите использовать сценарии конверсии и утилиты ImageNet, необходимы дополнительные требования, в частности TensorFlow и NLTK. Чтобы установить все требования, используйте файл full_requirements.txt :
git clone https://github.com/huggingface/pytorch-pretrained-BigGAN.git
cd pytorch-pretrained-BigGAN
pip install -r full_requirements.txtЭтот репозиторий обеспечивает прямой и простой доступ к предварительному «глубоким» версиям Биггана для разрешений 128, 256 и 512 пикселей, как описано в соответствующей публикации. Вот несколько подробностей о моделях:
BigGAN-deep-128 : модель параметров 50,4 м, генерируя изображения 128x128 пикселей, веса модели 201 Мб,BigGAN-deep-256 : модель параметров 55,9 м, генерирующая изображения 256x256 пикселей, веса модели 224 МБ,BigGAN-deep-512 : модель параметров 56,2 м, генерирующая изображения 512x512 пикселей, веса модели с дампами 225 Мб.Пожалуйста, обратитесь к Приложению B статьи для получения подробной информации об архитектурах.
Все модели составляют предварительно вычисляемую статистику нормы пакетов для 51 значения усечения от 0 до 1 (для получения подробной информации см. Приложение C.1 в статье).
Вот быстрый пример с использованием BigGAN с предварительно обученной моделью.
См. Раздел DOC ниже для получения подробной информации об этих классах и методах.
import torch
from pytorch_pretrained_biggan import ( BigGAN , one_hot_from_names , truncated_noise_sample ,
save_as_images , display_in_terminal )
# OPTIONAL: if you want to have more information on what's happening, activate the logger as follows
import logging
logging . basicConfig ( level = logging . INFO )
# Load pre-trained model tokenizer (vocabulary)
model = BigGAN . from_pretrained ( 'biggan-deep-256' )
# Prepare a input
truncation = 0.4
class_vector = one_hot_from_names ([ 'soap bubble' , 'coffee' , 'mushroom' ], batch_size = 3 )
noise_vector = truncated_noise_sample ( truncation = truncation , batch_size = 3 )
# All in tensors
noise_vector = torch . from_numpy ( noise_vector )
class_vector = torch . from_numpy ( class_vector )
# If you have a GPU, put everything on cuda
noise_vector = noise_vector . to ( 'cuda' )
class_vector = class_vector . to ( 'cuda' )
model . to ( 'cuda' )
# Generate an image
with torch . no_grad ():
output = model ( noise_vector , class_vector , truncation )
# If you have a GPU put back on CPU
output = output . to ( 'cpu' )
# If you have a sixtel compatible terminal you can display the images in the terminal
# (see https://github.com/saitoha/libsixel for details)
display_in_terminal ( output )
# Save results as png images
save_as_images ( output )


Чтобы загрузить одну из предварительно обученных моделей DeepMind, создайте экземпляр модели BigGAN с помощью from_pretrained() как:
model = BigGAN . from_pretrained ( PRE_TRAINED_MODEL_NAME_OR_PATH , cache_dir = None )где
PRE_TRAINED_MODEL_NAME_OR_PATH либо:
Название ярлыка предварительно обученной модели Google AI или Openai, выбранной в списке:
biggan-deep-128 : 12-слойный, 768 скрытый, 12 голов, 110 м. Параметрыbiggan-deep-256 : 24-слойный, 1024-скрытый, 16 голов, параметры 340 мbiggan-deep-512 : 12-слойный, 768 скрытый, 12 голов, параметры 110 мПуть или URL к предварительному модельному архиву, содержащему:
config.json : файл конфигурации для модели иpytorch_model.bin Пит-дамп предварительно обученного экземпляра BigGAN (сохранен с обычным torch.save() ). Если PRE_TRAINED_MODEL_NAME_OR_PATH является ярким именем, предварительно обученные веса будут загружены с AWS S3 (см. Ссылки здесь) и хранятся в папке кэша, чтобы избежать будущей загрузки (папка кэша может быть найдена по адресу ~/.pytorch_pretrained_biggan/ ).
cache_dir может быть необязательным путем к конкретному каталогу для загрузки и кэширования предварительно обученных весов модели.
BigGANConfig - это класс для хранения и загрузки Biggan Configurations. Это определено в config.py .
Вот несколько подробностей об атрибутах:
output_dim : выходное разрешение GAN (128, 256 или 512) для предварительно обученных моделей,z_dim : размер шумового вектора (128 для предварительно обученных моделей).class_embed_dim : размер векторов встраивания класса (128 для предварительно обученных моделей).channel_width : размер каждого канала (128 для предварительно обученных моделей).num_classes : количество классов в учебном наборе данных, как ImageNet (1000 для предварительно обученных моделей).layers : список определения слоев. Каждое определение для слоя-это тройка [подъемного образца в слое? (Bool), количество входных каналов (int), количество выходных каналов (int)]]attention_layer_position : положение слоя самопринятого в иерархии слоя (8 для предварительно обученных моделей).eps : значение EPSILON для использования для слоев спектральной и нормализации партии (1E-4 для предварительно обученных моделей).n_stats : количество предварительно вычитанных статистических данных для слоев нормализации партии, связанных с различными значениями усечения от 0 до 1 (51 для предварительно обученных моделей). BigGAN - это модель Pytorch ( torch.nn.Module ) Биггана, определенного в model.py . Эта модель включает в себя классные вставки (линейный слой) и генератор с серией совет и условных партийных норм. Дискриминатор в настоящее время не реализуется, поскольку для него не выпущены предварительно обученные веса.
Входные данные и выход идентичны входам и выходам модели TensorFlow .
Мы подробно их здесь.
BigGAN принимает входные данные :
z : Torch.floattensor of Shape [batch_size, config.z_dim] с шумом, выбранным из усеченного нормального распределения, иclass_label : необязательный Torch.longtensor of Shape [batch_size, sequence_length] с индексами типов токенов, выбранными в [0, 1]. Тип 0 соответствует sentence A и типа 1 соответствует токену sentence B (для получения более подробной информации см. Bert Paper).truncation : плавание между 0 (не составлено) и 1. усечение усеченного нормального, используемого для создания шумового вектора. Это значение усечения используется для выбора между набором предварительно вычисленных статистических данных (средств и дисперсий) для слоев партийных норм. BigGAN выводит массив формы [batch_size, 3, разрешение, разрешение], где разрешение составляет 128, 256 или 512 в зависимости от модели:
Мы предоставляем несколько полезных методов для использования модели. Они определены в utils.py .
Вот некоторые подробности об этих методах:
truncated_noise_sample(batch_size=1, dim_z=128, truncation=1., seed=None) :
Создайте усеченный вектор шума.
convert_to_images(obj) :
Преобразовать выходной тензор из Биггана в списке изображений.
save_as_images(obj, file_name='output') :
Преобразовать и сохранить выходной тензор от Биггана в списке сохраненных изображений.
file_name_{image_number}.png display_in_terminal(obj) :
Преобразовать и отображать выходной тензор из Биггана в терминале. Эта функция использует libsixel и будет работать только в либислевом терминале. Пожалуйста, обратитесь к https://github.com/saitoha/libsixel для получения более подробной информации.
file_name_{image_number}.png one_hot_from_int(int_or_list, batch_size=1) :
Создайте одножелачный вектор из индекса класса или список индексов класса.
len(int_or_list) == batch_size one_hot_from_names(class_name, batch_size=1) :
Создайте одножелачный вектор из имени класса ImageNet («теннисный мяч», «Daisy», ...). Мы используем поиск NLTK Wordnet, чтобы попытаться найти соответствующий синсет в ImageNet и взять первый. Если мы не можем найти это направо, мы смотрим на гипонимы и гипернимы имени класса.
Сценарии для загрузки и преобразования моделей TensorFlow из Tensorflow Hub представлены в ./Scripts.
Сценарии можно использовать непосредственно как:
./scripts/download_tf_hub_models.sh
./scripts/convert_tf_hub_models.sh