2

train & validation 文件夹中有矩形图像,图像通过 Pytorch 通过 DataLoader 模块访问。不表演,

transforms.CenterCrop(size) or transforms.RandomCrop(size)

我需要保留它们的原始形状和大小,以便在训练/测试时可以通过一些自定义裁剪技术输入方形图像。这个 CustomCrop 函数可以将某些参数作为输入,对于不同的图像是不同的。

当我尝试这种仅用于测试的自定义裁剪方法时,我不得不从 data_transforms 中排除裁剪线以进行测试。

data_transforms = {
    TRAIN: transforms.Compose([
        transforms.RandomCrop(size),
        transforms.ToTensor(),
    ]),
    TEST: transforms.Compose([
        #CROPPING LINE EXCLUDED FROM HERE
        transforms.ToTensor(),
    ])
}
image_datasets = {
    x: ImageFolder(
        os.path.join(path, mapping[x]), 
        transform=data_transforms[x]
    )
    for x in [TRAIN, TEST]
}
dataloaders = {
       x: DataLoader(
       image_datasets[x], batch_size=batch_size
       )
    for x in [TRAIN, TEST]
}    

我的意图是做类似的事情......

for imgs, lbls, paths in iter(dataloaders[TEST]):
    data = (imgs, lbls)
    inputs, labels = data
    cropped_input = myCustomCrop(inputs, param1, param2) #this crops it to square size, compatible for my model
    [...]  #some code      
    optimizer.zero_grad()            
    outputs = model(cropped_input)

...这样我就可以根据需要在运行时裁剪它。

但这给了我一条错误消息(对于文件夹中的图像大小(100,75)):

--> 218     for imgs, lbls, paths in iter(dataloaders[TEST]):
RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 100 and 75 in dimension 2 at ...

我知道,DataLoader 会堆叠图像,并且它们在运行时需要相同大小。但是,我该如何实现我的自定义裁剪功能,对于不同的图像可能会有所不同(基于自定义裁剪功能的输入参数)。任何建议将不胜感激。谢谢。

4

0 回答 0