このプロジェクトは、ポートレート、動物、図面などのランダムなシードから高品質の画像を作成できる、深い畳み込み敵対的生成ネットワークです。
このモデルは、モントリオール大学の論文Generative Adversarial Nets (2014) で説明されているような Generative Adversarial Network (GAN) です。
ジェネレーターとディスクリミネーターはどちらも、 Facebook AI Research (2015) の論文「Deep Convolutional Generative Adversarial Networks による教師なし表現学習」(2015) と同様の深層畳み込みニューラル ネットワークですが、いくつかの改良点があります。
Nvidiaの論文「Progressive Growing of GANs for Enhanced Quality, Stability, and variation 」(2017 年) の論文からEqualized Learning Rate Layersを追加しました。
Adobe Research (2019) の論文「Making Convolutional Networks Shift-Invariant Again 」からBilinear Upsampling / Downsampling を追加しました。
テルアビブ大学の論文SWAGAN: A Style-based Wavelet-driven Generative Model (2021) からウェーブレット変換を実装しました。
Nvidiaの論文A Style-Based Generator Architecture for Generative Adversarial Networks (2018) から、定数入力、マッピング ネットワークから学習したスタイル、および論文のノイズ インジェクションを備えたスタイルベース アーキテクチャを使用しました。
TomTomとAdobe (2019) による論文「MSG-GAN: Multi-Scale Gradients for Generative Adversarial Networks」からスキップ接続を追加しました。
Microsoft Research (2015) の論文「画像認識のための深層残差学習」から残差ブロックを追加しました。
OpenAIによるGAN トレーニングのための改善された技術(2016) の論文から、識別器の最後にミニバッチ標準偏差を追加しました。
モントリオール大学の論文Generative Adversarial Nets (2014) からのオリジナルの非飽和損失を保存しました。
NvidiaのStyleGAN の画質の分析と改善(2019) の論文から、ジェネレーターにパス長の正則化を追加しました。
Google BrainによるWasserstein GAN のトレーニングの改良(2017) の論文から、弁別器に勾配ペナルティ正則化を追加しました。
Nvidiaの論文「Training Generative Adversarial Networks with Limited Data (2020)」からAdaptive Discriminator Augmentation (ADA)を追加しましたが、拡張確率はトレーニングされていないため、手動で設定する必要があります(PyTorch 実装がないため、一部の拡張は無効になっています)。
pytorch-fidモジュールを使用して、リンツ大学による論文「2 つのタイムスケール更新ルールで訓練された GANs Trained to a Local Nash Equilibrium (2017)」から、訓練中のフレシェ開始距離 (FID)の計算を追加しました。
NvidiaのStyleGAN の画質の分析と改善(2019) の論文のようにプロジェクターを追加しました。
人間の顔 256*256 (FID: 5.97)
動物の顔 256*256 (FID: 6.56)
アニメの顔 256*256 (FID: 3.74)
面のペイント 256*256 (FID: 20.32)
複数のデータセットのトレーニング済みの重みはGoogle ドライブで入手できます。必要なのは、 .pt
ファイルをダウンロードしてmodels
フォルダーに置くことだけです。
次のコマンドを実行して依存関係をインストールします。
$ pip install -r requirements.txt
(CUDA を使用する場合は、PyTorch の特定のコマンドを使用する必要がある場合があります)
まず、画像のデータセットを見つけてダウンロードする必要があります(5,000 未満では少なすぎる可能性があり、150,000 を超える必要はありません) 。 Kaggleには多くのデータセットがあり、私がGoogle ドライブで使用したデータセットも見つかります。
次に、 training/settings.py
ファイルで、データセットへのパスを指定します。
私のように高価な 24GB GPU を持っていない場合は、デフォルト設定では機能しない可能性があります。次のことを試すことができます。
training.ipynb
ファイルを実行します(チェックポイントのおかげでいつでもトレーニングを停止し、後で再開できます)
testing.ipynb
ファイルを実行してランダムな画像を生成します
testing/interpolation.ipynb
ファイルを実行して、滑らかな補間ビデオの画像を生成します。
testing/projector.ipynb
ファイルを実行して、実際のイメージを潜在空間に投影します。
testing/style_mixing.ipynb
ファイルを実行して、スタイル ミキシング補間ビデオの画像を生成します。
testing/timelapse.ipynb
ファイルを実行して、トレーニング タイムラプス ビデオの画像を生成します。