我正在尝试将掩码(二进制,仅一个通道)应用于 RGB 图像(3 个通道,标准化为 [0, 1])。我当前的解决方案是,我将 RGB 图像分割成它的通道,将其与蒙版相乘,然后再次连接这些通道:
with tf.variable_scope('apply_mask') as scope:
# Output mask is in range [-1, 1], bring to range [0, 1] first
zero_one_mask = (output_mask + 1) / 2
# Apply mask to all channels.
channels = tf.split(3, 3, output_img)
channels = [tf.mul(c, zero_one_mask) for c in channels]
output_img = tf.concat(3, channels)
然而,这似乎效率很低,特别是因为据我了解,这些计算都不是就地完成的。有没有更有效的方法来做到这一点?
The tf.mul()运营商支持numpy 风格的广播,这将允许您稍微简化和优化代码。
这么说吧zero_one_mask
is an m x n
张量,和output_img
is a b x m x n x 3
(where b
是批量大小 - 我从你分割的事实推断出这一点output_img
在维度 3)* 上。您可以使用tf.expand_dims()使zero_one_mask
可广播到channels
,通过将其重塑为m x n x 1
tensor:
with tf.variable_scope('apply_mask') as scope:
# Output mask is in range [-1, 1], bring to range [0, 1] first
# NOTE: Assumes `output_mask` is a 2-D `m x n` tensor.
zero_one_mask = tf.expand_dims((output_mask + 1) / 2, 2)
# Apply mask to all channels.
# NOTE: Assumes `output_img` is a 4-D `b x m x n x c` tensor.
output_img = tf.mul(output_img, zero_one_mask)
(* 如果output_img
是一个 4-Db x m x n x c
(对于任意数量的通道c
) 或 3-Dm x n x c
张量,由于广播的工作方式。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)