Python 基于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

train&validation文件夹中有矩形图像,这些图像通过数据加载模块通过Pytorch访问。不表演,

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 ...