我的目标是为数据增加目的引入随机缩放和翻译。
distorted_image = tf.image.resize_images(distorted_image, random_scale, random_scale)
distorted_image = tf.image.crop_to_bounding_box(distorted_image, random_y, random_x, 299, 299)
这失败了'image' must be fully defined.
交换线路有效,但没有做我真正需要的。
distorted_image = tf.image.crop_to_bounding_box(distorted_image, random_y, random_x, 299, 299)
distorted_image = tf.image.resize_images(distorted_image, random_scale, random_scale)
所以似乎resize_images失去了图像张量的形状,然后crop_to_bouding_box
失败了。这是故意的吗,我错过了什么吗?调整大小后random_crop
如何运作,但crop_to_bounding_box
没有?
答案 0 :(得分:3)
tf.image.resize_images()
op 在实施的this line上设置图像形状。 (这是在TensorFlow 0.7中添加的。)
但是,如果new_height
或new_width
参数中的任何一个是动态值,则TensorFlow无法推断该维度的单个形状,因此对该维度使用None
。我在代码中注意到新的高度和宽度值被称为random_scale
:如果在每个步骤上绘制一个新的随机值,那么形状的高度和宽度尺寸将为None
。
请注意,在这种情况下,tf.image.crop_to_bounding_box()
op将不起作用,因为 - 如错误消息所示 - 当前实现要求完全定义输入的形状。正如我在a recent answer中所指出的,最好的解决方法可能是使用实现tf.image.crop_to_bounding_box()
的低级操作(特别是带有计算索引的tf.slice()
)。