文章目录
1. 函数语法格式
torch.nn.functional.interpolate(
input,
size=None,
scale_factor=None,
mode='nearest',
align_corners=None,
recompute_scale_factor=None,
antialias=False
)
利用插值方法,对输入的张量数组进行上\下采样操作,就是科学合理地改变数组的尺寸大小,尽量保持数据完整。
2. 参数解释
⭐ 注意
-
size 与 scale_factor 两个参数只能定义一个,即两种采样模式只能用一个。要么让数组放大成特定大小、要么给定特定系数,来等比放大数组。
-
如果 size 或者 scale_factor输入序列,则必须匹配输入的大小。如果输入四维,则它们的序列长度必须是 2,如果输入是五维,则它们的序列长度必须是 3。
⭐ align_corners
align_corners=True 与 False 的区别,从 4×4 上采样成 8×8。一个是按四角的像素点中心对齐,另一个是按四角的像素角点对齐。
3. 实验测试
⭐ 使用 size 上采样
原图像从 [2,3] 放大为 [4,4]
import torch.nn.functional as F
import torch
a = torch.arange(12, dtype=torch.float32).reshape(1, 2, 2, 3)
b = F.interpolate(a, size=(4, 4), mode='bilinear')
# 这里的(4,4)指的是将后两个维度放缩成4*4的大小
print(a)
print(b)
print('原数组尺寸:', a.shape)
print('size采样尺寸:', b.shape)
输出
tensor([[[[ 0., 1., 2.],
[ 3., 4., 5.]],
[[ 6., 7., 8.],
[ 9., 10., 11.]]]])
tensor([[[[ 0.0000, 0.6250, 1.3750, 2.0000],
[ 0.7500, 1.3750, 2.1250, 2.7500],
[ 2.2500, 2.8750, 3.6250, 4.2500],
[ 3.0000, 3.6250, 4.3750, 5.0000]],
[[ 6.0000, 6.6250, 7.3750, 8.0000],
[ 6.7500, 7.3750, 8.1250, 8.7500],
[ 8.2500, 8.8750, 9.6250, 10.2500],
[ 9.0000, 9.6250, 10.3750, 11.0000]]]])
原数组尺寸: torch.Size([1, 2, 2, 3])
size采样尺寸: torch.Size([1, 2, 4, 4])
⭐ 使用 scale_factor 上采样
scale_factor=(2, 2) 表示图像的长和宽都放大 2 倍
import torch.nn.functional as F
import torch
a = torch.arange(12, dtype=torch.float32).reshape(1, 2, 2, 3)
b = F.interpolate(a, scale_factor=(2, 2), mode='bilinear')
# 这里的(4,4)指的是将后两个维度放缩成4*4的大小
print(a)
print(b)
print('原数组尺寸:', a.shape)
print('size采样尺寸:', b.shape)
输出
tensor([[[[ 0., 1., 2.],
[ 3., 4., 5.]],
[[ 6., 7., 8.],
[ 9., 10., 11.]]]])
tensor([[[[ 0.0000, 0.2500, 0.7500, 1.2500, 1.7500, 2.0000],
[ 0.7500, 1.0000, 1.5000, 2.0000, 2.5000, 2.7500],
[ 2.2500, 2.5000, 3.0000, 3.5000, 4.0000, 4.2500],
[ 3.0000, 3.2500, 3.7500, 4.2500, 4.7500, 5.0000]],
[[ 6.0000, 6.2500, 6.7500, 7.2500, 7.7500, 8.0000],
[ 6.7500, 7.0000, 7.5000, 8.0000, 8.5000, 8.7500],
[ 8.2500, 8.5000, 9.0000, 9.5000, 10.0000, 10.2500],
[ 9.0000, 9.2500, 9.7500, 10.2500, 10.7500, 11.0000]]]])
原数组尺寸: torch.Size([1, 2, 2, 3])
size采样尺寸: torch.Size([1, 2, 4, 6])
评论(0)
您还未登录,请登录后发表或查看评论