/Single-Image-Super-Resolution

Single Image Super-Resolution using Convolutional Neural Networks using BSDS500 dataset:

Primary LanguageJupyter Notebook

Super-Resolution Image Generation using Convolutional Neural Networks

This repository contains code for training a convolutional neural network (CNN) to perform super-resolution image generation using TensorFlow and Keras. Super-resolution is the process of enhancing the resolution of an image, typically from a low-resolution version to a high-resolution version.

Overview

This project aims to demonstrate how to build a CNN model for super-resolution tasks. The model takes low-resolution images as input and generates corresponding high-resolution images. The dataset consists of pairs of low-resolution and high-resolution images.

Dataset

The dataset used in this project contains pairs of low-resolution and high-resolution images. The images are preprocessed and loaded into numpy arrays. It is assumed that the high-resolution images have the same filenames as their corresponding low-resolution counterparts.

Model Architecture

The CNN model architecture consists of several convolutional layers followed by upsampling layers. The architecture is designed to learn the mapping from low-resolution to high-resolution images. The model is compiled with the Adam optimizer and mean squared error loss function.

Training

The dataset is split into training and validation sets. The training process involves iterating over epochs and updating the model parameters to minimize the loss. The training progress is visualized using matplotlib.

Code Structure

  • super_resolution.py: Main Python script containing the model definition, data loading, training, and evaluation.
  • images/: Directory containing low-resolution and high-resolution image datasets.
    • new/: Directory containing low-resolution images.
    • test/: Directory containing corresponding high-resolution images.

Instructions

  1. Ensure you have TensorFlow, Keras, numpy, and scikit-learn installed.
  2. Place your low-resolution and high-resolution images in the appropriate directories (images/new/ for low-res and images/test/ for high-res).
  3. Update the image dimensions, scale factor, and other parameters according to your requirements.
  4. Run the super_resolution.py script to train the model.
  5. Monitor the training progress and evaluate the model's performance.

Results

After training, the model should be capable of generating high-resolution images from low-resolution inputs. Evaluate the model's performance using the validation loss and visually inspect the generated images.

Future Work

This project can be extended in several ways:

  • Experiment with different CNN architectures and hyperparameters.
  • Explore alternative loss functions or regularization techniques.
  • Incorporate additional data augmentation methods.
  • Deploy the trained model for real-world super-resolution applications.

References

Feel free to contribute to and enhance this project further!

For any questions or issues, please contact [Your Name] at [your email address].