torch.nn.functional.interpolate介绍

文章目录

    • 基本概念
    • 参数

基本概念

torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None, antialias=False)

作用:将输入上采样或降采样到给定的 sizescale_factor=

使用的插值算法由 mode 决定,可以选择

  • 通用:area, nearest-exact

  • 3D:nearest, linear(3D-only)

  • 4D: bilinear, bicubic(4D-only)

  • 5D:trilinear(5D-only)

目前支持时间,空间和体积采样(输入是 3-D,4-D,5-D)

输入的数据的维度将会被解释为一下形式:

(mini-batch, channels, depth(optional), height(optional), width)

  • 在进行上采样的时候,mini-batchchannels是不变化的,变化的只有图的大小,最多是后三个维度

参数

  • input-输入tensor

  • size(int/Tuple[int]/Tuple[int, int]/Tuple[int, int, int])- 输出的维度

    • 如果是 int,则认为后面的维度都变化

      a = torch.ones(2, 2, 2, 2)
      a = F.interpolate(a, size=3, mode='area')
      print(a)
      print(a.shape)
      >>tensor([[[[1., 1., 1.],
                [1., 1., 1.],
                [1., 1., 1.]],
      
               [[1., 1., 1.],
                [1., 1., 1.],
                [1., 1., 1.]]],
      
      
              [[[1., 1., 1.],
                [1., 1., 1.],
                [1., 1., 1.]],
      
               [[1., 1., 1.],
                [1., 1., 1.],
                [1., 1., 1.]]]])
      >>torch.Size([2, 2, 3, 3])
      
  • scale_factor(float/Tuple[float])- 输出的 size 变成原来的几倍。如果scale_factor是 tuple,其长度应该和input.dim()一样(就是去掉前两维之后维度的数目)

    a = torch.ones(2, 2, 2, 2)
    a = F.interpolate(a, scale_factor=(2, 2), mode='bilinear', align_corners=False)
    print(a.shape)
    >>torch.Size([2, 2, 4, 4])
    
    • 同样,如果是一个数,就默认除前两维之外都变化
  • align_corners(bool,optional):几何上,我们认为像素是一个方块而不是一个点。

    • True:输入和输出 tensor 将会通过 corner pixels 的中心点来对齐,保留 corner pixels 的值
    • Fales:输入和输出 tensors 将会通过 corner pixels 的角点来对齐的
    • 默认是 False,只有当 mode = linear, bilinear, bicubic, trilinear时,才能设置
    • 从4×4上采样成8×8。一个是按四角的像素角点对齐,另一个是按四角的像素点中心对齐。

torch.nn.functional.interpolate介绍_第1张图片

图像来源:https://discuss.pytorch.org/t/what-we-should-use-align-corners-false/22663/9

你可能感兴趣的:(PyTorch,pytorch)