斯坦尼斯拉夫·皮德霍爾斯基 • 唐納德·A·阿傑羅 • 吉安·弗蘭科·多雷托
包含模型和定性結果的 Google Drive 資料夾
對抗性潛在自動編碼器
斯坦尼斯拉夫·皮德霍斯基、唐納德·阿傑羅、吉安·弗蘭科·多雷托摘要:自動編碼器網路是一種無監督方法,旨在透過同時學習編碼器-生成器映射來結合生成屬性和表示屬性。儘管進行了廣泛的研究,但它們是否具有與 GAN 相同的生成能力或學習解纏結表示的問題尚未得到充分解決。我們引入了一種聯合解決這些問題的自動編碼器,我們稱之為對抗性潛在自動編碼器(ALAE)。它是一個通用架構,可以利用 GAN 訓練程式的最新改進。我們設計了兩種自動編碼器:一種基於 MLP 編碼器,另一種基於 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 資料集。您可以使用-c
參數變更配置。要以 256x256 解析度在celeb-hq
上運行,請運行:
python interactive_demo.py -c celeba-hq256
但是,對於 FFHQ 以外的配置,您需要取得屬性的新主方向向量。
儲存庫中的程式碼的組織方式是所有腳本都必須從儲存庫的根目錄執行。如果您使用IDE(例如PyCharm或Visual Studio Code),只需將工作目錄設定為指向儲存庫的根目錄。
如果你想從命令列運行,那麼你還需要設定PYTHONPATH變數以指向儲存庫的根目錄。
例如,假設我們已將儲存庫克隆到~/ALAE目錄,然後執行以下操作:
$ cd ~/ALAE
$ export PYTHONPATH=$PYTHONPATH:$(pwd)
現在您可以如下運行腳本:
$ python style_mixing/stylemix.py
小路 | 描述 |
---|---|
ALAE | 儲存庫根資料夾 |
├ 配置 | 包含 yaml 設定檔的資料夾。 |
│ ├ 臥室.yaml | 解析度為 256x256 的 LSUN 臥室資料集的設定檔。 |
│ ├ celeba.yaml | 128x128 解析度的 CelebA 資料集的設定檔。 |
│ ├ celeba-hq256.yaml | 256x256 解析度的 CelebA-HQ 資料集的設定檔。 |
│ ├ celeba_ablation_nostyle.yaml | 用於消融研究的 CelebA 128x128 資料集的配置(無樣式)。 |
│ ├ celeba_ablation_separate.yaml | 用於消融研究的 CelebA 128x128 資料集的配置(單獨的編碼器和鑑別器)。 |
│ ├ celeba_ablation_z_reg.yaml | 用於消融研究的 CelebA 128x128 資料集的配置(Z 空間回歸,而不是 W 空間)。 |
│ ├ ffhq.yaml | 1024x1024 解析度的 FFHQ 資料集的設定檔。 |
│ ├ mnist.yaml | 使用 Style 架構的 MNIST 資料集的設定檔。 |
│ └ mnist_fc.yaml | 僅使用全連接層(排列不變 MNIST)的 MNIST 資料集的設定檔。 |
├ 資料集_準備 | 包含用於資料集準備的腳本的資料夾。 |
│ ├ 準備_celeba_hq_tfrec.py | 為 CelebA-HQ 資料集準備 256x256 解析度的 TFRecords。 |
│ ├ 準備_celeba_tfrec.py | 為 CelebA 資料集準備 128x128 解析度的 TFRecords。 |
│ ├ 準備_mnist_tfrec.py | 為 MNIST 資料集準備 TFRecords。 |
│ ├ split_tfrecords_bedroom.py | 將官方 TFRecords 從 StyleGAN 論文中拆分為 LSUN 臥室資料集。 |
│ └ split_tfrecords_ffhq.py | 將官方 TFRecords 從 StyleGAN 論文中拆分為 FFHQ 資料集。 |
├ 資料集樣本 | 包含不同資料集的範例輸入的資料夾。用於訓練期間的數字和測試輸入。 |
├ make_figures | 用於製作各種人物的腳本。 |
├ 指標 | 用於計算指標的腳本。 |
├ 主體方向 | 用於計算各種屬性的主方向向量的腳本。用於互動式演示。 |
├ 風格_混合 | 用於產生風格混合圖形的範例輸入和腳本。 |
├ 訓練_工件 | 儲存檢查點/樣本輸出/繪圖的預設位置。 |
│ └ download_all.py | 用於下載所有預訓練模型的腳本。 |
├ 互動示範.py | 用於互動式演示的可運行腳本。 |
├ train_alae.py | 用於訓練的可運行腳本。 |
├ train_alae_separate.py | 用於訓練消融研究的可運行腳本(單獨的編碼器和鑑別器)。 |
├ 檢查點.py | 用於保存/恢復模型權重、優化器狀態和損失歷史記錄的模組。 |
├ 自訂_adam.py | 客製化的 Adam 優化器,用於學習率均衡和零秒 Beta。 |
├ 資料載入器.py | 具有資料集類別、載入器、迭代器等的模組。 |
├ 預設值.py | 具有預設值的配置變數的定義。 |
├ 啟動器.py | 用於運行多 GPU、多進程訓練的助手。設定配置和日誌記錄。 |
├ lod_driver.py | 用於管理成長/穩定網路的助手類別。 |
├ lreq.py | 用於學習率均衡的自訂Linear 、 Conv2d 和ConvTranspose2d 模組。 |
├ 模型.py | 具有高級模型定義的模組。 |
├ model_separate.py | 與上方相同,但用於消融研究。 |
├ 網路.py | 多種架構的所有網路區塊的定義。 |
├ 註冊表.py | 用於從設定檔中選擇的網路區塊註冊表。 |
├ 調度程式.py | 具有熱啟動和聚合多個優化器的自訂調度程序。 |
├ 追蹤器.py | 用於繪製損失的模組。 |
└ 實用程式.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
。
訓練是使用 TFRecords 完成的。 TFRecords 使用 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 Drive 下載模型時會出現問題。現在,腳本的設定方式是,如果無法從 Google Drive 下載數據,它將嘗試從 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
中,它保存一個檔案last_checkpoint
,其中包含帶有模型權重的實際.pth
pickle 的路徑。如果你想用特定的權重檔案測試模型,你可以簡單地修改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>
要使生成圖運作:
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 可用,它將在單一 GPU 上運行,無需特別注意。
建議的 GPU 數量為 8 個。您可能需要根據 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 模型儲存庫上根據 Apache 2.0 許可證共享的。
vgg16.pkl 和 vgg16_zhang_perceptual.pkl 源自 Karen Simonyan 和 Andrew Zisserman 預訓練的 VGG-16 網路。該網路最初是在用於大規模視覺識別的非常深卷積網路專案頁面上根據 Creative Commons BY 4.0 授權共享的。
vgg16_zhang_perceptual.pkl 進一步源自 Richard Zhu、Phillip Isola、Alexei A. Efros、Eli Shechtman 和 Oliver Wang 預訓練的 LPIPS 權重。這些權重最初是在 PerceptualSimilarity 儲存庫上的 BSD 2-Clause「簡化」許可證下共享的。
最後,運行指標:
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