torch.interpolate详解

torch.nn.functional.interpolate

torch.interpolate详解_第1张图片

torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None)
  • input (Tensor):输入数据
  • size (int or Tuple[int] or Tuple[int, int] or Tuple[int, int, int]):输出数据的尺寸
  • scale_factor (float or Tuple[float]):缩放因子
  • mode (str):采样算法
  • align_corners (bool, optional):几何上,我们认为输入和输出的像素是正方形,而不是点。如果设置为True,则输入和输出张量由其角像素的中心点对齐,从而保留角像素处的值。如果设置为False,则输入和输出张量由它们的角像素的角点对齐,插值使用边界外值的边值填充;当scale_factor保持不变时,使该操作独立于输入大小。仅当使用的算法为’linear’, ‘bilinear’, 'bilinear’or 'trilinear’时可以使用。默认设置为False

1. align_corners 参数的实验:

a = [[1., 2.], [4., 5.]]
a = torch.tensor(a).reshape(1, 1, 2, 2)
a: tensor([[[[1., 2.],
          [4., 5.]]]])
x = F.interpolate(a, scale_factor=2, mode='bilinear', align_corners=True)
x: tensor([[[[1.0000, 1.3333, 1.6667, 2.0000],
          [2.0000, 2.3333, 2.6667, 3.0000],
          [3.0000, 3.3333, 3.6667, 4.0000],
          [4.0000, 4.3333, 4.6667, 5.0000]]]])
y = F.interpolate(a, scale_factor=2, mode='bilinear', align_corners=False)
y: tensor([[[[1.0000, 1.2500, 1.7500, 2.0000],
          [1.7500, 2.0000, 2.5000, 2.7500],
          [3.2500, 3.5000, 4.0000, 4.2500],
          [4.0000, 4.2500, 4.7500, 5.0000]]]])
z = F.interpolate(a, size=(4, 4), mode='bilinear', align_corners=False)
z: tensor([[[[1.0000, 1.2500, 1.7500, 2.0000],
          [1.7500, 2.0000, 2.5000, 2.7500],
          [3.2500, 3.5000, 4.0000, 4.2500],
          [4.0000, 4.2500, 4.7500, 5.0000]]]])

2. scale_factor 参数的实验(缩小)

(5, 4) --> (2, 2)

b = [[1., 2., 3., 4.]] * 5
b = torch.tensor(b).reshape(1, 1, 5, 4)
b: tensor([[[[1., 2., 3., 4.],
          [1., 2., 3., 4.],
          [1., 2., 3., 4.],
          [1., 2., 3., 4.],
          [1., 2., 3., 4.]]]])
# (5, 4) -> (2, 2)  缩小因子为(0.4, 0.5)
b1 = F.interpolate(b, scale_factor=(0.4, 0.5), mode='bilinear', align_corners=True)
b1: tensor([[[[1., 4.],
          [1., 4.]]]])
b2 = F.interpolate(b, scale_factor=0.4, mode='bilinear', align_corners=True)
b2: tensor([[[[1.],
          [1.]]]])
b3 = F.interpolate(b, scale_factor=0.5, mode='bilinear', align_corners=True)
b3: tensor([[[[1., 4.],
          [1., 4.]]]])
b4 = F.interpolate(b, size=(2, 2), mode='bilinear', align_corners=True)
b4: tensor([[[[1., 4.],
          [1., 4.]]]])

你可能感兴趣的:(Pytorch,python,pytorch,interpolate)