Как извлечь патчи из изображения в pytorch? - PullRequest
1 голос
/ 07 мая 2020

Я хочу извлечь патчи изображения из изображения с размером патча 128 и шагом 32, поэтому у меня есть этот код, но он дает мне ошибку:

from PIL import Image 
img = Image.open("cat.jpg")
x = transforms.ToTensor()(img)

x = x.unsqueeze(0)

size = 128 # patch size
stride = 32 # patch stride
patches = x.unfold(1, size, stride).unfold(2, size, stride).unfold(3, size, stride)
print(patches.shape)

, и я получаю следующую ошибку:

RuntimeError: maximum size for tensor at dimension 1 is 3 but size is 128

Это единственный метод, который я нашел до сих пор. но это дает мне эту ошибку

1 Ответ

1 голос
/ 07 мая 2020

Размер вашего x равен [1, 3, height, width]. Вызов x.unfold(1, size, stride) пытается создать срезы размером 128 из измерения 1, которое имеет размер 3, поэтому он слишком мал для создания любого среза.

Вы не хотите создавать срезы по измерению 1, поскольку они являются каналами изображения (в данном случае RGB), и их нужно сохранить, как и для всех патчей. Патчи создаются только по высоте и ширине изображения.

patches = x.unfold(2, size, stride).unfold(3, size, stride)

Результирующий тензор будет иметь размер [1, 3, num_vertical_slices, num_horizontal_slices, 128, 128]. Вы можете изменить его форму, чтобы объединить фрагменты, чтобы получить список патчей, то есть размером [1, 3, num_patches, 128, 128]:

patches = patches.reshape(1, 3, -1, size, size)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...