mindspore.ops.interpolate

mindspore.ops.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None)[源代码]

按照给定的 sizescale_factor 根据 mode 设置的插值方式,对输入 input 调整大小。

参数:
  • input (Tensor) - 被调整大小的Tensor。输入向量必须为三维,四维或五维,shape为 \((N, C, [optional D], [optional H], W)\) ,数据类型为float。

  • size (Union[int, tuple[int], list[int]], 可选) - 目标大小。如果 size 为tuple或list,那么其长度应该和 input 去掉 N, C 的维度相同。 sizescale_factor 同时只能指定一个。默认值: None

  • scale_factor (Union[float, tuple[float], list[float]],可选) - 每个维度的缩放系数。如果 scale_factor 为tuple或list,那么其长度应该和 input 去掉 N, C 的维度相同。 sizescale_factor 同时只能指定一个。默认值: None

  • mode (str) - 采样算法。以下采样方式的一种,’nearest’(最近邻插值), ‘linear’ (线性插值,仅三维),’bilinear’ (双线性插值,仅四维),’trilinear’(三线性插值,仅五维),’bicubic’ (双三次插值,仅四维),’area’(区域插值),’nearest-exact’(此方法类似于Scikit-Image和PIL最邻插值,可解决一些最邻插值的问题,三维和四维)。默认值: "nearest"

  • align_corners (bool) - 是否使用角对齐进行坐标映射。假设对输入Tensor沿x轴进行变换,具体计算公式如下:

    ori_i = new_length != 1 ? new_i * (ori_length - 1) / (new_length - 1) : 0   # 'align_corners' 为 True
    
    ori_i = new_length > 1 ? (new_i + 0.5) * ori_length / new_length - 0.5 : 0  # 'align_corners' 为 False
    

    其中, \(ori\_length\)\(new\_length\) 分别表示Tensor在x轴方向上转换前、后的长度, \(new\_i\) 表示转换后沿x轴第i个元素的坐标, \(ori\_i\) 表示沿x轴原始数据的对应坐标。

    此选项只对 'linear''bilinear''bicubic' 模式有效,默认值: False

  • recompute_scale_factor (bool, 可选) - 重计算 scale_factor 。如果为True,会使用参数 scale_factor 计算参数 size,最终使用 size 的值进行缩放。如果为False,将使用 sizescale_factor 直接进行插值。默认值: None

说明

‘nearest-exact’模式与scikit-image和PIL的最近邻插值算法相同。’nearest’模式与OpenCV的INTER_NEAREST插值算法结果相同。

参数支持列表和支持平台:

mode

input.dim

align_corners

scale_factor

device

nearest

3

-

×

Ascend,GPU,CPU

4

-

×

Ascend,GPU,CPU

5

-

Ascend,GPU,CPU

linear

3

×

Ascend,GPU,CPU

bilinear

4

×

Ascend,GPU,CPU

bicubic

4

×

Ascend,GPU,CPU

area

3

-

Ascend,GPU,CPU

4

-

Ascend,GPU,CPU

5

-

Ascend,GPU,CPU

nearest-exact

3

-

×

Ascend,CPU

4

-

×

Ascend,CPU

trilinear

5

Ascend,GPU,CPU

  • - 表示无此参数。

  • × 表示当前不支持此参数。

  • 表示当前支持此参数。

返回:

调整大小之后的Tensor,维度和数据类型与 input 相同。

异常:
  • TypeError - input 不是Tensor。

  • ValueError - sizescale_factor 都不为空。

  • ValueError - sizescale_factor 都为空。

  • ValueError - size 为元组或列表类型时长度不等于 input.ndim - 2

  • ValueError - scale_factor 为元组或列表类型时长度不等于 input.ndim - 2

  • ValueError - mode 不在模式支持列表中。

  • ValueError - input.ndim 不在模式对应维度的支持列表中。

  • ValueError - size 不为空, recompute_scale_factor 不为空。

  • ValueError - scale_factor 不在对应的支持列表中。

  • ValueError - align_corners 不在对应的支持列表中。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore
>>> from mindspore import Tensor, ops
>>> input = Tensor([[[1, 2, 3], [4, 5, 6]]], mindspore.float32)
>>> output = ops.interpolate(input, size=(6,), mode='nearest')
>>> print(output)
    [[[1. 1. 2. 2. 3. 3.]
      [4. 4. 5. 5. 6. 6.]]]