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?
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.
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With