Progressive Growing of GANs for Improved Quality, Stability, and Variation
[NOTE] This project was not goint well, so I made PyTorch implementation here.
Torch implementation of PROGRESSIVE GROWING OF GANS FOR IMPROVED QUALITY, STABILITY, AND VARIATION
YOUR CONTRIBUTION IS INVALUABLE FOR THIS PROJECT :)
[ ] (1) Implementing Pixel-wise normalization layer
[ ] (2) Implementing pre-layer normalization (for equalized learning rate)
(I have tried both, but failed to converge. Anyone can help implementing those two custom layers?)
How to use?
[step 1.] Prepare dataset
CelebA-HQ dataset is not available yet, so I used 100,000 generated PNGs of CelebA-HQ released by the author.
The quality of the generated image was good enough for training and verifying the preformance of the code.
If the CelebA-HQ dataset is releasted in then near future, I will update the experimental result.
- CAUTION: loading 1024 x 1024 image and resizing every forward process makes training slow. I recommend you to use normal CelebA dataset until the output resolution converges to 256x256.
--------------------------------------------- The training data folder should look like : <train_data_root> |--classA |--image1A |--image2A ... |--classB |--image1B |--image2B ... ---------------------------------------------
[step 2.] Run training
- edit script/opts.lua to change training parameter. (don't forget to change path to training images)
- run and enjoy! (Multi-threaded dataloading is supported.)
$ python run.py
[step 3.] Visualization
- to start display server:
$ th server.lua
- to check images during training procudure:
$ <server_ip>:<port> at your browser
Transition experiment: (having trouble with transition from 8x8 -> 16x16 yet.)
What does the printed log mean?
(example) [E:0][T:91][ 91872/202599] errD(real): 0.2820 | errD(fake): 0.1557 | errG: 0.3838 [Res: 4][Trn(G):0.0%][Trn(D):0.0%][Elp(hr):0.2008]
- E: epoch / T: ticks (1tick = 1000imgs) / errD,errG: loss of discrminator and generator
- Res: current resolution of output
- Trn: transition progress (if 100%, in training phase. if less than 100%, in transition phase using fade-in layer.)
- first Trn : Transition of fade-in layer in generator.
- second Trn : Transition of fade-in layer in discriminator.
- Elp(hr): Elapsed Time (Hour)
To-Do List (will be implemented soon)
- Equalized learning rate (weight normalization)
- Support WGAN-GP loss
- cuda v8.0
- Tesla P40 (you may need more than 12GB Memory. If not, please adjust the batch_table in
- python 2.7 / Torch7