torch.nn.functional.grid_sample
-
torch.nn.functional.grid_sample(input, grid, mode='bilinear', padding_mode='zeros', align_corners=None)[исходный код] -
Выполняет выборку по сетке.
Для заданных
inputи поля потокаgridвычисляетoutput, используя значенияinputи расположение пикселей изgrid.В настоящее время поддерживаются только пространственные (4-D) и объёмные (5-D)
input.В пространственном случае (4-D), для
inputс формой иgridс формой , выход будет иметь форму .Для каждого расположения выходного элемента
output[n, :, h, w]вектор размера 2grid[n, h, w]задаётinputрасположение пикселейxиy, которые используются для интерполяции выходного значенияoutput[n, :, h, w]. Для входных данных 5-Dgrid[n, d, h, w]задаёт расположение пикселейx,y,zдля интерполяцииoutput[n, :, d, h, w]. Аргументmodeзадаёт метод интерполяцииnearestилиbilinearдля выборки входных пикселей.gridзадаёт координаты пикселей для выборки, нормализованные относительноinputпространственных размеров. Поэтому большинство значений должно находиться в диапазоне[-1, 1]. Например, значенияx = -1, y = -1соответствуют левому верхнему пикселюinput, а значенияx = 1, y = 1— правому нижнему пикселюinput.Если
gridсодержит значения за пределами диапазона[-1, 1], соответствующие выходные значения обрабатываются в соответствии сpadding_mode. Доступны следующие варианты:-
padding_mode="zeros": для расположений сетки за пределами границ использовать0, -
padding_mode="border": для расположений сетки за пределами границ использовать значения на границе, -
padding_mode="reflection": для расположений сетки за пределами границ использовать значения в точках, отражённых относительно границы. Для расположений, удалённых от границы, отражение будет повторяться, пока точка не окажется внутри границ. Например, расположение пикселя (в нормализованных координатах)x = -3.5отражается относительно границы-1и становитсяx' = 1.5, затем отражается относительно границы1и становитсяx'' = -0.5.
Примечание
Эта функция часто используется вместе с
affine_grid()для создания сетей Spatial Transformer Networks .Примечание
При использовании бэкенда CUDA эта операция может приводить к недетерминированному поведению при обратном проходе, которое нельзя легко отключить. Дополнительные сведения см. в примечаниях о воспроизводимости.
Примечание
Значения NaN в
gridинтерпретируются как-1.- Параметры:
-
- input (Tensor) – входные данные формы (для случая 4-D) или (для случая 5-D)
- grid (Tensor) – поле потока формы (для случая 4-D) или (для случая 5-D)
-
mode (str) – режим интерполяции для вычисления выходных значений
'bilinear'|'nearest'|'bicubic'. По умолчанию:'bilinear'Примечание:mode='bicubic'поддерживает только входные данные 4-D. Еслиmode='bilinear'и входные данные имеют размерность 5-D, фактически используемый внутри режим интерполяции будет трилинейным. Однако для входных данных 4-D режим интерполяции будет именно билинейным. -
padding_mode (str) – режим дополнения для значений вне сетки
'zeros'|'border'|'reflection'. По умолчанию:'zeros' -
align_corners (bool, optional) – С геометрической точки зрения мы рассматриваем пиксели входных данных как квадраты, а не как точки. Если установлено значение
True, крайние координаты (-1и1) считаются координатами центральных точек угловых пикселей входных данных. Если установлено значениеFalse, они считаются координатами угловых точек угловых пикселей входных данных, благодаря чему выборка становится менее зависимой от разрешения. Эта опция соответствует опцииalign_cornersвinterpolate(), поэтому при изменении размера входного изображения перед выборкой по сетке здесь следует использовать то же значение. По умолчанию:False
- Возвращает:
-
выходной тензор
- Тип возвращаемого значения:
-
output (Tensor)
Предупреждение
При
align_corners = Trueпозиции сетки зависят от размера пикселей относительно размера входного изображения, поэтому расположения, выбираемые с помощьюgrid_sample(), будут различаться для одинаковых входных данных с разным разрешением (то есть после увеличения или уменьшения размера). До версии 1.2.0 поведением по умолчанию былоalign_corners = True. С тех пор поведение по умолчанию изменено наalign_corners = False, чтобы оно соответствовало поведению по умолчанию вinterpolate().Примечание
mode='bicubic'реализован с использованием алгоритма кубической свёртки с параметром . Константа может различаться в разных пакетах. Например, PIL и OpenCV используют соответственно -0.5 и -0.75. Этот алгоритм может давать значения за пределами интерполируемого диапазона. Например, при интерполяции входных значений в диапазоне [0, 255] он может выдавать отрицательные значения или значения больше 255. Чтобы результаты находились в допустимом диапазоне, ограничьте их с помощьюtorch.clamp(). -
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.functional.grid_sample.html