スタニスラフ・ピホルスキー、ドナルド・A・アジェロー、ジャンフランコ・ドレット
モデルと定性的結果を含む Google ドライブ フォルダー
敵対的な潜在オートエンコーダー
スタニスラフ・ピホルスキー、ドナルド・アジェロー、ジャンフランコ・ドレット要約:オートエンコーダ ネットワークは、エンコーダ - ジェネレータ マップを同時に学習することで、生成プロパティと表現プロパティを結合することを目的とした教師なしアプローチです。広範に研究されていますが、GAN と同じ生成能力があるかどうか、またはもつれの解けた表現を学習できるかどうかという問題は完全には解決されていません。私たちは、これらの問題に共同で取り組む、Adversarial Latent Autoencoder (ALAE) と呼ばれるオートエンコーダーを紹介します。これは、GAN トレーニング手順の最近の改善を活用できる一般的なアーキテクチャです。私たちは 2 つのオートエンコーダーを設計しました。1 つは MLP エンコーダーに基づいており、もう 1 つは StyleGAN ジェネレーター (StyleALAE と呼ばれています) に基づいています。両方のアーキテクチャのもつれ解除特性を検証します。 StyleALAE は、StyleGAN と同等の品質で 1024x1024 の顔画像を生成できるだけでなく、同じ解像度で実際の画像に基づいた顔の再構成と操作も生成できることを示します。これにより、ALAE は、ジェネレーターのみのタイプのアーキテクチャーの機能に匹敵し、それを超えることができる最初のオートエンコーダーになります。
@InProceedings{pidhorskyi2020adversarial,
author = {Pidhorskyi, Stanislav and Adjeroh, Donald A and Doretto, Gianfranco},
booktitle = {Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR)},
title = {Adversarial Latent Autoencoders},
year = {2020},
note = {[to appear]},
}
デモを実行するには、CUDA 対応 GPU、PyTorch >= v1.3.1、および cuda/cuDNN ドライバーがインストールされている必要があります。必要なパッケージをインストールします。
pip install -r requirements.txt
事前トレーニングされたモデルをダウンロードします。
python training_artifacts/download_all.py
デモを実行します。
python interactive_demo.py
使用するyaml構成を指定できます。構成はここにあります: https://github.com/podgorskiy/ALAE/tree/master/configs。デフォルトでは、FFHQ データセットに 1 つを使用します。 -c
パラメーターを使用して構成を変更できます。 celeb-hq
を 256x256 の解像度で実行するには、次を実行します。
python interactive_demo.py -c celeba-hq256
ただし、FFHQ 以外の構成の場合は、属性の新しい主方向ベクトルを取得する必要があります。
リポジトリ内のコードは、すべてのスクリプトがリポジトリのルートから実行される必要があるように編成されています。 IDE (PyCharm や Visual Studio Code など) を使用する場合は、リポジトリのルートを指すようにWorking Directory を設定するだけです。
コマンドラインから実行する場合は、リポジトリのルートを指すようにPYTHONPATH変数を設定する必要もあります。
たとえば、リポジトリを~/ALAEディレクトリにクローンしたとします。その後、次の操作を実行します。
$ cd ~/ALAE
$ export PYTHONPATH=$PYTHONPATH:$(pwd)
これで、次のようにスクリプトを実行できるようになります。
$ python style_mixing/stylemix.py
パス | 説明 |
---|---|
アラエ | リポジトリのルートフォルダー |
§ 構成 | yaml 設定ファイルが含まれるフォルダー。 |
│ § ベッドルーム.yaml | 解像度 256x256 の LSUN 寝室データセットの構成ファイル。 |
│ § セレバ.yaml | 解像度 128x128 の CelebA データセットの構成ファイル。 |
│ § celeba-hq256.yaml | 256x256 解像度の CelebA-HQ データセットの構成ファイル。 |
│ § celeba_ablation_nostyle.yaml | アブレーション研究用の CelebA 128x128 データセットの構成ファイル (スタイルなし)。 |
│ § celeba_ablation_セパレート.yaml | アブレーション研究用の CelebA 128x128 データセットの構成ファイル (別個のエンコーダーとディスクリミネーター)。 |
│ § celeba_ablation_z_reg.yaml | アブレーション研究用の CelebA 128x128 データセットの構成ファイル (W 空間ではなく Z 空間での回帰)。 |
│ § ffhq.yaml | 解像度 1024x1024 の FFHQ データセットの構成ファイル。 |
│ § mnist.yaml | スタイル アーキテクチャを使用した MNIST データセットの構成ファイル。 |
│ └ mnist_fc.yaml | 完全に接続された層 (順列不変 MNIST) のみを使用する MNIST データセットの構成ファイル。 |
§ データセット_準備 | データセット準備用のスクリプトが含まれるフォルダー。 |
│ § prepare_celeba_hq_tfrec.py | 256x256 の解像度で CelebA-HQ データセットの TFRecord を準備します。 |
│ § prepare_celeba_tfrec.py | 128x128 の解像度で CelebA データセットの TFRecord を準備します。 |
│ § prepare_mnist_tfrec.py | MNIST データセット用の TFRecord を準備します。 |
│ っていって、split_tfrecords_bedroom.py | LSUN 寝室データセットの公式 TFRecord を StyleGAN ペーパーから分割します。 |
│ └ Split_tfrecords_ffhq.py | FFHQ データセットの StyleGAN ペーパーから公式 TFRecord を分割します。 |
§ データセット_サンプル | さまざまなデータセットのサンプル入力が含まれるフォルダー。トレーニング中の数値やテスト入力に使用されます。 |
§ フィギュアメイク | さまざまな図形を作成するためのスクリプト。 |
§ メトリクス | メトリクスを計算するためのスクリプト。 |
§ 主な方向 | さまざまな属性の主方向ベクトルを計算するためのスクリプト。インタラクティブなデモ用。 |
§ スタイルミキシング | スタイル混合図を作成するためのサンプル入力とスクリプト。 |
§ トレーニング_アーティファクト | チェックポイント/サンプル出力/プロットを保存するためのデフォルトの場所。 |
│ └ download_all.py | すべての事前トレーニング済みモデルをダウンロードするためのスクリプト。 |
§ インタラクティブ_デモ.py | インタラクティブなデモ用の実行可能なスクリプト。 |
§ train_alae.py | トレーニング用の実行可能なスクリプト。 |
§ train_alae_セパレート.py | アブレーション研究のトレーニング用の実行可能なスクリプト (別個のエンコーダーとディスクリミネーター)。 |
§ チェックポイントター.py | モデルの重み、オプティマイザの状態、損失履歴を保存/復元するモジュール。 |
§ カスタムadam.py | 学習率の等化とゼロ秒ベータ用にカスタマイズされた adam オプティマイザー。 |
§ データローダー.py | データセットクラス、ローダー、イテレータなどを含むモジュール。 |
§ デフォルト.py | デフォルト値を使用した構成変数の定義。 |
§ ランチャー.py | マルチ GPU、マルチプロセス トレーニングを実行するためのヘルパー。構成とログをセットアップします。 |
§ lod_driver.py | ネットワークの成長/安定化を管理するためのヘルパー クラス。 |
§ lreq.py | 学習率等化のためのカスタムLinear 、 Conv2d 、およびConvTranspose2d モジュール。 |
§ モデル.py | 高レベルのモデル定義を含むモジュール。 |
§ モデル_セパレート.py | 上記と同じですが、アブレーション研究用です。 |
§ net.py | 複数のアーキテクチャのすべてのネットワーク ブロックの定義。 |
§ レジストリ.py | 構成ファイルから選択するためのネットワーク ブロックのレジストリ。 |
§ スケジューラー.py | ウォーム スタートと複数のオプティマイザを集約したカスタム スケジューラ。 |
§ トラッカー.py | 損失をプロットするためのモジュール。 |
━ utils.py | 非同期呼び出し用のデコレータ、キャッシュ用のデコレータ、ネットワーク ブロック用のレジストリ。 |
このコードベースでは、構成を処理するためにyacsが使用されます。
実行可能なスクリプトのほとんどは、使用する構成ファイルを指定できる-c
パラメーターを受け入れます。たとえば、再構築図を作成するには、次を実行できます。
python make_figures/make_recon_figure_paged.py
python make_figures/make_recon_figure_paged.py -c celeba
python make_figures/make_recon_figure_paged.py -c celeba-hq256
python make_figures/make_recon_figure_paged.py -c bedroom
デフォルトの構成はffhq
です。
トレーニングは TFRecord を使用して行われます。 TFRecord は DareBlopy を使用して読み取られるため、Pytorch での使用が可能になります。
構成ファイルおよびすべての準備スクリプトでは、すべてのデータセットが/data/datasets/
にあると想定されています。構成ファイル内のパスを変更するか、データセットを保存する場所へのシンボリックリンクを作成することができます。
CelebA-HQ を生成する公式の方法は難しい場合があります。このページを参照してください: https://github.com/suvojit-0x55aa/celebA-HQ-dataset-download 事前生成されたデータセットは次から入手できます: https://drive.google.com/drive/folders/11Vz0fqHS2rXDb5pprgTjpD7S2BAJhi1P
事前トレーニングされたモデルをダウンロードするには、次のコマンドを実行します。
python training_artifacts/download_all.py
注: 以前は、ダウンロード制限のため、Google ドライブからモデルをダウンロードする際に問題がありました。これで、スクリプトは、Google ドライブからのデータのダウンロードに失敗した場合に、S3 からのダウンロードを試行するように設定されました。
問題が発生した場合は、すべての *.pth ファイルを削除し、 dlutilsパッケージを更新し ( pip install dlutils --upgrade
)、 download_all.py
再度実行してみてください。それでも問題が解決しない場合は、問題を開いてください。また、ここからモデルを手動でダウンロードしてみることもできます: https://drive.google.com/drive/folders/1tsI1q1u8QRX5t7_lWCSjpniLGlNY-3VY?usp=sharing
構成ファイルでは、 OUTPUT_DIR
重みの保存先と読み取り先を指します。例: OUTPUT_DIR: training_artifacts/celeba-hq256
OUTPUT_DIR
には、モデルの重みを含む実際の.pth
pickle へのパスを含むファイルlast_checkpoint
が保存されます。特定の重みファイルを使用してモデルをテストしたい場合は、 last_checkpoint
ファイルを変更するだけです。
スタイル混合図を生成するには、次のコマンドを実行します。
python style_mixing/stylemix.py -c <config>
<config>
の代わりに、 ffhq
、 celeba
、 celeba-hq256
、 bedroom
のいずれかを入力します。
複数のスケール イメージを使用して再構成を生成するには:
python make_figures/make_recon_figure_multires.py -c <config>
複数のページ上のすべてのサンプル入力から再構築を生成するには:
python make_figures/make_recon_figure_paged.py -c <config>
次のようなものもあります。
python make_figures/old/make_recon_figure_celeba.py
python make_figures/old/make_recon_figure_bed.py
FFHQ のテスト セットから再構成を生成するには:
python make_figures/make_recon_figure_ffhq_real.py
補間図を生成するには:
python make_figures/make_recon_figure_interpolation.py -c <config>
走査図を生成するには:
(FFHQ 以外のデータセットの場合は、最初に主な方向を見つける必要があります)
python make_figures/make_traversarls.py -c <config>
生成 Figure を実行するには:
make_generation_figure.py -c <config>
必要なパッケージのインストールに加えて、次のことを行います。
pip install -r requirements.txt
DareBlopy をインストールする必要があります。
pip install dareblopy
トレーニングを実行するには:
python train_alae.py -c <config>
利用可能なすべての GPU でマルチ GPU トレーニングを実行します。並列処理にはDistributedDataParallel
使用します。使用可能な GPU が 1 つだけの場合は、単一の GPU で実行されるため、特別な注意は必要ありません。
推奨される GPU の数は 8 です。これより少ない数の GPU では再現性に問題が生じる可能性があります。 GPU のメモリ サイズに応じて、構成ファイル内のバッチ サイズを調整する必要がある場合があります。
必要なパッケージと DareBlopy のインストールに加えて、StyleGAN から TensorFlow と dnnlib をインストールする必要があります。
Tensorflow はバージョン1.10
である必要があります。
pip install tensorflow-gpu==1.10
CUDA バージョン 9.0 が必要です。
おそらく、これを処理するには Anaconda を使用するのが最善の方法ですが、私は、pop-os リポジトリから CUDA 9.0 をインストールすることを好みます (Ubuntu で動作します)。
sudo echo "deb http://apt.pop-os.org/proprietary bionic main" | sudo tee -a /etc/apt/sources.list.d/pop-proprietary.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 204DD8AEC33A7AFF
sudo apt update
sudo apt install system76-cuda-9.0
sudo apt install system76-cudnn-9.0
次に、 LD_LIBRARY_PATH
変数を設定するだけです。
export LD_LIBRARY_PATH=/usr/lib/cuda-9.0/lib64
Dnnlib は StyleGAN で使用されるパッケージです。次の方法でインストールできます。
pip install https://github.com/podgorskiy/dnnlib/releases/download/0.0.1/dnnlib-0.0.1-py3-none-any.whl
メトリクスを実行するためのすべてのコードは、StyleGAN リポジトリのコードに大きく基づいています。また、同じ事前トレーニング済みモデルも使用します。
https://github.com/NVlabs/stylegan#licenses
inception_v3_features.pkl および inception_v3_softmax.pkl は、Christian Szegedy、Vincent Vanhoucke、Sergey Ioffe、Jonathon Shlens、Zbigniew Wojna によって事前トレーニングされた Inception-v3 ネットワークから派生しています。このネットワークは元々、TensorFlow Models リポジトリ上の Apache 2.0 ライセンスに基づいて共有されていました。
vgg16.pkl と vgg16_zhang_perceptual.pkl は、Karen Simonyan と Andrew Zisserman によって事前トレーニングされた VGG-16 ネットワークから派生しています。このネットワークはもともと、大規模視覚認識のための超深層畳み込みネットワーク プロジェクト ページでクリエイティブ コモンズ BY 4.0 ライセンスに基づいて共有されていました。
vgg16_zhang_perceptual.pkl は、Richard Zhang、Phillip Isola、Alexei A. Efros、Eli Shechtman、および Oliver Wang によって、事前トレーニングされた LPIPS 重みからさらに派生されます。重みは元々、BSD 2 条項「簡易」ライセンスに基づいて PerceptualSimilarity リポジトリで共有されていました。
最後に、メトリクスを実行するには、次のようにします。
python metrics/fid.py -c <config> # FID score on generations
python metrics/fid_rec.py -c <config> # FID score on reconstructions
python metrics/ppl.py -c <config> # PPL score on generations
python metrics/lpips.py -c <config> # LPIPS score of reconstructions