我使用tensorflow和完全卷积网络对图像进行回归。 我想通过随机翻转/旋转来增加数据,但是如何同时应用它们来输入和输出图像张量呢?
答案 0 :(得分:2)
你是对的,只有在没有协变量的情况下才能使用像tf.random_flip_left_right
这样的函数。如果有,例如,如果您的输出是标签图像,那么您需要对所有输出应用相同的随机操作。
我认为有两种方法可以做到:
您基本上会重写随机操作以使用多个张量。例如,要替换tf.random_flip_left_right
,您可以使用
coin = tf.less(tf.random_uniform((), 0., 1.), 0.5)
im1 = tf.cond(coin, lambda: tf.flip_left_right(im1), lambda: im1)
im2 = tf.cond(coin, lambda: tf.flip_left_right(im2), lambda: im2)
...
您可以在随机操作之前将所有张量堆叠在一起:
all_im = tf.stack([im1, im2,...], axis=2)
all_im = tf.random_flip_left_right(all_im)
[im1, im2, ...] = tf.split(all_im, [im1.shape[2], im2.shape[2], ...], axis=2)
仅当所有张量具有相同的空间范围时,此第二种解决方案才有效。