我想在输入管道中随机翻转几个不同大小的输入图像。
翻转需要针对不同的图像保持一致-要么全部翻转,要么全部不翻转。
由于使用tf.image.random_flip_left_right()
不足以解决此问题,因此我改为这样做:
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')
这是tf.Dataset.map()
与我的输入数据集对象一起调用的函数的一部分。
但是我从flip_left_right
行中收到此错误:
ValueError:两个形状的尺寸1必须相等,但分别为3和1。 形状为[240,320,3]和[240,320,1]。
将形状0与其他形状合并。用于输入形状为[240,320,3],[240,320,1]的“ flip_left_right / image”(操作:“ Pack”)。
我认为这是因为我的图像大小不同(240x320,1或3通道),但我不明白为什么这很重要。
如何解决此错误?或者,是否有更好的方法来获取我想要的内容,从而避免出现此错误?
我正在使用TensorFlow-1.8(但可以根据需要进行升级)。
答案 0 :(得分:2)
就这样吗?
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)