Я пытаюсь выполнить бикубическую интерполяцию на torch.Tensor
.
Я знаю о torch.nn.functional.interpolate
, но этот метод еще не поддерживает бикубическую интерполяцию.
Я знаю, что PIL
изображения поддерживают бикубическую интерполяцию, поэтому я создал этот фрагмент (часть torch.nn.Module).
def build_transform(self, shape):
h, w = shape[2] * self.scale_factor, shape[3] * self.scale_factor
return Compose([
ToPILImage(),
Resize((h, w), interpolation=PIL.Image.BICUBIC),
ToTensor()
])
def forward(self, x: Tensor):
if self.transform is None:
self.transform = self.build_transform(x.shape)
shape = x.shape[0], x.shape[1], x.shape[2] * self.scale_factor, x.shape[3] * self.scale_factor
new = Tensor(size=shape, device=x.device)
for i in range(x.shape[0]):
new[i] = self.transform(x[i])
new.requires_grad_()
return new
Я предполагаю, что этот метод медленнее, чем интерполяция Tensor
за один проход.
Мой вопрос: Нет ли другого способа вычислить это без цикла? Я предполагаю, что разница будет заметна (поправьте меня, если я ошибаюсь).