Если входные изображения имеют разные размеры, у вас есть разные варианты в зависимости от вашего проекта. Например, вы можете просто изменить размер изображения, используя transforms.Resize((w, h))
или transforms.CenterCrop((w, h))
. Есть несколько вариантов изменения размера ваших изображений, чтобы все они имели одинаковый размер, см. документацию .
Кроме того, вы можете создавать свои собственные преобразования вместо использования Lambda. Вы могли бы сделать что-то вроде этого
def GaussianBlur(torch.nn.Module):
def __init__(self, kernel_size, std_dev):
self.kernel_size = kernel_size
self.std_dev = std_dev
def forward(self, img):
image = np.array(img)
image_blur = cv2.GaussianBlur(image, self.kernel_size, self.std_dev)
return Image.fromarray(image_blur)
data_transforms = {
'train': transforms.Compose([
transforms.CenterCrop(416),
transforms.RandomRotation([-8,+8]),
GaussianBlur((65, 65), 10),
transforms.ColorJitter(brightness=0, contrast=0.4, saturation=0, hue=0),
transforms.ToTensor(),
transforms.Lambda(lambda x : x + torch.randn_like(x)),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
'val': transforms.Compose([
transforms.CenterCrop(416),
transforms.RandomRotation([-8,+8]),
GaussianBlur((65, 65), 10),
transforms.ColorJitter(brightness=0, contrast=0.4, saturation=0, hue=0),
transforms.ToTensor(),
transforms.Lambda(lambda x : x + torch.randn_like(x)),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
}
Я удалил бесполезный Compose внутри Compose и в этом примере использовал CenterCrop для получения изображения 416 x 416. Если у вас есть другие ошибки, возможно, их стоит опубликовать.