为什么`tf.image.resize_images`没有设置图像形状?

时间:2016-03-08 09:57:49

标签: tensorflow

我的目标是为数据增加目的引入随机缩放和翻译。

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没有?

1 个答案:

答案 0 :(得分:3)

tf.image.resize_images() op 在实施的this line上设置图像形状。 (这是在TensorFlow 0.7中添加的。)

但是,如果new_heightnew_width参数中的任何一个是动态值,则TensorFlow无法推断该维度的单个形状,因此对该维度使用None。我在代码中注意到新的高度和宽度值被称为random_scale:如果在每个步骤上绘制一个新的随机值,那么形状的高度和宽度尺寸将为None

请注意,在这种情况下,tf.image.crop_to_bounding_box() op将不起作用,因为 - 如错误消息所示 - 当前实现要求完全定义输入的形状。正如我在a recent answer中所指出的,最好的解决方法可能是使用实现tf.image.crop_to_bounding_box()的低级操作(特别是带有计算索引的tf.slice())。