【问题标题】:Issue with tensorflow shape with b/w images带有黑白图像的张量流形状问题
【发布时间】:2023-03-26 12:38:01
【问题描述】:

我是 TensorFlow 初学者,所以请多多包涵。 现在我正在尝试为创建超分辨率图像的 CNN 修改现有的 python 程序。如果您有兴趣,可以在这里找到代码:https://github.com/pinae/Superresolution

输入张量的形状为 ,5 为批量大小,240 和 320 为图像大小,3 为通道数 (RGB)。我想为黑白图像修改这个程序,所以只有 1 个通道 ->

首先,我将测试和验证图像转换为黑白:

   image = image.convert('L')

然后图像被写入一个数组,这就是我的问题开始的地方。该数组的大小为 。 5 个图像的数组被写入一个列表并交给 tensorflow。

Tensorflow 需要一个 张量,但图像列表的形状为 ,因此缺少一维。我尝试使用 np.expand_dims 等添加维度,但没有成功。

    input_batches = np.expand_dims(input_batches, axis=-1)

为什么张量流占位符的通道索引似乎从 1 开始,而分辨率的索引从 0 开始?

我敢肯定会有更多的问题,比如调整过滤器,但这是我现在卡住的地方。

【问题讨论】:

  • 没有时间写一个完整的答案并研究这个,但如果你看看 MNIST 的例子,它们是黑白的,应该给你一些指导。

标签: python image image-processing colors tensorflow


【解决方案1】:

如果您有一个形状为 [5,240,320] 的张量,您可以使用这个命令将其重塑为 [5,240,320,1]

correctSizedTensor = tf.reshape( wrongSizedTensor, [5,240,320,1] )

【讨论】:

  • 可以重塑列表吗?
  • 是的,只要将该列表放入 tensorflow 即可。否则明智地使用 numpy 函数,如下所示: myNumpyList.reshape( (5,240,320,1) )
  • 嗯。我曾尝试使用 input_batches = np.expand_dims(input_batches, axis=4) 但它不起作用。 Tensorflow Stills 看到了错误的形状。但是,如果我将轴更改为 3,那么一个维度将出现在第三位(5,240,1,320)。当轴为 4 时,维度不会出现在我想要的第 4 位(5,240,320,1)。 Axis = 1 或 2 也有效,但 4 或 -1 无效。
【解决方案2】:

您需要了解代码。我相信这个问题的根源可能更深。由于信息有限,我假设您使用的是network.py。在那里,我们在第 16 行看到了这一点:

    self.inputs = tf.placeholder(
        tf.float32, [batch_size, dimensions[1], dimensions[0], 3], name='input_images'
    )

深度维度已经硬编码为3。除了可能的许多其他内容之外,您还必须对其进行编辑。

需要注意的是,大多数超分辨率 CNN 都使用小块尺寸。绝对不是(240, 320),我怀疑由于batch size很小,所以很难收敛。

【讨论】:

  • 我已经将其更改为维度 = 1。我确信我必须在以后做出很多改变,但首先我需要解决这个问题。
  • 如果您能发布更多信息就更好了。我不知道input_batches 被喂到哪里了。
  • input_batches 只是图像数组的列表。这被输入到张量 self.inputs (以及其他张量)。张量的形状为 5,240,320,1,但我的列表的形状为 5,240,320。我已经尝试过 expand_dims 但这不起作用。
  • np.expand_dims 不起作用很奇怪。我很确定错误出在其他地方。你也检查过target_batches的形状吗?
  • 它确实有效。我的问题是别的。我目前正在训练一组黑白图像,感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 2016-12-12
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
相关资源
最近更新 更多