【问题标题】:PyTorch: Image dimension issuePyTorch:图像尺寸问题
【发布时间】:2019-01-25 10:39:48
【问题描述】:

我正在研究图像分类器数据集。我的数据集中有 31 个类,每个类都有一个文件夹。对于训练,我以以下方式加载数据:

from torchvision import datasets, transforms
import torch

def load_training(root_path, dir, batch_size, kwargs):
    transform = transforms.Compose(
        [transforms.Resize([256, 256]),
         transforms.RandomCrop(224),
         transforms.RandomHorizontalFlip(),
         transforms.ToTensor()])
    data = datasets.ImageFolder(root=root_path + dir, transform=transform)
    train_loader = torch.utils.data.DataLoader(data, batch_size=batch_size, shuffle=False, drop_last=True, **kwargs)
    return train_loader

现在批次大小为 32,每个批次的暗淡为:[32,3,224,224]。我知道 Pytorch 使用 PIL 来加载图像。但是,当我尝试使用 PIL 使用以下代码 sn-p 从名为 images 的大小为 32 的列表中加载图像时:

for i in images:
    im = Image.open(root_dir + dir + i)
    im = im.convert('RGB')
    im.load()
    im = im.resize((224, 224))
    im = np.asarray( im, dtype="int32" )
    print(im.shape)
    temp_im_2 = torch.from_numpy(np.array(temp_im)).float()

上面写着im.shape(32,224,224,3)。我究竟做错了什么?我应该怎么做才能让这两种情况下的批次具有相同的形状,比如[32,3,224,224]

【问题讨论】:

    标签: python-3.x image-processing machine-learning python-imaging-library pytorch


    【解决方案1】:

    您应该使用im.permute() 而不是使用.transpose,它需要多个dim 才能交换。 在你的情况下,它是im.permute(0, 3, 1, 2)

    【讨论】:

    • 如果imtorch.Tensorim.permute 确实是正确的函数。但是,他的变量是np.ndarray
    【解决方案2】:

    只是交换轴怎么样?就像im.transpose(0, 3, 1, 2) 如果im 有四个维度。但是,im.shape 应该返回 (224, 224, 3),因为您只加载了一个图像,因此 im.transpose(2, 0, 1) 应该为您提供具有第一维通道的图像,然后您可以将这些图像堆叠在一起形成一个批次。

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 1970-01-01
      • 2017-05-05
      • 2013-03-31
      • 2019-11-10
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多