torch.interpolate详解

torch.nn.functional.interpolate

在这里插入图片描述

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.]]]])
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值