【发布时间】:2021-11-24 10:13:39
【问题描述】:
我正在尝试将蒙版应用于图像。我有我的图像形状 [360, 480, 3] 和形状为 [360, 480, 1] 的蒙版。如何在 Pytorch 中创建与我的图像相同形状的蒙版?此外,在这种情况下,绿色和蓝色通道是否会将零作为元素或与红色通道中的值相同?谢谢
【问题讨论】:
标签: python image-processing pytorch conv-neural-network image-segmentation
我正在尝试将蒙版应用于图像。我有我的图像形状 [360, 480, 3] 和形状为 [360, 480, 1] 的蒙版。如何在 Pytorch 中创建与我的图像相同形状的蒙版?此外,在这种情况下,绿色和蓝色通道是否会将零作为元素或与红色通道中的值相同?谢谢
【问题讨论】:
标签: python image-processing pytorch conv-neural-network image-segmentation
从逻辑上讲,您应该为绿色和蓝色通道复制红色蒙版。 PyTorch 提供了简单的方法
# repeat the last dimension thrice
mask_three_channel = mask.repeat(1, 1, 3)
然后将X(形状为 [360, 480, 3])的图像蒙版为
X_masked = X * mask_three_channel
【讨论】:
广播掩码时应使用torch.expand,而不是torch.repeat,以避免复制不必要的数据。事实上torch.expand 会返回一个视图,而不是一个副本。
但是在这种情况下不需要扩展掩码,因为广播是由操作员完成的:
>>> rgb = torch.rand(360, 480, 3)
>>> mask = torch.randint(0, 2, (360, 480, 1))
>>> rgb_masked = rgb*mask
>>> rgb_masked.shape
(360, 480, 3)
生成的张量包含[0,0,0] 的像素位置等于mask 中的0。
【讨论】: