Most image classifiers like Inception-v3 accept images of about size 299 x 299 x 3 as input. In this particular case, I cannot resize the image and lose resolution. Is there an easy solution of dealing with this rather than retraining the model? (Particularly in tensorflow)
2 Answers
My guess:
If you add a few CNN layers before the input of the given model and train only those layers while keeping the given model's parameters frozen, you might get better result.
Essentially these few extra layers would "transform" your input image into the appropriate shape, but with more accuracy since its trained and not hard coded.
My suggestion is to transfom the resolution of all images equal proportion. You can use this python code:
from PIL import Image
import os
import argparse
def rescale_images(directory, size):
for img in os.listdir(directory):
im = Image.open(directory + img)
im_resized = im.resize(size, Image.ANTIALIAS)
im_resized.save(directory + img)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Rescale images")
parser.add_argument('-d', '--directory', type=str, required=True, help='Directory containing the images')
parser.add_argument('-s', '--size', type=int, nargs=2, required=True, metavar=('width', 'height'),
help='Image size')
args = parser.parse_args()
rescale_images(args.directory, args.size)
# save this python code as transform_image_resoluthion.py
# run this with cmd with the below command
# python transform_image_resolution.py -d images/ -s 800 600