Implementasi Pytorch sederhana dari StyleGan2 berdasarkan https://arxiv.org/abs/1912.04958 yang dapat sepenuhnya dilatih dari baris perintah, tidak diperlukan pengkodean.
Di bawah ini adalah beberapa bunga yang tidak ada.
Tangan ini juga tidak
Atau kota -kota ini
Atau selebriti ini (dilatih oleh @yoniker)
Anda akan membutuhkan mesin dengan GPU dan CUDA terpasang. Kemudian Pip instal paket seperti ini
$ pip install stylegan2_pytorchJika Anda menggunakan mesin Windows, perintah berikut dilaporkan berfungsi.
$ conda install pytorch torchvision -c python
$ pip install stylegan2_pytorch$ stylegan2_pytorch --data /path/to/images Itu saja. Contoh gambar akan disimpan ke results/default dan model akan disimpan secara berkala untuk models/default .
Anda dapat menentukan nama proyek Anda
$ stylegan2_pytorch --data /path/to/images --name my-project-nameAnda juga dapat menentukan lokasi di mana hasil perantara dan pos pemeriksaan model harus disimpan
$ stylegan2_pytorch --data /path/to/images --name my-project-name --results_dir /path/to/results/dir --models_dir /path/to/models/dir Anda dapat meningkatkan kapasitas jaringan (yang default menjadi 16 ) untuk meningkatkan hasil pembangkit, dengan biaya lebih banyak memori.
$ stylegan2_pytorch --data /path/to/images --network-capacity 256 Secara default, jika pelatihan terputus, itu akan secara otomatis dilanjutkan dari file pos pemeriksaan terakhir. Jika Anda ingin restart dengan pengaturan baru, cukup tambahkan bendera new
$ stylegan2_pytorch --new --data /path/to/images --name my-project-name --image-size 512 --batch-size 1 --gradient-accumulate-every 16 --network-capacity 10Setelah selesai pelatihan, Anda dapat menghasilkan gambar dari pos pemeriksaan terbaru Anda.
$ stylegan2_pytorch --generateUntuk menghasilkan video interpolasi melalui dua titik acak di ruang laten.
$ stylegan2_pytorch --generate-interpolation --interpolation-num-steps 100Untuk menyimpan setiap bingkai interpolasi
$ stylegan2_pytorch --generate-interpolation --save-framesJika pos pemeriksaan sebelumnya berisi generator yang lebih baik, (yang sering terjadi ketika generator mulai menurun ke akhir pelatihan), Anda dapat memuat dari pos pemeriksaan sebelumnya dengan bendera lain
$ stylegan2_pytorch --generate --load-from {checkpoint number} Teknik yang digunakan dalam Stylegan dan Biggan memotong nilai laten sehingga nilai -nilai mereka hampir rata dengan rata -rata. Semakin kecil nilai pemotongan, semakin baik sampel akan muncul dengan biaya variasi sampel. Anda dapat mengontrol ini dengan --trunc-psi , di mana nilai biasanya jatuh antara 0.5 dan 1 . Diatur pada 0.75 sebagai default
$ stylegan2_pytorch --generate --trunc-psi 0.5Jika Anda memiliki satu mesin dengan beberapa GPU, repositori menawarkan cara untuk memanfaatkan semuanya untuk pelatihan. Dengan beberapa GPU, setiap batch akan dibagi secara merata di antara GPU yang tersedia. Misalnya, untuk 2 GPU, dengan ukuran batch 32, masing -masing GPU akan melihat 16 sampel.
Anda hanya perlu menambahkan-bendera --multi-gpus , semua orang diurus. Jika Anda ingin membatasi ke GPU tertentu, Anda dapat menggunakan variabel lingkungan CUDA_VISIBLE_DEVICES untuk mengontrol perangkat apa yang dapat digunakan. (mis. CUDA_VISIBLE_DEVICES=0,2,3 Perangkat hanya 0, 2, 3 tersedia)
$ stylegan2_pytorch --data ./data --multi-gpus --batch-size 32 --gradient-accumulate-every 1Di masa lalu, Gans membutuhkan banyak data untuk mempelajari cara menghasilkan dengan baik. Model Wajah mengambil gambar berkualitas tinggi 70 ribu dari Flickr, sebagai contoh.
Namun, pada bulan Mei 2020, para peneliti di seluruh dunia secara mandiri bertemu dengan teknik sederhana untuk mengurangi jumlah itu hingga serendah 1-2k . Gagasan sederhana itu adalah untuk menambah semua gambar, dihasilkan atau nyata, masuk ke diskriminator selama pelatihan.
Jika seseorang untuk menambah probabilitas yang cukup rendah, augmentasi tidak akan 'bocor' ke generasi.
Dalam pengaturan data rendah, Anda dapat menggunakan fitur dengan bendera sederhana.
# find a suitable probability between 0. -> 0.7 at maximum
$ stylegan2_pytorch --data ./data --aug-prob 0.25 Secara default, augmentasi yang digunakan adalah translation dan cutout . Jika Anda ingin menambahkan color , Anda dapat melakukannya dengan argumen --aug-types .
# make sure there are no spaces between items!
$ stylegan2_pytorch --data ./data --aug-prob 0.25 --aug-types [translation,cutout,color]Anda dapat menyesuaikannya dengan kombinasi dari tiga yang Anda inginkan. Kode augmentasi yang dapat dibedakan disalin dan sedikit dimodifikasi dari sini.
Selama mungkin sampai permainan permusuhan antara dua jaring saraf berantakan (kami menyebut divergensi ini). Secara default, jumlah langkah pelatihan diatur ke 150000 untuk 128x128 gambar, tetapi Anda pasti ingin jumlah ini lebih tinggi jika GAN tidak menyimpang pada akhir pelatihan, atau jika Anda berlatih dengan resolusi yang lebih tinggi.
$ stylegan2_pytorch --data ./data --image-size 512 --num-train-steps 1000000Kerangka kerja ini juga memungkinkan Anda untuk menambahkan bentuk perhatian yang efisien pada lapisan diskriminator yang ditunjuk (dan lapisan simetris generator), yang akan sangat meningkatkan hasil. Semakin banyak perhatian yang Anda mampu, semakin baik!
# add self attention after the output of layer 1
$ stylegan2_pytorch - - data . / data - - attn - layers 1 # add self attention after the output of layers 1 and 2
# do not put a space after the comma in the list!
$ stylegan2_pytorch - - data . / data - - attn - layers [ 1 , 2 ]Pelatihan tentang gambar transparan
$ stylegan2_pytorch --data ./transparent/images/path --transparentSemakin banyak memori GPU yang Anda miliki, semakin besar dan lebih baik dari pembuatan gambar. NVIDIA merekomendasikan untuk memiliki hingga 16GB untuk pelatihan 1024x1024 gambar. Jika Anda memiliki kurang dari itu, ada beberapa pengaturan yang dapat Anda mainkan sehingga modelnya cocok.
$ stylegan2_pytorch --data /path/to/data
--batch-size 3
--gradient-accumulate-every 5
--network-capacity 16 Ukuran Batch-Anda dapat mengurangi batch-size menjadi 1, tetapi Anda harus meningkatkan gradient-accumulate-every sehingga mini-batch yang dilihat jaringan tidak terlalu kecil. Ini mungkin membingungkan bagi orang awam, jadi saya akan memikirkan bagaimana saya akan mengotomatiskan pilihan gradient-accumulate-every ke depan.
Kapasitas Jaringan - Anda dapat mengurangi kapasitas jaringan saraf untuk mengurangi persyaratan memori. Ketahuilah bahwa ini telah terbukti menurunkan kinerja generasi.
Jika tidak satu pun dari ini berhasil, Anda dapat puas dengan Gan 'ringan', yang akan memungkinkan Anda untuk menukar kualitas untuk berlatih pada resolusi yang lebih besar dalam waktu yang wajar.
Di bawah ini adalah beberapa langkah yang mungkin bermanfaat untuk penempatan menggunakan Layanan Web Amazon. Untuk menggunakan ini, Anda harus menyediakan instance EC2 yang didukung GPU. Jenis instance yang tepat adalah dari seri P2 atau P3. Saya (Iboates) mencoba P2.Xlarge (opsi termurah) dan itu cukup lambat, lebih lambat daripada menggunakan Google Colab. Jenis instance yang lebih kuat mungkin lebih baik tetapi lebih mahal. Anda dapat membaca lebih lanjut tentang mereka di sini.
sudo snap install aws-cli --classic
aws configureAnda kemudian harus memasukkan kunci akses AWS Anda, yang dapat Anda ambil dari konsol manajemen di bawah konsol manajemen AWS> profil> kredensial keamanan saya> tombol akses
Kemudian, jalankan perintah ini, atau mungkin masukkan ke dalam skrip shell dan jalankan itu:
mkdir data
curl -O https://bootstrap.pypa.io/get-pip.py
sudo apt-get install python3-distutils
python3 get-pip.py
pip3 install stylegan2_pytorch
export PATH= $PATH :/home/ubuntu/.local/bin
aws s3 sync s3:// < Your bucket name > ~ /data
cd data
tar -xf ../train.tar.gz Sekarang Anda harus bisa berlatih dengan menyamakan panggilan stylegan2_pytorch [args] .
Catatan:
screen sehingga tidak akan berakhir setelah Anda keluar dari sesi SSH. Berkat Goteclectic, Anda sekarang dapat menghitung skor FID secara berkala! Sekali lagi, dibuat sangat sederhana dengan satu argumen tambahan, seperti yang ditunjukkan di bawah ini.
Pertama, instal paket pytorch_fid
$ pip install pytorch-fidDiikuti oleh
$ stylegan2_pytorch --data ./data --calculate-fid-every 5000 Hasil FID akan dicatat ke ./results/{name}/fid_scores.txt
Jika Anda ingin mencicipi gambar secara terprogram, Anda dapat melakukannya dengan kelas ModelLoader sederhana berikut.
import torch
from torchvision . utils import save_image
from stylegan2_pytorch import ModelLoader
loader = ModelLoader (
base_dir = '/path/to/directory' , # path to where you invoked the command line tool
name = 'default' # the project name, defaults to 'default'
)
noise = torch . randn ( 1 , 512 ). cuda () # noise
styles = loader . noise_to_styles ( noise , trunc_psi = 0.7 ) # pass through mapping network
images = loader . styles_to_images ( styles ) # call the generator on intermediate style vectors
save_image ( images , './sample.jpg' ) # save your images, or do whatever you desireUntuk mencatat kerugian ke pelacak eksperimen open source (AIM), Anda hanya perlu melewati bendera tambahan seperti itu.
$ stylegan2_pytorch --data ./data --logKemudian, Anda perlu memastikan Anda memasang Docker. Mengikuti instruksi di AIM, Anda menjalankan yang berikut di terminal Anda.
$ aim upKemudian buka browser Anda ke alamat dan Anda harus melihat

Sebuah makalah baru telah menghasilkan bukti bahwa hanya dengan kontribusi gradien dari sampel yang dianggap palsu oleh diskriminator, generator belajar secara signifikan lebih baik, mencapai keadaan baru.
$ stylegan2_pytorch - - data . / data - - top - k - trainingGamma adalah jadwal peluruhan yang perlahan mengurangi Topk dari ukuran batch penuh ke fraksi target 50% (juga hiperparameter yang dapat dimodifikasi).
$ stylegan2_pytorch - - data . / data - - top - k - training - - generate - top - k - frac 0.5 - - generate - top - k - gamma 0.99 Sebuah makalah baru -baru ini melaporkan hasil yang lebih baik jika representasi perantara dari diskriminator dikuantisasi vektor. Meskipun saya belum melihat ada perubahan dramatis, saya telah memutuskan untuk menambahkan ini sebagai fitur, sehingga pikiran lain di luar sana dapat menyelidiki. Untuk menggunakan, Anda harus menentukan lapisan mana yang ingin Anda kuantisasi. Ukuran kamus default adalah 256 dan juga dapat merdu.
# feature quantize layers 1 and 2, with a dictionary size of 512 each
# do not put a space after the comma in the list!
$ stylegan2_pytorch - - data . / data - - fq - layers [ 1 , 2 ] - - fq - dict - size 512Saya telah mencoba pembelajaran yang kontras pada diskriminator (sejalan dengan pelatihan GAN biasa) dan mungkin mengamati peningkatan stabilitas dan kualitas hasil akhir. Anda dapat menyalakan fitur eksperimental ini dengan bendera sederhana seperti yang ditunjukkan di bawah ini.
$ stylegan2_pytorch - - data . / data - - cl - regIni diusulkan dalam kertas GAN relativistik untuk menstabilkan pelatihan. Saya memiliki hasil yang beragam, tetapi akan memasukkan fitur untuk mereka yang ingin bereksperimen dengannya.
$ stylegan2_pytorch - - data . / data - - rel - disc - loss Secara default, arsitektur StyleGan menata blok 4x4 yang dipelajari konstan karena semakin meningkat. Ini adalah fitur eksperimental yang membuatnya sehingga blok 4x4 dipelajari dari gaya vektor w sebagai gantinya.
$ stylegan2_pytorch - - data . / data - - no - constSebuah makalah baru -baru ini telah mengusulkan bahwa kerugian kontras baru antara log nyata dan palsu dapat meningkatkan kualitas dibandingkan jenis kerugian lainnya. (Default dalam repositori ini adalah kehilangan engsel, dan kertas menunjukkan sedikit peningkatan)
$ stylegan2_pytorch - - data . / data - - dual - contrast - loss StyleGan2 + Unet Diskriminator
Saya mendapatkan hasil yang sangat baik dengan diskriminator yang tidak ada, tetapi perubahan arsitektur terlalu besar untuk dipasang sebagai opsi dalam repositori ini. Jika Anda bertujuan untuk kesempurnaan, jangan ragu untuk mencobanya.
Jika Anda ingin saya memberikan perlakuan kerajaan kepada beberapa arsitektur GAN lainnya (Biggan), jangan ragu untuk menghubungi email saya. Senang mendengar nada Anda.
Terima kasih kepada Matthew Mann untuk port sederhana yang menginspirasi untuk TensorFlow 2.0
@article { Karras2019stylegan2 ,
title = { Analyzing and Improving the Image Quality of {StyleGAN} } ,
author = { Tero Karras and Samuli Laine and Miika Aittala and Janne Hellsten and Jaakko Lehtinen and Timo Aila } ,
journal = { CoRR } ,
volume = { abs/1912.04958 } ,
year = { 2019 } ,
} @misc { zhao2020feature ,
title = { Feature Quantization Improves GAN Training } ,
author = { Yang Zhao and Chunyuan Li and Ping Yu and Jianfeng Gao and Changyou Chen } ,
year = { 2020 }
} @misc { chen2020simple ,
title = { A Simple Framework for Contrastive Learning of Visual Representations } ,
author = { Ting Chen and Simon Kornblith and Mohammad Norouzi and Geoffrey Hinton } ,
year = { 2020 }
} @article {,
title = { Oxford 102 Flowers } ,
author = { Nilsback, M-E. and Zisserman, A., 2008 } ,
abstract = { A 102 category dataset consisting of 102 flower categories, commonly occuring in the United Kingdom. Each class consists of 40 to 258 images. The images have large scale, pose and light variations. }
} @article { afifi201911k ,
title = { 11K Hands: gender recognition and biometric identification using a large dataset of hand images } ,
author = { Afifi, Mahmoud } ,
journal = { Multimedia Tools and Applications }
} @misc { zhang2018selfattention ,
title = { Self-Attention Generative Adversarial Networks } ,
author = { Han Zhang and Ian Goodfellow and Dimitris Metaxas and Augustus Odena } ,
year = { 2018 } ,
eprint = { 1805.08318 } ,
archivePrefix = { arXiv }
} @article { shen2019efficient ,
author = { Zhuoran Shen and
Mingyuan Zhang and
Haiyu Zhao and
Shuai Yi and
Hongsheng Li } ,
title = { Efficient Attention: Attention with Linear Complexities } ,
journal = { CoRR } ,
year = { 2018 } ,
url = { http://arxiv.org/abs/1812.01243 } ,
} @article { zhao2020diffaugment ,
title = { Differentiable Augmentation for Data-Efficient GAN Training } ,
author = { Zhao, Shengyu and Liu, Zhijian and Lin, Ji and Zhu, Jun-Yan and Han, Song } ,
journal = { arXiv preprint arXiv:2006.10738 } ,
year = { 2020 }
} @misc { zhao2020image ,
title = { Image Augmentations for GAN Training } ,
author = { Zhengli Zhao and Zizhao Zhang and Ting Chen and Sameer Singh and Han Zhang } ,
year = { 2020 } ,
eprint = { 2006.02595 } ,
archivePrefix = { arXiv }
} @misc { karras2020training ,
title = { Training Generative Adversarial Networks with Limited Data } ,
author = { Tero Karras and Miika Aittala and Janne Hellsten and Samuli Laine and Jaakko Lehtinen and Timo Aila } ,
year = { 2020 } ,
eprint = { 2006.06676 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CV }
} @misc { jolicoeurmartineau2018relativistic ,
title = { The relativistic discriminator: a key element missing from standard GAN } ,
author = { Alexia Jolicoeur-Martineau } ,
year = { 2018 } ,
eprint = { 1807.00734 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.LG }
} @misc { sinha2020topk ,
title = { Top-k Training of GANs: Improving GAN Performance by Throwing Away Bad Samples } ,
author = { Samarth Sinha and Zhengli Zhao and Anirudh Goyal and Colin Raffel and Augustus Odena } ,
year = { 2020 } ,
eprint = { 2002.06224 } ,
archivePrefix = { arXiv } ,
primaryClass = { stat.ML }
} @misc { yu2021dual ,
title = { Dual Contrastive Loss and Attention for GANs } ,
author = { Ning Yu and Guilin Liu and Aysegul Dundar and Andrew Tao and Bryan Catanzaro and Larry Davis and Mario Fritz } ,
year = { 2021 } ,
eprint = { 2103.16748 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CV }
}