Python 基于Pytorch参数从数据加载程序映像裁剪自定义子映像
train&validation文件夹中有矩形图像,这些图像通过数据加载模块通过Pytorch访问。不表演,Python 基于Pytorch参数从数据加载程序映像裁剪自定义子映像,python,image,deep-learning,pytorch,dataloader,Python,Image,Deep Learning,Pytorch,Dataloader,train&validation文件夹中有矩形图像,这些图像通过数据加载模块通过Pytorch访问。不表演, transforms.CenterCrop(size) or transforms.RandomCrop(size) 我需要保留它们的原始形状和大小,以便在培训/测试时,我可以通过一些自定义裁剪技术输入方形图像。此CustomCrop函数可以将某些参数作为输入,这些参数对于不同的图像是不同的 当我只是为了测试而尝试这种定制裁剪方法时,我不得不从测试的数据_变换中排除裁剪线 data_t
transforms.CenterCrop(size) or transforms.RandomCrop(size)
我需要保留它们的原始形状和大小,以便在培训/测试时,我可以通过一些自定义裁剪技术输入方形图像。此CustomCrop函数可以将某些参数作为输入,这些参数对于不同的图像是不同的
当我只是为了测试而尝试这种定制裁剪方法时,我不得不从测试的数据_变换中排除裁剪线
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)):
我理解,DataLoader堆叠图像,它们在运行时需要大小相等。但是,如何实现我的自定义裁剪函数,对于不同的图像可能会有所不同(基于自定义裁剪函数的输入参数)。如有任何建议,将不胜感激。谢谢。我想您的自定义裁剪功能将输出类似形状的图像。如果是这种情况,一个解决方案是从
ImageFolder
扩展您自己的CustomDataset
类,您可以应用自定义裁剪。否则,您可以为Dataloader编写一个自定义的校对函数,以返回包含图像张量的大小列表batch\u size
。。。我现在编辑了这个问题…这个问题之前可能有点不清楚。。。
--> 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 ...