torch.nn.functional.grid_sample
-
torch.nn.functional.grid_sample(input, grid, mode='bilinear', padding_mode='zeros', align_corners=None)[source] -
Дано
inputи поле потокаgrid, вычисляетoutputиспользуяinputзначения и местоположения пикселей изgrid.В настоящее время поддерживаются только пространственные (4-мерные) и объёмные (5-мерные)
input.В пространственном (4-мерном) случае, для
inputс формой иgridс формой , вывод будет иметь форму .Для каждой выходной точки
output[n, :, h, w], двумерный векторgrid[n, h, w]указываетinputместоположения пикселейxиy, которые используются для интерполяции выходного значенияoutput[n, :, h, w]. В случае 5D входных данных,grid[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()для построения пространственных трансформерных сетей.Примечание
При использовании графического процессора CUDA эта операция может вызывать непредсказуемое поведение в обратном проходе, которое трудно отключить. См. примечания по воспроизводимости для получения дополнительной информации.
Примечание
Значения NaN в
gridбудут интерпретироваться как-1.- Параметры:
-
- input (Tensor) – вход с формой (4-мерный случай) или (5-мерный случай)
- grid (Tensor) – поле потока с формой (4-мерный случай) или (5-мерный случай)
-
mode (str) – режим интерполяции для вычисления выходных значений
'bilinear'|'nearest'|'bicubic'. По умолчанию:'bilinear'Примечание:mode='bicubic'поддерживает только 4-мерный вход. Еслиmode='bilinear'и вход 5-мерный, внутренне используется режим интерполяции трилинейной. Но если вход 4-мерный, режим интерполяции — билинейный. -
padding_mode (str) – режим заполнения для значений сетки вне границ
'zeros'|'border'|'reflection'. По умолчанию:'zeros' -
align_corners (bool, optional) – Геометрически, мы рассматриваем пиксели входа как квадраты, а не точки. Если установлено значение
True, экстремумы (-1и1) рассматриваются как относящиеся к центральным точкам угловых пикселей входа. Если установлено значениеFalse, они рассматриваются как относящиеся к угловым точкам угловых пикселей входа, что делает выборку более независимой от разрешения. Этот параметр аналогичен параметруalign_cornersвinterpolate(), поэтому тот же параметр должен быть использован там для изменения размера входного изображения перед выбором по сетке. По умолчанию:False
- Возвращаемое значение:
-
Tensor вывода
- Тип возвращаемого значения:
-
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. Используйте :func:torch.clampдля ограничения результатов, чтобы они находились в допустимом диапазоне.
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.nn.functional.grid_sample.html