I want to randomly flip several input images of different sizes in my input pipeline. The flip needs to be consistent for the different images - either all are flipped or none. Since using tf.image.random_flip_left_right() is inadequate for this, I did this instead:

images = [img1, img2] def fliplr(*args): return [tf.image.flip_left_right(t) for t in args] def id(*args): return args img1, img2 = tf.cond(tf.random_uniform([1]) > 0.5, fliplr(images), id(images), name='fliplr') 

This is part of a function called by tf.Dataset.map() with my input dataset object.

However I am getting this error from the flip_left_right line:

ValueError: Dimension 1 in both shapes must be equal, but are 3 and 1. Shapes are [240,320,3] and [240,320,1].

From merging shape 0 with other shapes. for 'flip_left_right/image' (op: 'Pack') with input shapes: [240,320,3], [240,320,1].

I think this is because my images are of different sizes (240x320, either 1 or 3 channels) but I don't understand why this would matter.

How can I resolve this error? Alternatively, is there a better way to get what I want that avoids this error?

I am using TensorFlow-1.8 (but can upgrade if required).

3

1 Answer

Just like this?

do_flip = tf.random_uniform([]) > 0.5 img1 = tf.cond(do_flip, lambda: tf.image.flip_left_right(img1), lambda: img1) img2 = tf.cond(do_flip, lambda: tf.image.flip_left_right(img2), lambda: img2) 
0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.