Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resizing an input image in a Keras Lambda layer

Tags:

I would like my keras model to resize the input image using cv2 or similar.

I have seen the use of ImageGenerator, but I would prefer to write my own generator and simply resize the image in the first layer with keras.layers.core.Lambda.

How would I do this?

like image 518
Sam Hammamy Avatar asked Feb 15 '17 21:02

Sam Hammamy


People also ask

How do I resize an image in Python Tensorflow?

This is achieved by using the "tf. image. resize()" function available in the tensorflow. It will resize the images to the size using the specified method.


1 Answers

If you are using tensorflow backend then you can use tf.image.resize_images() function to resize the images in Lambda layer.

Here is a small example to demonstrate the same:

import numpy as np
import scipy.ndimage
import matplotlib.pyplot as plt

from keras.layers import Lambda, Input
from keras.models import Model
from keras.backend import tf as ktf


# 3 channel images of arbitrary shape
inp = Input(shape=(None, None, 3))
try:
    out = Lambda(lambda image: ktf.image.resize_images(image, (128, 128)))(inp)
except :
    # if you have older version of tensorflow
    out = Lambda(lambda image: ktf.image.resize_images(image, 128, 128))(inp)

model = Model(input=inp, output=out)
model.summary()

X = scipy.ndimage.imread('test.jpg')

out = model.predict(X[np.newaxis, ...])

fig, Axes = plt.subplots(nrows=1, ncols=2)
Axes[0].imshow(X)
Axes[1].imshow(np.int8(out[0,...]))

plt.show()
like image 151
indraforyou Avatar answered Oct 15 '22 07:10

indraforyou