将numpy阵列图像输入到pytorch神经网络中



我有一个图像的numpy数组表示,我想把它变成一个张量,这样我就可以通过我的pytorch神经网络来提供它。

据我所知,神经网络采用了变换后的张量,这些张量不是排列在[100100,3]中,而是排列在[3100100]中,并且像素被重新缩放,图像必须是分批的。

所以我做了以下事情:

import cv2
my_img = cv2.imread('testset/img0.png')
my_img.shape #reuturns [100,100,3] a 3 channel image with 100x100 resolution
my_img = np.transpose(my_img,(2,0,1))
my_img.shape #returns [3,100,100] 
#convert the numpy array to tensor
my_img_tensor = torch.from_numpy(my_img)
#rescale to be [0,1] like the data it was trained on by default 
my_img_tensor *= (1/255)
#turn the tensor into a batch of size 1
my_img_tensor = my_img_tensor.unsqueeze(0)
#send image to gpu 
my_img_tensor.to(device)
#put forward through my neural network.
net(my_img_tensor)

然而,这会返回错误:

RuntimeError: _thnn_conv2d_forward is not implemented for type torch.ByteTensor

问题是,您向网络提供的输入类型为ByteTensor,而对于类似conv的操作,仅实现浮点运算。尝试以下

my_img_tensor = my_img_tensor.type('torch.DoubleTensor')
# for converting to double tensor

Source PyTorch讨论论坛

感谢AlbanD

最新更新