昇腾社区首页
中文
注册
开发者
下载

aclnnUpsampleLinear1d

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:对由多个输入通道组成的输入信号应用线性插值算法进行上采样。如果输入shape为(N, C, L),则输出shape为(N, C, outputSize)。

  • 计算公式:

    • 核心算法逻辑: 1.将目标图像缩放到和原始图像一样大的尺寸。 2.计算缩放之后的目标图像的点,以及前后相邻的原始图像的点。 3.分别计算相邻点到对应目标点的权重,按照权重相乘累加即可得到目标点值。
    • 具体计算逻辑: 缩放方式分为角对齐和边对齐,角对齐表示按照原始图片左上角像素中心点对齐,边对齐表示按照原始图片左上角顶点及两条边对齐,在计算缩放系数和坐标位置时存在差异。则有以下公式:scale={(self.dim[2]1)/(outputSize[0]1)alignCorners=true1/scalesalignCorners=false&scales>0self.dim[2]/outputSize[0]alignCorners=falsescale =\begin{cases} (self.dim[2]-1) / (outputSize[0]-1) & alignCorners=true \\ 1 / scales & alignCorners=false\&scales>0\\ self.dim[2] / outputSize[0] & alignCorners=false \end{cases} 因此,对于output的某个方向上的点p(x),映射回原始图像中的点记为q(x'),则有关系:x={xscale_halignCorners=trueMAX(0,(x+0.5)scale_h0.5)alignCorners=falsex' =\begin{cases} x * scale\_h & alignCorners=true \\ MAX(0,{(x+0.5)*scale\_h-0.5}) & alignCorners=false \end{cases}
      • 记:

        x0=int(x),x1=int(x)+1,lambda0=x1x,lambda1=1lambda0x_{0} =int(x'),x_{1} =int(x')+1, lambda_{0} = x_{1}-x', lambda_{1} = 1-lambda_{0}
      • 则有以下公式:

        V(px)=V(px0)lambda0+V(px1)lambda1{V(p_{x})} = {V(p_{x0})} * {lambda_{0}} + {V(p_{x1})} * {lambda_{1}}

函数原型

每个算子分为,必须先调用“aclnnUpsampleLinear1dGetWorkspaceSize”接口获取入参并根据计算流程计算所需workspace大小,再调用“aclnnUpsampleLinear1d”接口执行计算。

[object Object]
[object Object]

aclnnUpsampleLinear1dGetWorkspaceSize

  • 参数说明:

    [object Object]
    • [object Object]Atlas 训练系列产品[object Object]:

      入参[object Object]和出参[object Object]的数据类型不支持BFLOAT16。

  • 返回值:

    aclnnStatus:返回状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]

aclnnUpsampleLinear1d

  • 参数说明:

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

约束说明

  • 入参[object Object]和出参[object Object]的数据格式不为ND或NCL时,输入其他数据格式会默认按照NCL处理。
  • 参数outputSize与参数scales,在使用时二选一,即:
    • 当alignCorners为True:
      • outputSize等于1,scales的值为0。
      • 其他情况下使用入参self和outputSize的参数值,且:scales=(self_L1)/(outputSize1)scales=(self\_L-1)/ (outputSize-1)
    • 当alignCorners为False时:
      • 当入参scales的值小于等于0时,使用入参outputSize的参数值,即:scales=(self_L/outputSize)scales= (self\_L / outputSize)
      • 当入参scales的值都大于0时,使用入参scales的参数值,即outputSize=[floor(self_Lscales)]outputSize=[floor(self\_L * scales)]
  • 确定性计算:
    • aclnnUpsampleLinear1d默认确定性实现。

调用示例

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]