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.