Autoencoder Image Denoising

Who

Peter Curtin (pcurtin1), Luke Hammer (lhammer), Daniel Healey (dhealey5)

Introduction

For our final project, we decided to focus on the problem of image denoising.

An image denoiser is a type of software or algorithm that is designed to reduce or eliminate the noise present in digital images. Digital images can be corrupted with noise due to various factors such as lighting conditions or camera settings. This noise can result in reduced image quality, making it difficult to interpret or use the image for further analysis.

We focused on the problem of image denoising for natural images, experimenting with using a convolutional autoencoder and a GAN.

Methodology

To train and test our model, we used an online dataset of natural images. This dataset was hosted on Kaggle.

We split the dataset into mutually exclusive training and validation partitions. The model was trained on 80% of the images and was validated on the remaining 20%. When training and testing, Gaussian noise was added to the images and the denoised image was compared to the original image.

For our denoiser, we experimented with two separate models: a generative adversarial network (GAN) and an convolutional autoencoder-based (CAE) model.

Our CAE-based model consisted of six convolutional layers in the encoder, and six transposed convolutional layers in the decoder. Interleaved between these layers were batch normalization layers to make training faster and more stable as well as max-pooling layers to add slight rotational, scale, and shift invariance. The model also employed residual connections between layers of the encoder and decoder. This allowed the model to pick up on more details in the original image.

Although we experimented with a GAN for image denoising, our CAE-based model outperformed it. This was possibly due to the higher number of convolutional layers, resulting in more trainable parameters and longer training time.

Results

Our autoencoder achieved impressive results on our dataset. It was able to accurately reconstruct denoised images when provided with noisy images.

Above are examples of the output of our denoiser. The leftmost image is the original image, the next image is the noisy image (the original with Gaussian random noise added), and the rightmost image is the denoised output image from out CAE-based model.

The above CAE-based model was trained for a total of 8 epochs on our natural image training dataset.

Challenges

The primary challenge was determining the correct architecture for our model. Our initial model was a very basic CAE model with only a few convolutional layers and no residual layers. However, by increasing our model's complexity and adding residual layers, we were able to significantly improve our model's preformance.

Another challenge we faced was with the GAN. We were hoping that the GAN would preform well, however it did not meet our expectations. Because of this, we were forced to focus on the CAE-based model.

Reflection

Work for this project was delegated equally between group members.

We are happy with the way that our project worked out, we were able to meet exceed our target goals and applied our model to a large dataset of general images. We did not expect the overwhelmingly positive results of our project.

Our approach changed over time in a couple of ways. Originally, our CAE model was very simple and did not use residual layers. We increased the complexity of our model to increase preformance. We also experimented with a GAN, however, this ended up being a dead end. The GAN did not achieve the preformance that we expected. If we were to do the project over again, we would probably not spend time experimenting with a GAN and focus all our time on improving our CAE model.

Future work on this project could include applying our models on different, more specialized datasets or applying other models to this problem.

Our biggest takeaway from this project was working with CAEs and GANs. We also gained experience with data preprocessing and training large image models. This project was also a useful way for us to improve our technical writing and presentation skills for the future.

Built With

Share this project:

Updates

posted an update

Checkpoint 3 Reflection (overwritten when writing the final):

By checkpoint 3, we had written most of the code for the project. We had experimented with both a GAN and an autoencoder-based model and had found that the autencoder model worked significantly better than the GAN model. We had improved the effectiveness of our model by adding residual layers between the encoder and decoder of our model. We were not absolutely certain why this improved our model, but we had added them thinking that they would pass more information about details in our image to the decoder, resulting in a more robust reconstruction.

We had the outline for the poster created, and had populated it with an introduction, information about our dataset/problem, and some of the methods section. We had some intermediate results, but did not include them in the poster at that time.

We had delegated the work relatively evenly up to that point, and continued delegating the work evenly for the rest of the duration of the project.

Log in or sign up for Devpost to join the conversation.