PYTORCH op-for-op mengimplementasikan model Biggan DeepMind dengan bobot pra-terlatih dari DeepMind.
Repositori ini berisi reimplementasi Pytorch op-for-op dari Deepmind's Biggan yang dirilis dengan pelatihan GAN skala besar untuk sintesis gambar alami kesetiaan tinggi oleh Andrew Brock, Jeff Donahue dan Karen Simonyan.
Implementasi Pytorch dari Biggan ini dilengkapi dengan model 128x128, 256x256 dan 512x512 pretrained oleh DeepMind. Kami juga menyediakan skrip yang digunakan untuk mengunduh dan mengonversi model -model ini dari model TensorFlow Hub.
Implementasi ini dilakukan dari grafik komputasi mentah dari versi TensorFlow dan berperilaku mirip dengan versi TensorFlow (varians dari perbedaan output dari urutan 1E-5).
Implementasi ini saat ini hanya berisi generator karena bobot diskriminator tidak dirilis (meskipun struktur diskriminator sangat mirip dengan generator sehingga dapat ditambahkan dengan mudah. Katakan padaku jika Anda ingin melakukan PR tentang hal itu, saya akan dengan senang hati membantu.)
Repo ini diuji pada Python 3.6 dan Pytorch 1.0.1
Pytorch pretrained Biggan dapat dipasang dari PIP sebagai berikut:
pip install pytorch-pretrained-bigganJika Anda hanya ingin bermain dengan GAN, ini sudah cukup.
Jika Anda ingin menggunakan skrip konversi dan utilitas imagenet, diperlukan persyaratan tambahan, khususnya TensorFlow dan NLTK. Untuk menginstal semua persyaratan, silakan gunakan file full_requirements.txt :
git clone https://github.com/huggingface/pytorch-pretrained-BigGAN.git
cd pytorch-pretrained-BigGAN
pip install -r full_requirements.txtRepositori ini memberikan akses langsung dan sederhana ke versi "dalam" pretrained dari Biggan untuk resolusi 128, 256 dan 512 piksel seperti yang dijelaskan dalam publikasi terkait. Berikut beberapa detail tentang model:
BigGAN-deep-128 : Model parameter 50,4m menghasilkan gambar 128x128 piksel, bobot dump model 201 MB,BigGAN-deep-256 : Model parameter 55,9m menghasilkan gambar 256x256 piksel, bobot dump model 224 MB,BigGAN-deep-512 : Model parameter 56,2m menghasilkan gambar 512x512 piksel, bobot dump model 225 MB.Silakan merujuk ke Lampiran B dari makalah ini untuk detail tentang arsitektur.
Semua model terdiri dari statistik norma batch pra-komputasi untuk 51 nilai pemotongan antara 0 dan 1 (lihat Lampiran C.1 di koran untuk detailnya).
Berikut ini adalah contoh awal yang cepat menggunakan BigGAN dengan model pra-terlatih.
Lihat bagian DOC di bawah ini untuk detail tentang kelas dan metode ini.
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 )


Untuk memuat salah satu model pra-terlatih DeepMind, instantiate model BigGAN dengan from_pretrained() sebagai:
model = BigGAN . from_pretrained ( PRE_TRAINED_MODEL_NAME_OR_PATH , cache_dir = None )Di mana
PRE_TRAINED_MODEL_NAME_OR_PATH adalah:
Nama jalan pintas dari model pra-terlatih Google AI atau Openai yang dipilih dalam daftar:
biggan-deep-128 : 12-layer, 768 tersembunyi, 12-heads, parameter 110mbiggan-deep-256 : 24-layer, 1024-hidden, 16-heads, 340m parameterbiggan-deep-512 : 12-layer, 768-Hidden, 12-heads, parameter 110mJalur atau URL ke arsip model pretrained yang berisi:
config.json : File konfigurasi untuk model, danpytorch_model.bin Dump Pytorch dari contoh pra-terlatih BigGAN (disimpan dengan torch.save() ) yang biasa. Jika PRE_TRAINED_MODEL_NAME_OR_PATH adalah nama pintas, bobot pra-terlatih akan diunduh dari AWS S3 (lihat tautan di sini) dan disimpan dalam folder cache untuk menghindari unduhan di masa mendatang (folder cache dapat ditemukan di ~/.pytorch_pretrained_biggan/ ).
cache_dir dapat menjadi jalur opsional ke direktori tertentu untuk mengunduh dan menyimpan bobot model yang sudah terlatih.
BigGANConfig adalah kelas untuk menyimpan dan memuat konfigurasi Biggan. Itu didefinisikan dalam config.py .
Berikut adalah beberapa detail tentang atribut:
output_dim : Resolusi output GAN (128, 256 atau 512) untuk model pra-terlatih,z_dim : Ukuran vektor kebisingan (128 untuk model pra-terlatih).class_embed_dim : Ukuran vektor embedding kelas (128 untuk model pra-terlatih).channel_width : Ukuran setiap saluran (128 untuk model pra-terlatih).num_classes : Jumlah kelas dalam dataset pelatihan, seperti ImageNet (1000 untuk model pra-terlatih).layers : Daftar definisi lapisan. Setiap definisi untuk lapisan adalah tiga kali lipat dari sampel di lapisan? (bool), jumlah saluran input (int), jumlah saluran output (int)]attention_layer_position : Posisi lapisan perhatian diri dalam hierarki lapisan (8 untuk model pra-terlatih).eps : Nilai Epsilon untuk digunakan untuk lapisan normalisasi spektral dan batch (1E-4 untuk model pra-terlatih).n_stats : Jumlah statistik yang telah dikomputasi sebelumnya untuk lapisan normalisasi batch yang terkait dengan berbagai nilai pemotongan antara 0 dan 1 (51 untuk model pra-terlatih). BigGAN adalah model Pytorch ( torch.nn.Module ) dari Biggan yang didefinisikan dalam model.py . Model ini terdiri dari embeddings kelas (lapisan linier) dan generator dengan serangkaian konvolusi dan norma batch bersyarat. Diskriminator saat ini tidak diimplementasikan karena bobot pra-terlatih belum dirilis untuk itu.
Input dan output identik dengan input dan output model TensorFlow .
Kami merinci di sini.
BigGAN mengambil input :
z : Obor.floattensor bentuk [Batch_Size, config.z_dim] dengan noise sampel dari distribusi normal terpotong, danclass_label : Opsional torch.longtensor bentuk [batch_size, sequence_length] dengan indeks tipe token yang dipilih dalam [0, 1]. Tipe 0 sesuai dengan sentence A dan Tipe 1 sesuai dengan Token sentence B Token (lihat Bert Paper untuk lebih jelasnya).truncation : Float antara 0 (tidak terdiri) dan 1. Pemotongan normal terpotong yang digunakan untuk membuat vektor kebisingan. Nilai pemotongan ini digunakan untuk memilih antara satu set statistik yang telah dikomputasi (cara dan varian) untuk lapisan norma batch. BigGAN mengeluarkan array bentuk [batch_size, 3, resolusi, resolusi] di mana resolusi adalah 128, 256 atau 512 tergantung dari model:
Kami menyediakan beberapa metode utilitas untuk menggunakan model. Mereka didefinisikan dalam utils.py .
Berikut adalah beberapa detail tentang metode ini:
truncated_noise_sample(batch_size=1, dim_z=128, truncation=1., seed=None) :
Buat vektor kebisingan terpotong.
convert_to_images(obj) :
Konversi tensor output dari Biggan dalam daftar gambar.
save_as_images(obj, file_name='output') :
Konversi dan simpan tensor keluaran dari Biggan dalam daftar gambar yang disimpan.
file_name_{image_number}.png display_in_terminal(obj) :
Konversi dan tampilkan tensor output dari Biggan di terminal. Fungsi ini menggunakan libsixel dan hanya akan bekerja di terminal yang kompatibel dengan libsixel. Silakan merujuk ke https://github.com/saitoha/libsixel untuk lebih jelasnya.
file_name_{image_number}.png one_hot_from_int(int_or_list, batch_size=1) :
Buat vektor satu-panas dari indeks kelas atau daftar indeks kelas.
len(int_or_list) == batch_size one_hot_from_names(class_name, batch_size=1) :
Buat vektor satu-panas dari nama kelas imagenet ('tenis bola', 'daisy', ...). Kami menggunakan pencarian WordNet NLTK untuk mencoba menemukan sinset Imagenet yang relevan dan mengambil yang pertama. Jika kita tidak dapat menemukannya secara langsung, kita melihat hiponim dan hypernyms dari nama kelas.
Skrip untuk mengunduh dan mengonversi model TensorFlow dari TensorFlow Hub disediakan di ./scripts.
Skrip dapat digunakan secara langsung sebagai:
./scripts/download_tf_hub_models.sh
./scripts/convert_tf_hub_models.sh