【问题标题】:How to randomly crop a batch of images如何随机裁剪一批图像
【发布时间】:2019-02-12 21:02:21
【问题描述】:

我有一批 5 张图片,我想将它们随机裁剪为 w_、h_ 大小

例子:

import tensorflow as tf
images=tf.reshape(tf.range(100*100*3*5), [100, 100, 3, 5])    
batch_crop = tf.random_crop(images, size=(20, 20))
with tf.Session() as sess:
     batch = sess.run([batch_crop])

我得到错误: ValueError: Shape must be rank 4 but is rank 3 for 'concat' (op: 'ConcatV2') with input shapes:

【问题讨论】:

  • 你运行的是什么版本的 tensorflow?在1.12.0 中复制粘贴该代码给了我TypeError: 'module' object is not callable 的错误。另外,在您的版本中,tf.random 是做什么的?您可以链接文档吗?我不明白那是如何实现收成的?
  • @IanQuah,抱歉是tf.random_crop,我使用的是 1.9.0 版本
  • 我无法重现您的示例。我在batch_crop = tf.random_crop(images, size=(20, 20)) 线上收到tensorflow.python.framework.errors_impl.InvalidArgumentError: Dimensions must be equal, but are 4 and 2 for 'random_crop/GreaterEqual' (op: 'GreaterEqual') with input shapes: [4], [2] 的错误。您从粘贴的示例中得到的错误是什么?这就是我要尝试解决的问题
  • 等等,你想做什么?那么给定 5 张形状为 (100, 100, 3) 的图像,您想从中裁剪出 (20,20) 吗?所以生成的形状将是(20, 20, 3, 5)?
  • @IanQuah,没错

标签: python numpy tensorflow


【解决方案1】:

*注意大小末尾的额外(3, 5)。这有效地告诉 tensorflow 不应该沿着第三和第四轴裁剪它

import tensorflow as tf
images=tf.reshape(tf.range(100*100*3*5), [100, 100, 3, 5])    
batch_crop = tf.random_crop(images, size=(20, 20, 3, 5))
with tf.Session() as sess:
     batch = sess.run([batch_crop])

应该做的工作。从docsrandom_crop返回

与值和形状大小具有相同等级的裁剪张量。

您需要特别注意的部分可能是:

如果不应裁剪某个尺寸,请传递该尺寸的完整尺寸。例如,可以使用 size = [crop_height,crop_width, 3] 裁剪 RGB​​ 图像。

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 2014-12-09
    • 1970-01-01
    • 2016-12-27
    • 2012-11-16
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多