DeepMind的BigGan模型的pytorch重新實現,並具有來自DeepMind的預訓練的重量。
該存儲庫包含對DeepMind的Biggan的pytorch重新實現,該紙張由Andrew Brock,Jeff Donahue和Karen Simonyan發行了紙張大規模GAN訓練,用於高保真自然圖像合成。
Biggan的Pytorch實施是由DeepMind預處理的128x128、256x256和512x512模型提供的。我們還提供用於從Tensorflow Hub模型下載和轉換這些模型的腳本。
此次重新實現是從TensorFlow版本的原始計算圖完成的,並且與TensorFlow版本相似(1E-5的輸出差的差異)類似。
目前,此實現僅包含發電機,因為歧視器的權重未發布(儘管鑑別器的結構與發電機非常相似,因此可以很容易地添加。請告訴我,如果您想對此進行PR,我很樂意為您提供幫助。)
該倉庫在Python 3.6和Pytorch 1.0.1上進行了測試。
可以從PIP中安裝Pytorch預估計的Biggan:
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預處理的“深”版本,如相關出版物中所述。以下是有關模型的一些細節:
BigGAN-deep-128 :5040萬參數模型生成128x128像素圖像,模型轉儲權重201 MB,BigGAN-deep-256 :一個559M參數模型生成256x256像素圖像,模型轉儲權重224 MB,BigGAN-deep-512 :56.2m參數模型生成512x512像素圖像,模型轉儲權重225 MB。有關體系結構的詳細信息,請參閱本文的附錄B。
所有模型均包含51個截斷值在0到1之間的截斷值的預先計算批准統計量(有關詳細信息,請參見本文中的附錄C.1)。
這是使用BigGAN和預訓練模型的快速啟動示例。
有關這些類和方法的詳細信息,請參見下面的文檔部分。
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的預訓練模型之一,用from_pretrained()實例化了一個BigGAN模型:
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個頭,110m參數biggan-deep-256 :24層,1024隱藏,16頭,340m參數biggan-deep-512 :12層,768隱藏,12個頭,110m參數通知模型存檔的路徑或URL,該模型包含:
config.json :模型的配置文件,pytorch_model.bin BigGAN預先訓練的實例的pytorch轉儲(用通常的torch.save()保存)。如果PRE_TRAINED_MODEL_NAME_OR_PATH是一個快捷方式名稱,則將從AWS S3下載預訓練的權重(請參閱此處的鏈接)並存儲在緩存文件夾中以避免將來下載(可以在~/.pytorch_pretrained_biggan/ )中找到CACHE文件夾。
cache_dir可以是通往特定目錄的可選路徑,以下載和緩存預訓練的模型權重。
BigGANConfig是一個可以存儲和加載Biggan配置的課程。它在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是model.py中定義的Biggan的Pytorch型號( torch.nn.Module )。該模型包括類嵌入(線性層)和帶有一系列卷積和條件批准規範的生成器。由於未發布預訓練的權重,因此目前尚未實施鑑別器。
輸入和輸出與TensorFlow模型輸入和輸出相同。
我們在這裡詳細介紹它們。
BigGAN作為輸入:
z :the.floattensor的形狀[batch_size,config.z_dim],從截斷的正態分佈中採樣噪聲,並且class_label :一個可選的torch.longtensor [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) :
在圖像列表中,從Biggan轉換輸出張量。
save_as_images(obj, file_name='output') :
在保存的圖像列表中,從Biggan轉換並保存輸出張量。
file_name_{image_number}.png display_in_terminal(obj) :
轉換並顯示端子中Biggan的輸出張量。此功能使用libsixel ,只能在與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的相關同步並採用第一個。如果我們找不到直接發現的,我們會查看班級名稱的下調和高音。
在./scripts中提供了從TensorFlow Hub下載和轉換TensorFlow模型的腳本。
這些腳本可直接用作:
./scripts/download_tf_hub_models.sh
./scripts/convert_tf_hub_models.sh