当前位置:  开发笔记 > 开发工具 > 正文

在张量流中将3通道掩模应用于3通道Tensor

如何解决《在张量流中将3通道掩模应用于3通道Tensor》经验,为你挑选了1个好方法。

我正在尝试将一个掩码(二进制,只有一个通道)应用于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)

然而,这似乎效率很低,特别是因为根据我的理解,这些计算都不是就地完成的.有没有更有效的方法来做到这一点?



1> mrry..:

tf.mul()运营商支持numpy的风格的广播,这样可以让你简化和轻微优化代码.

让我们说这zero_one_mask是一个m x n张量,并且output_img是一个b x m x n x 3(b批量大小 - 我从你output_img在维度3上拆分的事实推断这个)*.您可以通过将其重塑为张量tf.expand_dims()来使zero_one_mask广播channels成为m x n x 1:

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-D b x m x n x c(任意数量的频道c)或3-D m x n x c张量,这将同样有效.)


我相信不是-确实`tf.mul`等的文档字符串有一些不足之处。我为此创建了一个[GitHub问题](https://github.com/tensorflow/tensorflow/issues/508),并且应该在下一发行版中及时修复它。
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有