PyTorch新手在这里。我编写了一个脚本(下面的代码),该脚本执行以下操作:加载图像,执行2D卷积操作,然后显示输出和输入。
目前,我有下面的图像,看起来好像不对。如何正确绘制特征图?
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()
答案 0 :(得分:1)
据我了解,问题在于您如何通过重塑来排列图像中通道的位置。而是应使用'np.transpose
或tensor.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]