或者:在张量流中分散多通道图像的不同相位...
我的问题如下:
我有所有相同尺寸的“图像”,在某种意义上,它们对应于目标图像的不同相位。我想用tf功能重建那张完整的图像。
事实证明,这比我最初预期的要简单得多,并且非常感谢您的帮助!
更详细的说明如下:
在numpy
中,人们可以通过简单的分配轻松地插入图像-
import numpy as np
im = np.random.random((1, 8, 8, 2))
phased_im_01 = im[:, ::2, 1::2, :]
phased_im_00 = im[:, ::2, ::2, :]
phased_im_10 = im[:, 1::2, ::2, :]
phased_im_11 = im[:, 1::2, 1::2, :]
rebuild_im = np.zeros((1, 8, 8, 2))
rebuild_im[:, ::2, ::2, :] = phased_im_00
rebuild_im[:, ::2, 1::2, :] = phased_im_01
rebuild_im[:, 1::2, ::2, :] = phased_im_10
rebuild_im[:, 1::2, 1::2, :] = phased_im_11
print(np.all(rebuild_im == im))
但是,众所周知,分配在tf中是不行的,通常使用tf.concat
和tf.reshape
(对于非常简单的情况)或tf.scatter_nd
(对于更复杂的情况)结合使用案例)。我无法使用我尝试过的许多方法来实现与上述numpy功能相当的功能(例如,将张量置换为首先具有宽度尺寸,尝试scatter_nd,然后置换回,这是我之前成功使用的一种方法)其他问题)或任何SO解决方案(例如堆叠并重塑自己以致死亡)。
请清楚一点,我的实际用例有一个未知的批处理大小,数千个通道以及每个图像维度中的4个阶段。但是我只需要一个适用于上面简单玩具示例的解决方案;泛化在我身上;-)
感谢那里的任何帮助者((对不起,我只能描述我的努力而不能向他们展示。)它们只是一堆不成功的错误,最终演变成可怕的反复试验代码片段,直到最终放弃并来到这里寻求帮助,因此不会造成重大损失)。
可以根据需要添加说明。
答案 0 :(得分:2)
要在TensorFlow中重现numpy示例,请尝试.input:active::placeholder { }
:
depth_to_space
ShlomiF所建议,更一般的示例是:
import tensorflow as tf
im = tf.random_normal((1, 8, 8, 2))
phased_im_01 = im[:, ::2, 1::2, :]
phased_im_00 = im[:, ::2, ::2, :]
phased_im_10 = im[:, 1::2, ::2, :]
phased_im_11 = im[:, 1::2, 1::2, :]
phases = tf.concat(
(phased_im_00, phased_im_01, phased_im_10, phased_im_11), axis=3)
rebuild_im = tf.nn.depth_to_space(phases, block_size=2, data_format='NHWC')
dif = tf.reduce_sum(rebuild_im - im) # 0.0
据我所知,import numpy as np
import tensorflow as tf
tf.enable_eager_execution()
num_of_channels = 20
h = w = 256
num_of_phases = 4
im = np.random.random((1, h, w, num_of_channels))
phase_ims = []
for i in range(num_of_phases):
for j in range(num_of_phases):
phase_ims.append(im[:, i::num_of_phases, j::num_of_phases, :])
all_phases = tf.concat(phase_ims, axis=3)
rebuild_im = tf.depth_to_space(all_phases, block_size=num_of_phases, data_format='NHWC')
diff = tf.reduce_sum(rebuild_im - im)
print(np.asarray(diff)) # --> 0.0
或定期改组的想法来自this paper。您可能在那里找到更多详细信息和可视化。