РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
427 of 769 menu

Функция F.grid_sample

Функция grid_sample применяется для извлечения значений из входного тензора в точках, заданных сеткой координат. Первым параметром передаётся входной тензор размером (N, C, H_in, W_in) для 2D или (N, C, D_in, H_in, W_in) для 3D. Вторым параметром передаётся сетка координат размером (N, H_out, W_out, 2) для 2D или (N, D_out, H_out, W_out, 3) для 3D. Координаты сетки нормализованы к диапазону [-1, 1]. Также доступны параметры mode для задания метода интерполяции, padding_mode для обработки выхода за границы и align_corners для выравнивания углов.

Синтаксис

torch.nn.functional.grid_sample( input, grid, mode='bilinear', padding_mode='zeros', align_corners=None )

Пример

Создадим простое изображение и сетку координат, которая масштабирует изображение:

import torch import torch.nn.functional as F torch.manual_seed(0) t = torch.tensor([[ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16] ]]).float().unsqueeze(0) grid = torch.tensor([[ [[-0.5, -0.5], [0.5, -0.5]], [[-0.5, 0.5], [0.5, 0.5]] ]]) res = F.grid_sample(t, grid, align_corners=True) print(res)

Результат выполнения кода:

tensor([[ [[2.5000, 3.5000], [6.5000, 7.5000]] ]])

Пример

Выполним выборку с использованием различных методов интерполяции:

import torch import torch.nn.functional as F t = torch.tensor([[ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]]).float().unsqueeze(0) grid = torch.tensor([[ [[0.0, 0.0], [0.5, 0.0]], [[0.0, 0.5], [0.5, 0.5]] ]]) res_bilinear = F.grid_sample(t, grid, mode='bilinear', align_corners=False) res_nearest = F.grid_sample(t, grid, mode='nearest', align_corners=False) print("Bilinear:") print(res_bilinear) print("Nearest:") print(res_nearest)

Результат выполнения кода:

Bilinear: tensor([[[[5.0000, 5.5000], [5.5000, 6.0000]]]]) Nearest: tensor([[[[5.0000, 5.0000], [5.0000, 5.0000]]]])

Пример

Используем различные режимы обработки выхода за границы:

import torch import torch.nn.functional as F t = torch.tensor([[ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]]).float().unsqueeze(0) grid = torch.tensor([[ [[-1.5, -1.5], [0.0, 0.0]], [[0.0, 0.0], [1.5, 1.5]] ]]) res_zeros = F.grid_sample(t, grid, padding_mode='zeros', align_corners=True) res_border = F.grid_sample(t, grid, padding_mode='border', align_corners=True) res_reflection = F.grid_sample(t, grid, padding_mode='reflection', align_corners=True) print("Zeros:") print(res_zeros) print("Border:") print(res_border) print("Reflection:") print(res_reflection)

Результат выполнения кода:

Zeros: tensor([[[[0.0000, 5.0000], [5.0000, 0.0000]]]]) Border: tensor([[[[1.0000, 5.0000], [5.0000, 9.0000]]]]) Reflection: tensor([[[[9.0000, 5.0000], [5.0000, 1.0000]]]])

Смотрите также

  • функцию interpolate,
    которая выполняет изменение размера тензора
  • функцию affine_grid,
    которая создаёт сетку координат для аффинного преобразования
  • функцию conv2d,
    которая применяет двумерную свёртку к входному тензору
  • функцию pad,
    которая добавляет отступы к тензору
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить