torch.nn.functional.grid_sample()関数のパラメーターグリッドは、[-1、1]の範囲の座標系で(x、y、z)を表します。座標と配列の間の対応する関係は次のとおりです。
x-> w、y-> h、z-> d、テストコードは次のとおりです。
-
import numpy as np
-
from torch.nn import functional as F
-
import torch
-
if __name__ == '__main__':
-
d, h, w = 8, 10, 12
-
input = torch.zeros((2, 1, 8, 10, 12), dtype=torch.float32)
-
input[:, 0, 2, 3, 4] = 1
-
grid = torch.zeros((2, 1, 1, 1, 3), dtype=torch.float32)
-
x, y, z = 4, 3, 2 # 对应input的w, h, d
-
# rescale to [-1, 1]
-
x = 2. * x / (w - 1) - 1.
-
y = 2. * y / (h - 1) - 1.
-
z = 2. * z / (d - 1) - 1.
-
grid[0, 0, 0, 0, :] = torch.from_numpy(np.array([x, y, z]).astype(np.float32))
-
grid[1, 0, 0, 0, :] = torch.from_numpy(np.array([x, y, z]).astype(np.float32))
-
out = F.grid_sample(input, grid, mode='nearest')
-
print(out)
出力は次のとおりです。
テンソル([[[[[1。]]]]、
[[[[1。]]]]])