著者の公式に非公式のPytorch Bigganの実装。

このレポは、アンドリュー・ブロック、ジェフ・ドナヒュー、カレン・シモーニャンによる高忠実度の自然画像合成のための大規模なGANトレーニングからの4-8 GPUトレーニングのビッグガンのコードを含んでいます。
このコードは、Andy BrockとAlex Andonianによるものです。
必要になります:
まず、オプションで、ターゲットデータセットの事前処理されたHDF5バージョンをI/Oのより速く準備することができます。これに続いて(またはそうでない)、FIDを計算するために必要な瞬間が必要です。これらは両方とも変更と実行によって行うことができます
sh scripts/utils/prepare_data.shデフォルトでは、このディレクトリのImagENetトレーニングセットがルートフォルダーdataにダウンロードされ、128x128ピクセルの解像度でキャッシュされたHDF5を準備します。
スクリプトフォルダーには、異なるバッチサイズのビッグガンをトレーニングする複数のBASHスクリプトがあります。このコードは、完全なTPUポッドにアクセスできないため、勾配蓄積(複数のミニバッチでグレードを平均化し、nの蓄積後にのみオプティマイザーステップを踏む)を使用してメガバッチをスプーフィングします。デフォルトでは、 launch_BigGAN_bs256x8.shスクリプトは、256と8の勾配蓄積のバッチサイズのフルサイズのBigganモデルをトレーニングします。2048の合計バッチサイズでは、8xv100ではテンソールコアなし(テンソルコアなし)、このスクリプトは150kの復活まで15日かかります。
最初に、セットアップがサポートできる最大バッチサイズを把握する必要があります。ここで提供される事前に訓練されたモデルは、デフォルトで使用されるBS256よりもわずかに多くサポートできる8xv100(それぞれ16GB VRAM)でトレーニングされました。これを判断したら、バッチサイズの勾配蓄積の数が希望する合計バッチサイズに等しくなるように、スクリプトを変更する必要があります(Bigganのデフォルトは2048)。
また、このスクリプトは、(〜64GB)i128.hdf5ファイル全体をRAMにロードする--load_in_mem argを使用して、データロードをより高速に使用する - load_in_mem argを使用することに注意してください。これをサポートするのに十分なRAM(おそらく96GB+)がない場合は、この引数を削除してください。

トレーニング中、このスクリプトはトレーニングメトリックとテストメトリックを使用してログを出力し、モデルの重み/オプティマイザーパラメーションの複数のコピー(2つの最新および5つの最高スコアリング)を保存し、重量を節約するたびにサンプルと補間を生成します。ログフォルダーには、これらのログを処理し、MATLABを使用して結果をプロットするスクリプトが含まれています(申し訳ありませんが申し訳ありません)。
トレーニング後、 sample.pyを使用して追加のサンプルと補間を生成し、異なる切り捨て値、バッチサイズ、定位統計蓄積の数などでテストできます。例については、 sample_BigGAN_bs256x8.shスクリプトを参照してください。
デフォルトでは、すべてがこのレポと同じフォルダーにあると想定される重み/サンプル/ログ/データフォルダーに保存されます。これらすべてを、 --base_root引数を使用して別のベースフォルダーに向けるか、それぞれの引数( --logs_root )でこれらのそれぞれの特定の場所を選択できます。
Biggan-Deepを実行するためのスクリプトを含めますが、モデルを使用してモデルを完全にトレーニングしていないため、テストされていないと考えてください。さらに、Cifarでモデルを実行し、ImagenetでSa-Gan(EMAを使用)とSn-Ganを実行するスクリプトを含めます。 SA-GANコードは、4xTITANX(またはGPU RAMの点で同等)があると想定しており、128と2の勾配蓄積のバッチサイズで実行されます。
このレポは、Pytorch In-Built Inception Networkを使用して、ISおよびFIDを計算します。これらのスコアは、公式のTFインセプションコードを使用して得られるスコアとは異なり、監視目的のみを目的としています! --sample_npz引数を使用してモデルでsample.pyを実行し、inception_tf13を実行して実際のtensorflowの計算を実行します。 TF1.4+がオリジナルISコードを破壊するため、Tensorflow 1.3以前にインストールする必要があることに注意してください。
2つの前提条件のモデルチェックポイント(G、D、GのEMAコピー、オプティマイザー、および状態DICTを含む)を含めます。
Places-365の前払いモデルはまもなく登場します。
このレポは、元のTFHUB Bigganジェネレーターの重みをPytorchに移植するためのスクリプトも含まれています。詳細については、TFHUBフォルダーのスクリプトを参照してください。

中断されたトレーニングを再開したり、事前に訓練されたモデルを微調整したい場合は、同じ起動スクリプトを実行しますが、 --resume引数が追加されています。実験名は構成から自動的に生成されますが、 --experiment_name arg(たとえば、変更されたオプティマイザー設定を使用してモデルを微調整する場合)を使用してオーバーライドできます。
独自のデータセットを準備するには、データセットに追加して、utils.py(dset_dict、imsize_dict、root_dict、nclass_dict、classes_per_sheet_dict)の利便性dictを変更する必要があります。 prepare_data.shでプロセスを繰り返します(オプションでHDF5プリプロセッシングコピーを作成し、FIDの開始モーメントを計算します)。
デフォルトでは、トレーニングスクリプトは、インセプションスコアで測定された最高の最高のチェックポイントを保存します。 Imagenet以外のデータセットの場合、インセプションスコアは品質の非常に悪い--which_best FIDになる可能性があるため、使用したい可能性があります。
独自のトレーニング機能を使用するには(例:BigVaeなど):train_fns.gan_training_functionを変更するか、新しいトレーニングfnを追加して、 if config['which_train_fn'] == 'GAN': line in train.pyの後に追加します。
--num_G_SVs引数を介してより多くのSVSの計算をサポートします。 このコードは、さらなる研究コードのための拡張可能なハッキング可能なベースとして機能するようにゼロから設計されています。私たちは、抽象化が研究に適した厚さであることを確認することに多くの考えを置いてきました。重要なアイデアは、SOTAのセットアップを試して、いくつかの変更を行う場合(独自の新しい損失関数、アーキテクチャ、自己関節ブロックなどを試してください)、コードベースの残りを心配することなく、1つまたは2つの場所でコードをドロップするだけで簡単に実行できるはずです。 self.partialのbiggan.pyモデルの定義の使用など、self.convとfunctools.partialは、Spectral Normクラスの継承の設計と同様に、これを念頭に置いてまとめられました。
とはいえ、これは単一のプロジェクトのためのやや大きなコードベースです。私たちはコメントを徹底的にしようとしましたが、より明確なもの、より良い書面、またはより良いリファクタリングをすることができると思われるものがある場合は、問題やプルリクエストをお気軽にお問い合わせください。
このコードに取り組んだり改善したりしたいですか?このリポジトリが恩恵を受けることはいくつかありますが、まだ機能していません。
Imagenetラベルについては、このディレクトリを参照してください。
このコードを使用する場合は、引用してください
@inproceedings{
brock2018large,
title={Large Scale {GAN} Training for High Fidelity Natural Image Synthesis},
author={Andrew Brock and Jeff Donahue and Karen Simonyan},
booktitle={International Conference on Learning Representations},
year={2019},
url={https://openreview.net/forum?id=B1xsqj09Fm},
}
寛大なクラウドクレジットの寄付をしてくれたGoogleに感謝します。
Jiayuan MaoとTete XiaoによるSyncbn。
もともとJanSchlüter出身の進歩バー。
voxnetのメトリックロガーをテストします。
Modar M. AlfadlyからのCovのPytorch実装。
Tsung-Yu LinとSubhransu MajiからのFIDのPytorch Fast Matrix SQRT。
Openaiの改良ガンのTensorflow Inceptionスコアコード。