GAN tutorial

Justin Chang (justin.h.chang@sjsu.edu)

While I may use multiple methods for image denoising and classification of the noise residuals, this project was taken with the assumption of generative adversarial networks (GANs) being the frontrunning model for tackling camera model identification and spoofing. Since the final goal of this project was to spoof camera sensor noise from one camera model to the other to fool a classification network, this seemed very similar to the GANs architecture. The GAN model architecture can be divided into two different submodels: the generator and the discriminator. These two models seem very useful for modeling the experiments I had in mind. The generator is the model that would create images with fake noise prints from non-original camera models. For this project, I would need to have a conditional GAN (cGAN), as I would like to specify input parameters than make the output a little more deterministic. Specifically, the model would allow parameters to specify the type of camera model you would like to spoof. The discriminator submodel will classify the input into as real or fake. The classification part of GANs will be used to test out the quality of the noiseprint spoofs.

I would like to apply the concept of transfer learning to speed up the process of training the GAN, because training deep networks from scratch is very computationally expensive. Taking a popular image classification network like VGG. Several layers deep into VGG there are layers that are considered embedding layers. These layers will be the base for our generative network to insert the conditions that we specify to the generator. The rest of the layers will process and upscale the vectors to output a image that is designed to feed into the discriminator and remain undetected as a fake. The discriminator network will also have to be designed in a way that corresponds to the input in the generator. Since the discriminator can only do binary classification of fake or real. We can only feed in images from the camera model that the generator is trying to spoof. Only after this is achieved, the discriminator will give a proper assessment of how the GAN is performing. The specifics of what type of networks how the hyperparameters of the discriminator and generator are still being decided.

I was able to implement a GAN based off a tutorial from tensorflow. The code currently runs off of google colab since, but I plan to have all code running locally for CS 298. The Modified National Institute of Standards and Technology (MNIST) database of handwritten digits were fed in to the GAN. The tutorial displayed intermediate steps to demonstrate how the output of the generator improves over multiple cycles of training.

Figure 4: Example of images outputted by the generator after many cycles

gif of training arc