We wanted to learn a new concept. While brainstorming, Alireza in our team suggested GANs. Seeing that no one had prior experience with them and the results online looked very interesting, we went for it.
What it does
The title speaks for itself. It is a Generative Adversarial Network(GAN) that generates anime character faces. After training on a dataset of anime characters, the model generates a whole new image from the random noise that is fed into it.
How I built it
At first, we trained our own GANs on MNIST, some Kaggle Abstract Art datasets and the Kaggle Anime Face Dataset. However, due to the extreme training times for decent models, we had to resort to pretrained models. We then scoured through various GitHub repositories, only to find models that either didn't work due to fastai 0.7 dependencies (deprecated), buggy TensorFlow implementations, and poor pretrained models. In the end, we reverse-engineered Tetraio's StyleGAN-PyTorch repo to make it compatible with our pre-trained AnimeGAN model.
Challenges I ran into
Immense training times for even the basic of GANs. Library deprecations and incompatible code. Buggy repositories with poor reproducibility. Time zone issues.
Accomplishments that I'm proud of
We were successfully able to reverse engineer a repository to make it work for us. The anime faces are indistinguishable from actual drawings.
What I learned
We learned a lot about GANs and how to create our own ones.
What's next for WaifuGAN
Training it for a week on real faces in an Azure ML Virtual Machine with 4 K-80s so that instead we can generate anime pictures from real faces instead of only using random noise.