Introduction

I wanted to print out an image for a friend, and I wanted to first crop the image to only include a relatively small part of the photo (namely, the individuals in the photo. The original photo was 90% scenary). However, after the cropping, the image became too small and would have been pixelated when printed. I thought that a neural network ought to be able to solve this problem, because it could be trained on a manually created dataset (just take a bunch of images and use these as the outputs, then reduce the quality of these images to create the inputs). I decided to Google around to see what already had been done, and I found out about SRGANs. At my current level of knowledge, I cannot understand the details of the architecture, so for now, my aim was just to see if I could use a pre-trained network to achieve my goal. After a bit more searching, I found this Github repo.

Steps taken

Results

Below are samples of the images, comparing before and after applying the neural network.

Example 1

image

Example 2

image

Example 3

image

This is amazing! This feels like magic to me.

Limits

I tried applying this to blurry images, expecting it to make the images less blurry. This did not happen:

image

This reveals how limited my understanding is! After thinking and googling a bit, I think the issue is that resolution and blurriness/sharpness are two separate issues. Previously, I just lumped them together as ‘reasons an image can look bad’. After a bit more searching, it seems I might learn about anti-blurring / sharpening in the FastAI course that I am doing, so that is something to look forward to.

Finally, I hope I will soon be at at stage where I can understand these intricate architectures, and be able to train my own cutting edge neural networks.