在PyTorch中显示卷积结果

时间:2019-08-31 14:32:55

标签: image-processing pytorch convolution

PyTorch新手在这里。我编写了一个脚本(下面的代码),该脚本执行以下操作:加载图像,执行2D卷积操作,然后显示输出和输入。

目前,我有下面的图像,看起来好像不对。如何正确绘制特征图?

ted

import numpy as np
import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn as nn
import matplotlib.pyplot as plt
import imageio
import sys

A = imageio.imread('LiT.png')
# Define how the convolution operation works
conv2 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3, stride=1, padding=1)

image_d = torch.FloatTensor(np.asarray(A.reshape(1, 3, A.shape[0] , A.shape[1])))
fc = conv2(image_d)
fc1 = fc.permute(0, 2, 3, 1).reshape([516, 780, 3])

plt.figure(figsize=(16,8))
plt.subplot(1,2,1)
plt.imshow(A)
plt.subplot(1,2,2)
plt.imshow(fc1.data.numpy())

plt.show()

2 个答案:

答案 0 :(得分:1)

据我了解,问题在于您如何通过重塑来排列图像中通道的位置。而是应使用'np.transposetensor.permute。使用割炬进行排列:

image_d  = torch.FloatTensor(np.asarray(A)).unsqueeze(0).permute(0,3,1,2)

或者,如果我们要处理numpy中的置换部分:

image_d = np.transpose(np.asarray(A), (2,0,1))
image_d = torch.FloatTensor(image_d).unsqueeze(0)

答案 1 :(得分:1)

您的代码存在的问题是此行

 Failure/Error: allow(:request).to receive(:headers).and_return(headers: { 'My-header' => 'my-header-value' })

     TypeError:
       can't define singleton

您不能只重塑需要转置通道的图像。作为对未来的说明,如果您得到像您一样的条纹结果,则很可能是某些不正确的置换/移位或整形操作。

除此之外,我还将输入图像缩放到image_d = torch.FloatTensor(np.asarray(A.reshape(1, 3, A.shape[0] , A.shape[1]))) 以正确显示它。下面是工作代码:

[0, 1]