【问题标题】:Return from top_k function to image从 top_k 函数返回到图像
【发布时间】:2018-12-04 06:30:15
【问题描述】:

enter image description here我解决了我的问题,但我仍然对许多功能感到不知所措。我正在寻找使用 tf.top_k 并返回到第一张图片。熟悉 tensorflow 的人可以帮我解决这个问题吗?

详细问题:图像(4 x 4)作为张量 --> tf.top_k --> 4 个值(2 x 2)和 4 个索引(2 x 2) --> sn-p --> 图像(4, 4) 作为张量

例如假设我们有一张图片

image = np.array([[1, 2, 3, 4],
                  [7, 8, 9, 10],
                  [19, 20, 21, 22],
                  [25, 26, 27, 28]])

x = tf.placeholder(tf.float32, [None, img_height, img_width, 1], name='x')
patches = tf.extract_image_patches(x, [1, 2, 2, 1], [1, 2, 2, 1], [1, 1, 1, 1], "SAME")
ktop, indices = tf.nn.top_k(patches, k=4, sorted=True, name=None) 

现在我希望提供 ktop 和索引以像第一个状态一样再次获取图像

image = np.array([[1, 2, 3, 4],
                  [7, 8, 9, 10],
                  [19, 20, 21, 22],
                  [25, 26, 27, 28]])

我尝试了很多东西,例如 tf.one_hot、tf.gatter 等,但我无法获得 (4, 4) 图像。我应该在输入和输出中有一个张量,似乎我不能使用 numpy 或 for 循环。我之前问过类似的问题,但我在这里再次提出更清晰的解释。 请有人帮忙解决这个问题。对别人来说应该很容易,但对我来说很难。

这个 sn-p 给了我第一张图片,但不是 (1, 4, 4, 1) 而是它给了 (2, 2, 2, 2) 或其他形状。

z1 = tf.assign(z1, tf.reshape(tf.gather(ktop[0, 0, 0, :], [indices[0, 0, 0, :]]), [2, 2]))
z2 = tf.assign(z2, tf.reshape(tf.gather(ktop[0, 0, 1, :], [indices[0, 0, 1, :]]), [2, 2]))
z3 = tf.assign(z3, tf.reshape(tf.gather(ktop[0, 1, 0, :], [indices[0, 1, 0, :]]), [2, 2]))
z4 = tf.assign(z4, tf.reshape(tf.gather(ktop[0, 1, 1, :], [indices[0, 1, 1, :]]), [2, 2]))

z = tf.concat([[z1, z2], [z3, z4]], 0)

【问题讨论】:

  • 我不确定我是否理解您的问题,您希望如何从 2x2x4 变为 4x4x1 ? snippet 是什么?
  • 感谢您的回答。如果你运行我的 sn-p,它会给出一个 (1, 4, 4, 1) 图像作为 x。然后它提供来自 top_k 的 8 个张量:四个值(1、2、2、4)和四个索引(1、2、2、4)。现在,我想回到图像 (1, 4, 4, 1)。是我的问题吗?我脑海中的一种可能的解决方案是使用相应的索引对每个 value[0, :, :, 0], value[0, :, :, 1], ... 值进行上采样并获得 (1, 4, 4 , 1) 每个都包含值和零之间。然后将它们组合起来以达到第一张图像。我不知道该怎么做?

标签: numpy tensorflow image-processing keras deep-learning


【解决方案1】:

终于找到了 TENSORFLOW 追随者至今没有重播的答案。为了从 top_k 返回图像,我们应该使用 depth_to_space 函数:

output_image = tf.depth_to_space( 输出图像, 2、 名称=无, data_format='NHWC' )

【讨论】:

    【解决方案2】:

    在没有明确说明您希望如何从 2x2x4 张量变为 4x4x1 的情况下,我只能建议:

    img_out = tf.reshape(ktop, [-1, 4, 4, 1])
    

    【讨论】:

    • 我添加了我的 sn-p 以供退货。如果是 MATLAB,我可以添加 for 循环,一切都可以轻松解决,但使用 Tensorflow 就很难了。您的 sn-p 将改变 top_k 的形状,但不使用索引。
    • 我在我的问题中添加了一张图片,您可以点击链接查看。在那张图片中,我用一个例子详细解释了我的问题。请你看一下那个和任何sn-p的建议吗?
    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2019-04-16
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多