https://arxiv.org/abs/1912.04958に基づくStyleGan2の簡単なPytorch実装は、コマンドラインから完全にトレーニングでき、コーディングは必要ありません。
以下は存在しない花です。
これらの手もしません
また、これらの都市も
また、これらの有名人(@yonikerによって訓練されています)
GPUとCUDAがインストールされたマシンが必要です。次に、このようにパッケージをインストールします
$ pip install stylegan2_pytorchWindowsマシンを使用している場合、次のコマンドが機能すると伝えられています。
$ conda install pytorch torchvision -c python
$ pip install stylegan2_pytorch$ stylegan2_pytorch --data /path/to/imagesそれでおしまい。サンプル画像はresults/defaultに保存され、モデルはmodels/defaultに定期的に保存されます。
プロジェクトの名前を指定できます
$ stylegan2_pytorch --data /path/to/images --name my-project-name中間結果とモデルチェックポイントをで保存する場所を指定することもできます
$ stylegan2_pytorch --data /path/to/images --name my-project-name --results_dir /path/to/results/dir --models_dir /path/to/models/dirネットワーク容量(デフォルトで16 )を増やして、より多くのメモリを犠牲にして生成結果を改善できます。
$ stylegan2_pytorch --data /path/to/images --network-capacity 256デフォルトでは、トレーニングが遮断されると、最後のチェックポイントファイルから自動的に再開されます。新しい設定で再起動する場合は、 newフラグを追加するだけです
$ stylegan2_pytorch --new --data /path/to/images --name my-project-name --image-size 512 --batch-size 1 --gradient-accumulate-every 16 --network-capacity 10トレーニングが終了したら、そのような最新のチェックポイントから画像を生成できます。
$ stylegan2_pytorch --generate潜在空間の2つのランダムポイントを通して補間のビデオを生成します。
$ stylegan2_pytorch --generate-interpolation --interpolation-num-steps 100補間の個々のフレームを保存するため
$ stylegan2_pytorch --generate-interpolation --save-frames前のチェックポイントに優れたジェネレーターが含まれている場合(ジェネレーターがトレーニングの終了に向かって分解を開始するときに発生することが多い)、前のチェックポイントから別のフラグをロードできます
$ stylegan2_pytorch --generate --load-from {checkpoint number} StyleganとBigganの両方で使用されるテクニックは、潜在的な値を切り捨てて、その値が平均に近づくようにしています。切り捨て値が小さいほど、サンプルの種類のコストでサンプルがより良く表示されます。これを--trunc-psiで制御できます。ここでは、値は通常0.5 1間に低下します。デフォルトとして0.75に設定されています
$ stylegan2_pytorch --generate --trunc-psi 0.5複数のGPUを備えたマシンを1つ持っている場合、リポジトリはトレーニングにすべてを利用する方法を提供します。複数のGPUを使用すると、各バッチは利用可能なGPUの間で均等に分割されます。たとえば、バッチサイズが32の2つのGPUの場合、各GPUには16のサンプルが表示されます。
--multi-gpusフラグを追加するだけで、他のすべてが世話をします。特定のGPUに制限したい場合は、 CUDA_VISIBLE_DEVICES環境変数を使用して、使用できるデバイスを制御できます。 (ex。CUDA_VISIBLE_DEVICES CUDA_VISIBLE_DEVICES=0,2,3デバイスのみ0、2、3が利用可能です)
$ stylegan2_pytorch --data ./data --multi-gpus --batch-size 32 --gradient-accumulate-every 1過去には、Gansはうまく生成する方法を学ぶために多くのデータを必要としていました。 FACESモデルは、例としてFlickrから70K高品質の画像を採用しました。
しかし、2020年5月には、世界中の研究者が独立して単純な手法に集まって、その数を1〜2kまで減らすことができました。その単純なアイデアは、トレーニング中に識別子に入るすべての画像を生成または現実に拡張することでした。
十分に低い確率で増強する場合、増強は世代に「漏れ」しません。
低データの設定では、単純なフラグを備えた機能を使用できます。
# find a suitable probability between 0. -> 0.7 at maximum
$ stylegan2_pytorch --data ./data --aug-prob 0.25デフォルトでは、使用される拡張はtranslationとcutoutです。 colorを追加したい場合は、 --aug-types引数を使用して行うことができます。
# make sure there are no spaces between items!
$ stylegan2_pytorch --data ./data --aug-prob 0.25 --aug-types [translation,cutout,color]希望する3つの組み合わせにカスタマイズできます。微分可能な拡張コードがコピーされ、ここからわずかに変更されました。
2つのニューラルネットの間の敵対的なゲームがバラバラになるまで、できるだけ長い間(この発散と呼んでいます)。デフォルトでは、128x128の画像のトレーニング手順の数は150000に設定されますが、GANがトレーニングの終了までに分岐しない場合、またはより高い解像度でトレーニングしている場合、この数を高くする必要があります。
$ stylegan2_pytorch --data ./data --image-size 512 --num-train-steps 1000000また、このフレームワークを使用すると、差別装置の指定された層(および発電機の対称層)に効率的な形式の自己攻撃を追加することもでき、結果が大幅に改善されます。余裕があればあるほど、良くなります!
# 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 ]透明な画像のトレーニング
$ stylegan2_pytorch --data ./transparent/images/path --transparentGPUメモリが多いほど、画像生成が大きくなります。 Nvidiaは、1024x1024の画像をトレーニングするために最大16GBを持つことを推奨しました。それよりも少ない場合、モデルが適合するようにプレイできるいくつかの設定があります。
$ stylegan2_pytorch --data /path/to/data
--batch-size 3
--gradient-accumulate-every 5
--network-capacity 16バッチサイズ - batch-size 1に減らすことができますが、ネットワークが見られるミニバッチが小さくないようにgradient-accumulate-every増やす必要があります。これは素人に混乱するかもしれないので、今後のgradient-accumulate-everyの選択をどのように自動化するかを考えます。
ネットワーク容量 - ニューラルネットワーク容量を減らして、メモリ要件を軽減できます。これが生成のパフォーマンスを分解することが示されていることに注意してください。
これが機能しない場合は、「軽量」ガンに落ち着くことができます。これにより、妥当な時間でより多くの解像度で訓練するために品質をトレードオフすることができます。
以下は、Amazon Webサービスを使用した展開に役立ついくつかの手順です。これを使用するには、GPUに支えられたEC2インスタンスをプロビジョニングする必要があります。適切なインスタンスタイプは、P2またはP3シリーズからのものです。私(iBoates)はP2.xlarge(最も安いオプション)を試しましたが、Google Colabを使用するよりも、実際には遅く、非常に遅くなりました。より強力なインスタンスタイプはより良いかもしれませんが、それらはより高価です。これらの詳細については、こちらをご覧ください。
sudo snap install aws-cli --classic
aws configureその後、AWSアクセスキーを入力する必要があります。これは、AWS管理コンソール>プロフィール>マイセキュリティ資格情報>アクセスキーの下の管理コンソールから取得できます。
次に、これらのコマンドを実行するか、シェルスクリプトに入れてそれを実行します。
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これでstylegan2_pytorch [args]を呼び出すだけでトレーニングできるはずです。
注:
screenウィンドウでこれを実行する必要があります。 getSecclecticのおかげで、定期的にFIDスコアを計算できるようになりました!繰り返しますが、以下に示すように、1つの追加の引数で非常にシンプルになりました。
まず、 pytorch_fidパッケージをインストールします
$ pip install pytorch-fidに続く
$ stylegan2_pytorch --data ./data --calculate-fid-every 5000 FIDの結果は./results/{name}/fid_scores.txt {name}/fid_scores.txtにログに記録されます
プログラムで画像をサンプリングしたい場合は、次の単純なModelLoaderクラスでこれを行うことができます。
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 desireオープンソースの実験トラッカー(AIM)に損失を記録するには、そのような余分なフラグを渡すだけです。
$ stylegan2_pytorch --data ./data --log次に、Dockerがインストールされていることを確認する必要があります。 AIMの指示に従って、端末で以下を実行します。
$ aim up次に、ブラウザをアドレスに開くと、表示されるはずです

新しい論文は、差別者によって偽物とみなされるサンプルからのグラデーションの貢献を単にゼロにすることで、ジェネレーターが非常に良く学習し、新しい最先端を達成するという証拠を作成しました。
$ stylegan2_pytorch - - data . / data - - top - k - trainingガンマは、完全なバッチサイズからターゲット分数の50%(変更可能なハイパーパラメーター)にゆっくりとTOPKを減少させる減衰スケジュールです。
$ stylegan2_pytorch - - data . / data - - top - k - training - - generate - top - k - frac 0.5 - - generate - top - k - gamma 0.99識別子の中間表現がベクトル量子化されている場合、最近の論文では、結果が改善されたことが報告されました。私は劇的な変化に気づいていませんが、これを機能として追加することにしました。使用するには、Quantizeをベクトル化するレイヤーを指定する必要があります。デフォルトの辞書サイズは256で、調整可能です。
# 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 512私は(通常のGANトレーニングとの段階で)差別装置で対照学習を試みましたが、最終結果の安定性と品質の改善が観察される可能性があります。以下に示すように、この実験機能を簡単なフラグでオンにすることができます。
$ stylegan2_pytorch - - data . / data - - cl - regこれは、トレーニングを安定させるために相対論的なGan論文で提案されました。私はさまざまな結果を得ましたが、それを試したい人のための機能が含まれます。
$ stylegan2_pytorch - - data . / data - - rel - disc - lossデフォルトでは、StyleGanアーキテクチャは、徐々にアップサンプリングされているため、一定の学習4x4ブロックをスタイリングします。これは、4x4ブロックがスタイルベクトルwから学習されるようにする実験機能です。
$ stylegan2_pytorch - - data . / data - - no - const最近の論文では、実際のロジットと偽のロジットの間の新しい対照的な損失は、他の種類の損失よりも品質を改善できると提案しています。 (このリポジトリのデフォルトはヒンジの損失であり、論文はわずかな改善を示しています)
$ stylegan2_pytorch - - data . / data - - dual - contrast - loss stylegan2 + unet差別器
私はUNETの差別者で本当に良い結果を得ましたが、建築的に変更は大きすぎてこのリポジトリのオプションとして適合できませんでした。完璧を目指している場合は、お気軽にお試しください。
他のGan Architecture(Biggan)にロイヤルトリートメントを提供してほしい場合は、私のメールでお気軽にご連絡ください。あなたのピッチを聞いてうれしいです。
Tensorflow 2.0のための彼の刺激的なシンプルなポートについて、Matthew Mannに感謝します
@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 }
}