스타니슬라프 피드호르스키(Stanislav Pidhorskyi) • 도널드 A. 아제로(Donald A. Adjeroh) • 지안프랑코 도레토
모델 및 정성적 결과가 포함된 Google 드라이브 폴더
적대적 잠재 자동 인코더
스타니슬라프 피도르스키, 도널드 아제로, 지안프랑코 도레토개요: 오토인코더 네트워크는 인코더 생성기 맵을 동시에 학습하여 생성 속성과 표현 속성을 결합하는 것을 목표로 하는 비지도 방식 접근 방식입니다. 광범위하게 연구되었지만 GAN과 동일한 생성 능력을 가지고 있는지, 아니면 얽힌 표현을 학습하는지에 대한 문제는 완전히 해결되지 않았습니다. 이러한 문제를 공동으로 해결하는 자동 인코더를 소개합니다. 이를 ALAE(Adversarial Latent Autoencoder)라고 합니다. 이는 GAN 훈련 절차에 대한 최근 개선 사항을 활용할 수 있는 일반적인 아키텍처입니다. 우리는 두 개의 자동 인코더를 설계했습니다. 하나는 MLP 인코더를 기반으로 하고 다른 하나는 StyleALAE라고 하는 StyleGAN 생성기를 기반으로 합니다. 우리는 두 아키텍처의 분리 속성을 확인합니다. 우리는 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
길 | 설명 |
---|---|
알라에 | 리포지토리 루트 폴더 |
├ 구성 | 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 데이터 세트의 구성 파일(W가 아닌 Z 공간에서 회귀) |
│ ├ ffhq.yaml | 1024x1024 해상도의 FFHQ 데이터 세트용 구성 파일입니다. |
│ ├ mnist.yaml | 스타일 아키텍처를 사용하는 MNIST 데이터세트의 구성 파일입니다. |
│ └ mnist_fc.yaml | 완전 연결 레이어(순열 불변 MNIST)만 사용하는 MNIST 데이터세트용 구성 파일입니다. |
├ 데이터 세트_준비 | 데이터 세트 준비를 위한 스크립트가 포함된 폴더입니다. |
│ ├ prepare_celeba_hq_tfrec.py | 256x256 해상도의 CelebA-HQ 데이터 세트에 대한 TFRecords를 준비합니다. |
│ ├ prepare_celeba_tfrec.py | 128x128 해상도의 CelebA 데이터세트용 TFRecords를 준비합니다. |
│ ├ prepare_mnist_tfrec.py | MNIST 데이터세트를 위한 TFRecord를 준비합니다. |
│ ├ 분할_tfrecords_bedroom.py | LSUN 침실 데이터세트에 대해 StyleGAN 문서에서 공식 TFRecord를 분할합니다. |
│ └ 분할_tfrecords_ffhq.py | FFHQ 데이터세트에 대해 StyleGAN 문서에서 공식 TFRecord를 분할합니다. |
├ 데이터세트_샘플 | 다양한 데이터 세트에 대한 샘플 입력이 포함된 폴더입니다. 훈련 중 수치 및 테스트 입력에 사용됩니다. |
├ make_Figures | 다양한 피규어 제작을 위한 스크립트입니다. |
├ 지표 | 측정항목 계산을 위한 스크립트입니다. |
├ 교장_방향 | 다양한 속성에 대한 기본 방향 벡터를 계산하기 위한 스크립트입니다. 대화형 데모용 . |
├ 스타일_믹싱 | 스타일 혼합 그림을 생성하기 위한 샘플 입력 및 스크립트입니다. |
├ training_artifacts | 체크포인트/샘플 출력/플롯을 저장하기 위한 기본 위치입니다. |
│ └ download_all.py | 사전 훈련된 모든 모델을 다운로드하기 위한 스크립트입니다. |
├ Interactive_demo.py | 대화형 데모를 위한 실행 가능한 스크립트입니다. |
├ train_alae.py | 훈련을 위해 실행 가능한 스크립트입니다. |
├ train_alae_separate.py | 절제 연구를 위한 훈련을 위한 실행 가능한 스크립트(별도의 인코더 및 판별기) |
├ checkpointer.py | 모델 가중치, 최적화 상태 및 손실 내역을 저장/복원하는 모듈입니다. |
├ custom_adam.py | 학습률 균등화 및 제로초 베타를 위한 맞춤형 Adam 최적화 프로그램입니다. |
├ 데이터로더.py | 데이터세트 클래스, 로더, 반복자 등이 포함된 모듈 |
├ defaults.py | 기본값이 있는 구성 변수에 대한 정의입니다. |
├ 런처.py | 다중 GPU, 다중 프로세스 훈련을 실행하기 위한 도우미입니다. 구성 및 로깅을 설정합니다. |
├ lod_driver.py | 네트워크 성장/안정화 관리를 위한 헬퍼 클래스입니다. |
├ lreq.py | 학습률 균등화를 위한 맞춤형 Linear , Conv2d 및 ConvTranspose2d 모듈입니다. |
├ 모델.py | 상위 수준 모델 정의가 포함된 모듈입니다. |
├ model_separate.py | 위와 동일하지만 절제 연구용입니다. |
├ net.py | 여러 아키텍처에 대한 모든 네트워크 블록을 정의합니다. |
├ 레지스트리.py | 구성 파일에서 선택하기 위한 네트워크 블록의 레지스트리입니다. |
├ 스케줄러.py | 웜 스타트 및 여러 최적화 프로그램을 통합하는 사용자 정의 스케줄러. |
├ tracker.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를 사용하여 수행됩니다. TFRecord는 Pytorch와 함께 사용할 수 있는 DareBlopy를 사용하여 읽습니다.
구성 파일과 모든 준비 스크립트에서는 모든 데이터세트가 /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 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
에는 모델 가중치와 함께 실제 .pth
피클에 대한 경로가 포함된 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>
생성 그림을 실행하려면 다음을 수행하십시오.
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에서는 재현성에 문제가 있을 수 있습니다. 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 네트워크에서 파생되었습니다. 이 네트워크는 원래 대규모 시각적 인식을 위한 Very Deep Convolutional Networks 프로젝트 페이지의 Creative Commons BY 4.0 라이선스에 따라 공유되었습니다.
vgg16_zhang_perceptual.pkl은 Richard Zhang, Phillip Isola, Alexei A. Efros, Eli Shechtman 및 Oliver Wang이 사전 훈련한 LPIPS 가중치에서 추가로 파생되었습니다. 가중치는 원래 PerceptualSimilarity 저장소의 BSD 2-Clause "Simplified" 라이센스에 따라 공유되었습니다.
마지막으로 측정항목을 실행하려면 다음 안내를 따르세요.
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