Бикубическая интерполяция в пыторхе - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь выполнить бикубическую интерполяцию на 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 за один проход.

Мой вопрос: Нет ли другого способа вычислить это без цикла? Я предполагаю, что разница будет заметна (поправьте меня, если я ошибаюсь).

...