如何在PyTorch中更改图片大小

zvokhttg  于 2022-11-23  发布在  其他
关注(0)|答案(3)|浏览(774)

我尝试使用FER 2013数据集将convert CNN Keras model用于情感识别到PyTorch模型,但出现以下错误:

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模型中定义我的图片是48 x48的形状?**我在文档和示例中找不到这样的函数。

任何帮助都会有用!

ycl3bljg

ycl3bljg1#

为了自动调整输入图像的大小,您需要定义一个所有图像都要经过的预处理管道。这可以通过torchvision.transforms.Compose()(合成文档)来完成。要调整图像的大小,您可以使用torchvision软件包中的torchvision.transforms.Scale()(缩放文档)。
请参阅文档:* 请注意,在文档中,.Scale()已被弃用,应改用.Resize()。* 调整文档大小
这是一个最简单的工作示例:

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
hjzp0vay

hjzp0vay2#

如果你尝试过的代码也是并排给出的,这会有帮助。@blckbird给出的答案似乎是正确的(即,在某个时候你需要转换数据)。
现在需要使用“调整大小”而不是“缩放”。
因此,假设数据的批处理大小为64,有3个通道,大小为128 x128,您需要将其转换为64 x3 x48 x48,则以下代码应该可以完成此操作

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

如果通道和批处理需要被打乱,也可以使用置换。例如,要将通道移到最后,请执行以下操作:

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

23c0lvtd3#

1)

如果你使用transform,你可以简单地使用resize。例如,这段代码将把MNIST数据加载转换成一个32*32的形状(在resize行中)

train_loader = torch.utils.data.DataLoader(
  torchvision.datasets.MNIST('/files/', train=True, download=True,
                             transform=torchvision.transforms.Compose([
                               torchvision.transforms.ToTensor(),
                               torchvision.transforms.Resize(32), # This line
                               torchvision.transforms.Normalize(
                                 (0.1307,), (0.3081,))
                             ])),
  batch_size=batch_size_train, shuffle=True)

2)

如果你只想要一个函数,你可以使用torchvision.transforms.functional.resize(image, size, ...)。其他的答案似乎不赞成。
Resize Docs中写入
将输入图像的大小调整为给定大小。
参数:

*img(PIL图像或Tensor)-要调整大小的图像。
*size所需的输出大小。如果size是类似(h,w)的序列,则输出大小将与此匹配。如果size是int,则图像的较小边缘将与此数字匹配,并保持纵横比

返回类型:

  • 图像或Tensor

相关问题