Counting 1,690 Big Data & Machine Learning Frameworks, Toolsets, and Examples...
Suggestion? Feedback? Tweet @stkim1



This repository is a "toy" project so I can gain experience building deep neural networks. My first goal is learning to generate pictures of cats with Generative Adversarial Networks (^._.^).

Objectives (so far)

  • Generate images of cats using various types of Generative Adversarial Networks (GAN)
    • use DCGAN (Done)
    • use WGAN (Done)
    • use WGAN-GP (Done)
    • use LSGAN (Done)
    • use BEGAN
  • Transform real cats into art pieces using CycleGAN
  • Various/Others
    • Preprocess cat images so we get aligned cat faces for much better GAN convergence (Done)
    • Separate cats by size to be better able to generate cats of certain sizes (Done)
    • Fix DCGAN models so that they can adapt to different input image sizes (Done)
    • Keeping log for TensorBoard (Done)
    • Automatic folder setup (Done)
    • Add multi-gpu and non-CUDA option (Done)
    • Option to load previous models (Done)
    • Add log to output (Done)
    • Dropouts in G
    • L2 Regularization (Done)
    • Try making higher resolutions pictures
      • 128 x 128 (Done)
      • 256 x 256
    • Try Self-Normalizing Neural Networks (SELU) as per (Done)
    • Try adding Frechet Inception Distance (FID) as per
    • Try soft and noisy labels as per
    • Try adding decaying noise to input as per
    • Add option to generate more cat pictures
    • Add option to see the 5 nearest real cats images and thus be able to tell if the generated cats are really unique


To run

$ # Download dataset and preprocess cat pictures 
$ # Create two folders, one for cats bigger than 64x64 and one for cats bigger than 128x128
$ sh
$ # Move to your favorite place
$ mv cats_bigger_than_64x64 "your_input_folder_64x64"
$ mv cats_bigger_than_128x128 "your_input_folder_128x128"
$ # Generate 64x64 cats using DCGAN
$ python --input_folder "your_input_folder_64x64" --output_folder "your_output_folder"
$ # Generate 128x128 cats using DCGAN
$ python --input_folder="your_input_folder_128x128" --image_size 128 --G_h_size 64 --D_h_size 64 --SELU True
$ # Generate 64x64 cats using WGAN
$ python --input_folder "your_input_folder_64x64" --output_folder "your_output_folder"
$ # Generate 64x64 cats using WGAN-GP
$ python --input_folder "your_input_folder_64x64" --output_folder "your_output_folder" --SELU True
$ # Generate 64x64 cats using LSGAN (Least Squares GAN)
$ python --input_folder "your_input_folder_64x64" --output_folder "your_output_folder"

To see TensorBoard plots of the losses

$ tensorboard --logdir "your_input_folder"


Discussion of the results at

DCGAN 64x64

DCGAN 128x128 with SELU

WGAN 64x64

WGAN-GP 64x64 with SELU