Использование преобразований в PyTorch - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть тензор X изображений Cat / No cat в PyTorch, и я хотел применить к нему преобразования. Есть ли способ так без загрузчиков данных?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Да, есть. Если вы говорите о torchvision.transforms, они не зависят от загрузчиков данных. Например:

import torch
import numpy as np
from torchvision import transforms

torch.manual_seed(2020)

# lets say this is your image (you said it is a tensor, not a PIL Image)
x = (torch.rand((2,3)) * 255.).to(torch.uint8)

# this is your transformation... they need it to be a PIL Image :(
t = transforms.Compose([
    transforms.ToPILImage(),
    transforms.RandomHorizontalFlip(p=1.0), # 100% just to make sure we see it being applied
    transforms.Lambda(lambda x: torch.tensor(np.array(x)))
])

# this is how you can apply the transformation
transformed_x = t(x)

print(x)
# tensor([[124,  26, 150],
#         [ 29, 126,  72]], dtype=torch.uint8)

print(transformed_x)
# tensor([[150,  26, 124],
#         [ 72, 126,  29]], dtype=torch.uint8)

Если у вас есть пользовательские преобразования, которые работают с тензором, вы можете удалить всю вещь «тензор -> PIL -> тензор».

0 голосов
/ 12 апреля 2020

Вы можете использовать функциональные преобразования . Пример добавления отступов:

from PIL import Image
from torchvision import transforms

pil_image = Image.open("path/to/image.jpg")
img_with_padding = transforms.functional.pad(pil_image,(10,10)) # Add 10px pad
tensor_img = transforms.functional.to_tensor(img_with_padding)

См. Полный пример здесь: https://github.com/Gan4x4/CV-HSE2019/blob/master/helloworld/Dataset_and_Dataloader.ipynb

...