Pytorch 中对张量进行上采样并将其转换为 rgb 的最佳方法?

Best way in Pytorch to upsample a Tensor and transform it to rgb?

为了在 Tensorboard 中获得良好的输出,我想在网格中显示一批输入图像、相应的目标蒙版和输出蒙版。 输入图像的大小与蒙版不同。此外,图像显然是 RGB。 来自一批例如32 或 64 我只想显示前 4 张图片。

经过一番折腾,我得出了以下示例代码。好事:它有效。 但我真的不确定我是否遗漏了 Pytorch 中的某些内容。它看起来比我预期的要长得多。特别是对 RGB 的上采样和转换似乎很疯狂。但是我发现的其他转换对整批都不起作用。

import torch
from torch.autograd import Variable
import torch.nn.functional as FN
import torchvision.utils as vutils
from tensorboardX import SummaryWriter
import time
batch = 32
i_size = 192
o_size = 112
nr_imgs = 4

# Tensorboard init
writer = SummaryWriter('runs/' + time.strftime('%Y%m%d_%H%M%S'))

input_image=Variable(torch.rand(batch,3,i_size,i_size))
target_mask=Variable(torch.rand(batch,o_size,o_size))
output_mask=Variable(torch.rand(batch,o_size,o_size))

# upsample target_mask, add dim to have gray2rgb
tm = FN.upsample(target_mask[:nr_imgs,None], size=[i_size, i_size], mode='bilinear')
tm = torch.cat( (tm,tm,tm), dim=1)  # grayscale plane to rgb

# upsample target_mask, add dim to have gray2rgb
om = FN.upsample(output_mask[:nr_imgs,None], size=[i_size, i_size], mode='bilinear')
om = torch.cat( (om,om,om), dim=1)  # grayscale plane to rgb

# add up all images and make grid
imgs = torch.cat( ( input_image[:nr_imgs].data, tm.data, om.data ) )
x = vutils.make_grid(imgs, nrow=nr_imgs, normalize=True, scale_each=True)

# Tensorboard img output
writer.add_image('Image', x, 0)

编辑:在 Pytorchs 问题列表中发现 this。大约 Batch support for Transform。似乎没有计划在未来添加批量转换。所以我目前的代码可能是目前最好的解决方案,无论如何?

也许您可以将张量转换为 numpy 数组 (.data.cpu().numpy() ) 并使用 opencv 进行上采样? OpenCV 实现应该相当快。