Using ISR with Docker
Setup
-
Install Docker
-
Clone our repository and cd into it:
git clone https://github.com/idealo/image-super-resolution
cd image-super-resolution
- Build docker image for local usage
docker build -t isr . -f Dockerfile.cpu
In order to train remotely on AWS EC2 with GPU
-
Install Docker Machine
-
Install AWS Command Line Interface
-
Set up an EC2 instance for training with GPU support. You can follow our nvidia-docker-keras project to get started
Prediction
Place your images (png, jpg) under data/input/<data name>, the results will be saved under /data/output/<data name>/<model>/<training setting>.
NOTE: make sure that your images only have 3 layers (the png format allows for 4).
Check the configuration file config.yml for more information on parameters and default folders.
The -d flag in the run command will tell the program to load the weights specified in config.yml. It is possible though to iteratively select any option from the command line.
Predict locally
Download the pre-trained weights as described here.
Update your config.yml according to the model you want to use. For example rrdn
# config.yml
default:
generator: rrdn # Use rrdn
...
weights_paths: # Point to the rrdn weights file
discriminator:
generator: ./weights/rrdn-C4-D3-G32-G032-T10-x4_epoch299.hdf5
From the main folder run
docker run -v $(pwd)/data/:/home/isr/data -v $(pwd)/weights/:/home/isr/weights -v $(pwd)/config.yml:/home/isr/config.yml -it isr -p -d -c config.yml
Predict on AWS with nvidia-docker
From the remote machine run (using our DockerHub image)
sudo nvidia-docker run -v $(pwd)/isr/data/:/home/isr/data -v $(pwd)/isr/weights/:/home/isr/weights -v $(pwd)/isr/config.yml:/home/isr/config.yml -it idealo/image-super-resolution-gpu -p -d -c config.yml
Training
Train either locally with (or without) Docker, or on the cloud with nvidia-docker and AWS.
Add you training set, including training and validation Low Res and High Res folders, under training_sets in config.yml.
Train on AWS with GPU support using nvidia-docker
To train with the default settings set in config.yml follow these steps:
1. From the main folder run bash scripts/setup.sh -m <name-of-ec2-instance> -b -i -u -d <data_name>.
2. ssh into the machine docker-machine ssh <name-of-ec2-instance>
3. Run training with sudo nvidia-docker run -v $(pwd)/isr/data/:/home/isr/data -v $(pwd)/isr/logs/:/home/isr/logs -v $(pwd)/isr/weights/:/home/isr/weights -v $(pwd)/isr/config.yml:/home/isr/config.yml -it isr -t -d -c config.yml
<data_name> is the name of the folder containing your dataset. It must be under ./data/<data_name>.
Tensorboard
The log folder is mounted on the docker image. Open another EC2 terminal and run
tensorboard --logdir /home/ubuntu/isr/logs
and locally
docker-machine ssh <name-of-ec2-instance> -N -L 6006:localhost:6006
Notes
A few helpful details
- DO NOT include a Tensorflow version in requirements.txt as it would interfere with the version installed in the Tensorflow docker image
- DO NOT use Ubuntu Server 18.04 LTS AMI. Use the Ubuntu Server 16.04 LTS AMI instead
Train locally
Train locally with docker
From the main project folder run
docker run -v $(pwd)/data/:/home/isr/data -v $(pwd)/logs/:/home/isr/logs -v $(pwd)/weights/:/home/isr/weights -v $(pwd)/isr/config.yml:/home/isr/config.yml -it isr -t -d -c config.yml