如何在PyTorch中更改图片大小

时间:2017-11-08 14:09:40

标签: conv-neural-network pytorch

我尝试使用FER2013数据集向PyTorch模型进行情感识别convert CNN Keras model,我遇到以下错误:

Traceback (most recent call last):
  File "VGG.py", line 112, in <module>
    transfer.keras_to_pytorch(keras_network, pytorch_network)
  File "/home/eorg/NeuralNetworks/user/Project/model/nntransfer.py", line 121, in keras_to_pytorch
    pytorch_model.load_state_dict(state_dict)
  File "/home/eorg/.local/lib/python2.7/site-packages/torch/nn/modules/module.py", line 334, in load_state_dict
    own_state[name].copy_(param)
RuntimeError: inconsistent tensor size at /b/wheel/pytorch-src/torch/lib/TH/generic/THTensorCopy.c:51

我明白错误与图像的形状有关。在Keras中,输入大小定义为48乘48。

我的问题是如何在PyTorch模型中定义我的图片的形状是48x48?我在文档和示例中找不到这样的功能。

任何帮助都会有用!

2 个答案:

答案 0 :(得分:4)

为了自动调整输入图像的大小,您需要定义所有图像都经过的预处理管道。这可以使用torchvision.transforms.Compose()Compose docs)来完成。要调整图像大小,您可以使用torchvision软件包中的torchvision.transforms.Scale()Scale docs)。

参见文档: 注意,在文档中,它表示不推荐.Scale(),而应使用.Resize() Resize docs

这将是一个最小的工作示例:

import torch
from torchvision import transforms

p = transforms.Compose([transforms.Scale((48,48))])

from PIL import Image

img = Image.open('img.jpg')

img.size
# (224, 224) <-- This will be the original dimensions of your image

p(img).size
# (48, 48) <-- This will be the rescaled/resized dimensions of your image

答案 1 :(得分:0)

如果您尝试过的代码也并排给出,将会有所帮助。 @blckbird 给出的答案似乎是正确的(即,在某些时候您需要转换数据)。

现在需要使用 Resize 而不是 Scale。

所以假设数据的批量大小为 64,有 3 个通道,大小为 128x128,您需要将其转换为 64x3x48x48,那么下面的代码应该可以做到

trans = transforms.Compose([transforms.Resize(48)])
tData = trans(data)

此外,如果通道和批次需要改组而不是使用置换。例如将频道带到最后做:

pData = tData.permute([0, 2, 3, 1])