【问题标题】:How to correctly turn a numpy array into an image using residuals?如何使用残差正确地将 numpy 数组转换为图像?
【发布时间】:2020-06-12 07:34:37
【问题描述】:

我正在使用 GAN 解决 4 倍缩放的单图像超分辨率 (SISR) 问题。我正在使用残差学习技术,所以我从经过训练的网络得到的是一个张量,其中包含放大后的输入图像和目标图像之间的估计残差图像。我向网络提供代表图像的标准化 numpy 数组 (np.asarray(image) / 255)。

为了得到最终的估计图像,我必须将放大后的输入图像与残差图像相加。这是我使用的代码(输入图像的大小为64x64,而输出的大小为256x256):

net.eval()
img = Image.open(image_folder + 'lr/' + image_name)
tens = transforms.ToTensor()
toimg = transforms.ToPILImage()

input = tens(img)
bicub_res = tens(img.resize((img.size[0] * 4, img.size[1] * 4), Image.BICUBIC))

input = input.view((1, 3, 64, 64))
output = net(input)
output = torch.add(bicub_res, output).clamp(0, 255)
output = output.view((3, 256, 256))
output = toimg(output)

现在,将这些图像作为低分辨率、高分辨率和残差(网络输出):

如果我将低分辨率图像与残差图像相加,如代码所示,我得到的是:

这似乎有点太暗了。现在,鉴于数据结构是 numpy 数组,我尝试将数组的值拉伸回范围 (0, 255),然后将其转换回图像。在这种情况下,我得到了这个:

比以前亮了一点,但仍然很暗。我究竟做错了什么?如何恢复我的图像?

编辑:我会回答我的问题:问题是我忘记添加的每一层的常数因素。

不过,我还有一个问题要问:在恢复正确的图像后,我注意到每张图像上都有某种噪点:

看着其他图像,比如婴儿,我注意到它是某种“水印自我图像”的重复 9 次(在 3x3 网格上)。无论我做什么或如何训练网络,这种模式对于每张图片都是相同的。 为什么我会看到这个工件?

【问题讨论】:

    标签: python python-3.x numpy python-imaging-library


    【解决方案1】:

    所以,我解决了我的两个问题。供将来参考:

    1. 第一个问题是我的代码中的一个错误:当我训练网络时,我为每个通道减去一个常数值PER_CHANNEL_MEANS = np.array([0.47614917, 0.45001204, 0.40904046])。在恢复图像时,我没有添加该值,因为每个通道的值都是固定的,因此会导致亮度偏移。

    2. 我的第二个问题更难,因为问题不是我的代码或我的网络,而是numpy:显然,将数组从(3, 256, 256) 重塑为 (256, 256, 3)` 会改变数据分布,因此发生了转变。为了解决,我使用了:

      output = torch.add(output, torch.from_numpy(PER_CHANNEL_MEANS).view((1, 3, 256, 256))).clamp(0, 255)
      o = output.view((3, 256, 256))
      o = o.data.numpy()
      o = np.swapaxes(o, 0, 1)
      o = np.swapaxes(o, 1, 2)
      

      这不是一种优雅的方式,但它可以完成工作。

    附录: 至此,我已经解决了两个问题,但我还有另一个问题,在我帖子的最后一张图片中可以很容易地注意到:一些像素转变为完全错误的颜色。

    为了将数组a 转换为图像,我使用了a.astype(np.uint8),但没有意识到如果值v 超过np.uint8 的最大值(255),则结果值将是np.mod(v, 255) .这导致了颜色偏移,我按照the answer to that question 解决了这个问题。

    请随时为我解决第二个问题的方法提出更优雅的方法,我将提供编辑它。

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2021-01-05
      • 2018-07-21
      • 2023-03-17
      • 2010-09-27
      • 2011-12-07
      • 2021-08-08
      • 1970-01-01
      相关资源
      最近更新 更多