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], вектор размером 2grid[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
- Тип возвращаемого значения
-
выход (Tensor)
Предупреждение
При
align_corners = True, позиции сетки зависят от размера пикселя относительно размера входного изображения, и поэтому места, выбранные с помощьюgrid_sample(), будут отличаться для одного и того же входа при разных разрешениях (то есть после масштабирования вверх или вниз). По умолчанию до версии 1.2.0 былоalign_corners = True. С тех пор поведение по умолчанию было изменено наalign_corners = False, для соответствия по умолчаниюinterpolate(). -
Примечание
mode='bicubic'реализовано с использованием алгоритма кубической интерполяции по методу кубической свёртки (cubic convolution) с . Константа может отличаться в разных пакетах. Например, в PIL и OpenCV она равна -0.5 и -0.75 соответственно. Этот алгоритм может «пересекать» диапазон интерполируемых значений. Например, при интерполяции входных значений в диапазоне [0, 255] он может генерировать отрицательные значения или значения, превышающие 255. Используйтеtorch.clamp()для ограничения результатов в допустимом диапазоне.
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.nn.functional.grid_sample.html