It took me a while to figure out the most optimal way to do this, so I thought I would share it.
I was originally using tf.stack() to create a tensor from a python list of numpy images. This operation was taking 3.37 seconds to stack a list of 40 images of 256x256x3 of type uint8.
Then I found tf.convert_to_tensor() and this reduced the operation down to 7 milliseconds.
for image_file in images_list:
img = cv2.imread(image_file)
height,width= img.shape[:2]
# my model design is based on creating 256x256 patches from larger images
patches = patch_processor.extract_patches(img)
tensor_list=[]
for patch in patches:
# convert 8 bit RGB image to floating point 0,1
np_image_data = np.asarray(patch,dtype=np.float32)
np_image_data = np_image_data / 127.5 - 1
rgb_tensor = tf.convert_to_tensor(np_image_data, dtype=tf.float32)
tensor_list.append(np.expand_dims(rgb_tensor, axis=0))
# make one multi-demisional tensor that contains all the tensor patches for batch prediction
## this was taking 3.37 seconds for 36 images of 256x256
#patches_tensor = tf.stack(tensor_list)
# convert python list to np array of image patches
patches_tensor = np.array(tensor_list)
# create a tensorflow dataset from the array of image patches
dataset1 = tf.data.Dataset.from_tensor_slices(patches_tensor)
# predict the patches
predictions = model.predict( dataset1)