New art project involving GANs and cave paintings
To install package run:
pip install lightweight-gan
You can generate videos using this collab notebook. You first need to add a shortcut to Artifical Prehistory to your google drive.
First download the following folder and copy it in the current directory.
You can then generate videos using this command:
python video.py --num-videos 10 --duration 10
Notes:
- Only a limited number of functionality are supported for now.
- Might only work on GPU for now.
- There might be some bugs.
To train a model use the following command
$ lightweight_gan --data ./path/to/images --image-size 512
Model will be saved to ./models/{name}
every 1000 iterations, and samples from the model saved to ./results/{name}
. name
will be default
, by default.
Pretty self explanatory for deep learning practitioners
$ lightweight_gan \
--data ./path/to/images \
--name {name of run} \
--batch-size 16 \
--gradient-accumulate-every 4 \
--num-train-steps 200000
Augmentation is essential for Lightweight GAN to work effectively in a low data setting
By default, the augmentation types is set to translation and cutout, with color omitted. You can include color as well with the following.
$ lightweight_gan --data ./path/to/images --aug-prob 0.25 --aug-types [translation,cutout,color]
You can turn on automatic mixed precision with one flag --amp
You should expect it to be 33% faster and save up to 40% memory
Also one flag to use --multi-gpus
Once you have finished training, you can generate samples with one command. You can select which checkpoint number to load from. If --load-from
is not specified, will default to the latest.
$ lightweight_gan --name {name of run} --load-from {checkpoint num} --generate
You can also generate interpolations
$ lightweight_gan --name {name of run} --generate-interpolation
The author has kindly let me know that the discriminator output size (5x5 vs 1x1) leads to different results on different datasets. (5x5 works better for art than for faces, as an example). You can toggle this with a single flag
# disc output size is by default 1x1
$ lightweight_gan --data ./path/to/art --image-size 512 --disc-output-size 5
You can add linear + axial attention to specific resolution layers with the following
# make sure there are no spaces between the values within the brackets []
$ lightweight_gan --data ./path/to/images --image-size 512 --attn-res-layers [32,64] --aug-prob 0.25
If you want the current state of the art GAN, you can find it at https://github.com/lucidrains/stylegan2-pytorch
@inproceedings{
anonymous2021towards,
title={Towards Faster and Stabilized {\{}GAN{\}} Training for High-fidelity Few-shot Image Synthesis},
author={Anonymous},
booktitle={Submitted to International Conference on Learning Representations},
year={2021},
url={https://openreview.net/forum?id=1Fqg133qRaI},
note={under review}
}
@inproceedings{
anonymous2021global,
title={Global Self-Attention Networks},
author={Anonymous},
booktitle={Submitted to International Conference on Learning Representations},
year={2021},
url={https://openreview.net/forum?id=KiFeuZu24k},
note={under review}
}
@misc{woo2018cbam,
title={CBAM: Convolutional Block Attention Module},
author={Sanghyun Woo and Jongchan Park and Joon-Young Lee and In So Kweon},
year={2018},
eprint={1807.06521},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
@misc{sinha2020topk,
title={Top-k Training of GANs: Improving GAN Performance by Throwing Away Bad Samples},
author={Samarth Sinha and Zhengli Zhao and Anirudh Goyal and Colin Raffel and Augustus Odena},
year={2020},
eprint={2002.06224},
archivePrefix={arXiv},
primaryClass={stat.ML}
}
What I cannot create, I do not understand - Richard Feynman