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