Low resolution images suck. Sometimes, you just want to be able to enhance. When I read that this CSI-like resolution enhancing was actually possible through deep learning, I had to give it a try with Tensorflow.

What it does

Enhance takes low-resolution images as input and upscales them with deep learning, making features more distinguishable and increasing image resolution.

How I built it

Enhance is a Super Resolution Generative Adversarial Network (SRGAN) trained on the DIV2K Dataset as used for CVPR 2017 and CVPR 2018 and built from the ground up in Keras. I did preprocessing through basic libraries like NumPy and Matplotlib and used a VGG model for content loss. The modeling methods I implemented were inspired by the research publication Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network.

Challenges I ran into

I really felt my hardware and network limitations during this project. Just downloading and processing the training data took up a good chunk of my time, and that's not even accounting for the actual model training. I planned on creating a mobile application for my model through TF Lite, but that looks like a project for another day.

Accomplishments that I'm proud of

I got my model fully working and with pretty good results. I was happy to see that some cat photos iCloud compressed to death were able to regain much of their life.

What I learned

I learned a ton about Generative Adversarial Networks and unsupervised learning techniques. I also learned the importance of an ethernet cable and properly cooling my laptop.

What's next for Enhance

I want to create a TF Lite native implementation and TF.js web implementation of my model so that it can be used in actual edge devices rather than just my Python command line.

Built With

  • tensorflow
+ 2 more
Share this project: