【问题标题】:using ImageFolder with albumentations in pytorch在 pytorch 中使用 ImageFolder 和albumentations
【发布时间】:2021-09-12 11:36:48
【问题描述】:

我有一种情况,我需要将 ImageFolder 与 alimentations 库一起使用来在 pytorch 中进行扩充 - 自定义数据加载器不是一个选项。

为此,我被难住了,我无法让 ImageFolder 与专辑一起工作。我已经尝试过这些方面的东西:

class Transforms:
    def __init__(self, transforms: A.Compose):
        self.transforms = transforms

    def __call__(self, img, *args, **kwargs):
        return self.transforms(image=np.array(img))['image']

然后:

    trainset = datasets.ImageFolder(traindir,transform=Transforms(transforms=A.Resize(32 , 32)))

traindir 是一些带有图像的目录。然而,我得到了一个奇怪的错误:

RuntimeError: Given groups=1, weight of size [16, 3, 3, 3], expected input[1024, 32, 32, 3] to have 3 channels, but got 32 channels instead

而且我似乎找不到一个可重现的示例来使简单的 aug 管道与 imagefolder 一起工作。

更新 在@Shai 的推荐下,我现在这样做了:

class Transforms:
    def __init__(self):
        self.transforms = A.Compose([A.Resize(224,224),ToTensorV2()])

    def __call__(self, img, *args, **kwargs):
        return self.transforms(image=np.array(img))['image']
trainset = datasets.ImageFolder(traindir,transform=Transforms())

但我被扔了:

    self.padding, self.dilation, self.groups)
RuntimeError: Input type (torch.cuda.ByteTensor) and weight type (torch.cuda.FloatTensor) should be the same

【问题讨论】:

  • 您似乎错过了将尺寸从 hxwxc 置换为 cxhxw 的结局 ToTensor() 变换class="comcopy">跨度>
  • 嗯,我不确定如何将 toTensor() 传递给这个 :( 如果我传递一个列表,我会收到一个错误,说列表不可调用。:(
  • oyu 应该在调整大小转换后“组合”ToTensor()
  • @Shai:我按照你的建议做了,但似乎引发了另一个错误:(我已将其作为问题的更新发布。

标签: pytorch conv-neural-network albumentations


【解决方案1】:

你需要使用ToTensorV2作为最后一个转换:

trainset = datasets.ImageFolder(traindir,transform=Transforms(transforms=A.Compose([A.Resize(32 , 32), ToTensorV2()]))

【讨论】:

  • 我使用这种 ^ 方法得到了与我在更新 RuntimeError: Input type (torch.cuda.ByteTensor) and weight type (torch.cuda.FloatTensor) should be the same 上发布的相同错误
  • @AJW 我们得到了正确的维度,现在我们需要数据类型。 A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),ToTensorV2 之前怎么样?
  • 我有一个后续问题:那么,当通过 ImageFolder 加载专辑网络时,是使用 PIL 还是 openCV 加载图像?我问是因为 openCV 使用 BGR 而 PIL 使用 RGB ......我想知道我是否需要对此做任何事情。但既然它是 ImageFolder,我认为它是 PIL?即我只是想确保albumentations没有以某种方式在引擎盖下使用openCV(我不这么认为,但我认为值得与你核实!)
  • @AJW AFAIK,使用ImageFolder 调用默认的image_loader(您可以更改)。只有在图像被加载后,它才会被传递给transformations。因此,如果您没有更改默认加载器 - 您正在使用 PIL.Image 和 RGB 图像。
  • 非常感谢您的所有解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2020-09-28
  • 2020-04-27
  • 1970-01-01
  • 2021-11-13
  • 2020-04-04
相关资源
最近更新 更多