GridSample
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
| Kirin X90 处理器系列产品 | √ |
| Kirin 9030 处理器系列产品 | √ |
功能说明
-
算子功能:提供一个输入tensor以及一个对应的grid网格,然后根据grid中每个位置提供的坐标信息,将input中对应位置的像素值填充到网格指定的位置,得到最终的输出。
-
计算公式:
-
计算流程:
- 根据grid存储的(x, y)或者(x, y, z)值,计算出映射到input上坐标,这些坐标和align_corners、padding_mode有关。
- 坐标根据输入的interpolation_mode,选择使用bilinear、nearest、bicubic不同插值模式计算输出值。
-
其中:
-
3D场景:
输入input、grid网格、输出output的尺寸如下:
input:(N,C,Din,Hin,Win)grid:(N,Dout,Hout,Wout,3)output:(N,C,Dout,Hout,Wout)input: (N, C, D_{in}, H_{in}, W_{in})\\ grid: (N, D_{out}, H_{out}, W_{out}, 3)\\ output: (N, C, D_{out}, H_{out}, W_{out})
其中input、grid、output中的N是一致的,input和output中的C是一致的,grid和output中的DoutD_{out}、HoutH_{out}、WoutW_{out}是一致的,grid最后一维大小为3,表示input像素位置信息为(x, y, z),会将x、y、z的取值范围归一化到[-1, 1]之间。
-
反归一化的计算公式:
- align_corners=true,表示特征值位于像素中心。
x′=(grid_x+1)/2∗(Din−1)x' = (grid\_x + 1) / 2 * (D_{in} - 1)
y′=(grid_y+1)/2∗(Hin−1)y' = (grid\_y +1) / 2 * (H_{in} - 1)
z′=(grid_z+1)/2∗(Win−1)z' = (grid\_z +1) / 2 * (W_{in} - 1)
- align_corners=false,表示特征值位于像素的角点。
x′=((grid_x+1)∗Din−1)/2x' = ((grid\_x +1) * D_{in} - 1) / 2
y′=((grid_y+1)∗Hin−1)/2y' = ((grid\_y +1) * H_{in} - 1) / 2
z′=((grid_z+1)∗Win−1)/2z' = ((grid\_z +1) * W_{in} - 1) / 2
-
对于超出范围的坐标,会根据paddingMode进行不同处理:
- paddingMode=0,表示对越界位置用0填充。
- paddingMode=1,表示对越界位置用边界值填充。
- paddingMode=2,表示对越界位置用边界值的对称值填充。
-
对input采样时,会根据interpolationMode进行不同处理:
-
interpolationMode="bilinear",表示取input中(x, y, z)周围八个坐标的加权平均值。
output(N,C,Dout,Hout,Wout)=∑i=02∑j=02∑k=02w(i,j,k)∗f(x′,y′,z′){output(N, C, D_{out}, H_{out}, W_{out})} = \sum_{i=0}^{2}\sum_{j=0}^{2}\sum_{k=0}^{2}{w(i, j, k)} * {f(x', y', z')}
其中:
-
f(x′,y′,z′)f(x', y', z')是原图像在(x′,y′,z′)(x', y', z')的像素值。
-
w(i,j,k)w(i, j, k)是双线性插值周边8个点的权重,计算公式为:
w(i)={1−∣xi′−xi∣∣xi′−xi∣<10otherwise w(i) = \begin{cases} 1 - |x'_i - x_i| & |x'_i - x_i| < 1 \\ 0 & otherwise \end{cases}
w(j)={1−∣yj′−yj∣∣yj′−yj∣<10otherwise w(j) = \begin{cases} 1 - |y'_j - y_j| & |y'_j - y_j| < 1 \\ 0 & otherwise \end{cases}
w(k)={1−∣zk′−zk∣∣zk′−zk∣<10otherwise w(k) = \begin{cases} 1 - |z'_k - z_k| & |z'_k - z_k| < 1 \\ 0 & otherwise \end{cases}
w(i,j,k)=w(i)∗w(j)∗w(k)w(i, j, k)= w(i) * w(j) * w(k)
-
-
interpolationMode="nearest",表示取input中距离(x, y, z)最近的坐标值。
output(N,C,Dout,Hout,Wout)=input(N,C,Din,Hin,Win)output(N, C, D_{out}, H_{out}, W_{out}) = input(N, C, D_{in}, H_{in}, W_{in})
其中:
Dout=min(round(x′),H−1)Dout=max(round(x′),0)D_{out} = min(round(x'), H - 1)\\ D_{out} = max(round(x'), 0)
Hout=min(round(y′),H−1)Hout=max(round(y′),0)H_{out} = min(round(y'), H - 1)\\ H_{out} = max(round(y'), 0)
Wout=min(round(z′),W−1)Wout=max(round(z′),0)W_{out} = min(round(z'), W - 1)\\ W_{out} = max(round(z'), 0)
-
-
-
2D场景:
输入input、grid网格、输出output的尺寸如下:
input:(N,C,Hin,Win)grid:(N,Hout,Wout,2)output:(N,C,Hout,Wout)input: (N, C, H_{in}, W_{in})\\ grid: (N, H_{out}, W_{out}, 2)\\ output: (N, C, H_{out}, W_{out})
其中input、grid、output中的N是一致的,input和output中的C是一致的,grid和output中的HoutH_{out}、WoutW_{out}是一致的,grid最后一维大小为2,表示input像素位置信息为(x, y),会将x和y的取值范围归一化到[-1, 1]之间,(-1, 1)表示左上角坐标,(1, -1)表示右下角坐标。
-
反归一化的计算公式:
-
align_corners=true,表示特征值位于像素中心。
x′=(grid_x+1)/2∗(Hin−1)x' = (grid\_x + 1) / 2 * (H_{in} - 1)
y′=(grid_y+1)/2∗(Win−1)y' = (grid\_y +1) / 2 * (W_{in} - 1)
-
align_corners=false,表示特征值位于像素的角点。
x′=((grid_x+1)∗Hin−1)/2x' = ((grid\_x +1) * H_{in} - 1) / 2
y′=((grid_y+1)∗Win−1)/2y' = ((grid\_y +1) * W_{in} - 1) / 2
-
-
对于超出范围的坐标,会根据paddingMode进行不同处理:
- paddingMode=0,表示对越界位置用0填充。
- paddingMode=1,表示对越界位置用边界值填充。
- paddingMode=2,表示对越界位置用边界值的对称值填充。
-
对input采样时,会根据interpolationMode进行不同处理:
-
interpolationMode=0,表示取(x, y)周围四个坐标的加权平均值。
output(N,C,Hout,Wout)=∑i=02∑j=02w(i,j)∗f(x′,y′)output(N, C, H_{out}, W_{out}) = \sum_{i=0}^{2}\sum_{j=0}^{2}{w(i, j)} * {f (x', y')}
其中:
-
f(x′,y′)f(x', y')是原图像在(x′,y′)(x', y')的像素值。
-
w(i,j)w(i, j)是双线性插值周边4个点的权重,计算公式为:
w(i)={1−∣xi′−xi∣∣xi′−xi∣<10otherwise w(i) = \begin{cases} 1 - |x'_i - x_i| & |x'_i - x_i| < 1 \\ 0 & otherwise \end{cases}
w(j)={1−∣yj′−yj∣∣yj′−yj∣<10otherwise w(j) = \begin{cases} 1 - |y'_j - y_j| & |y'_j - y_j| < 1 \\ 0 & otherwise \end{cases}
w(i,j)=w(i)∗w(j)w(i, j)= w(i) * w(j)
-
-
interpolationMode=1,表示取input中距离(x, y)最近的坐标值。
output(N,C,Hout,Wout)=input(N,C,Hin,Win)output(N, C, H_{out}, W_{out}) = input(N, C, H_{in}, W_{in})
其中:
Hout=min(round(x′),H−1)Hout=max(round(x′),0)H_{out} = min(round(x'), H - 1)\\ H_{out} = max(round(x'), 0)
Wout=min(round(y′),W−1)Wout=max(round(y′),0)W_{out} = min(round(y'), W - 1)\\ W_{out} = max(round(y'), 0)
-
interpolationMode=2,表示取(x, y)周围十六个坐标的加权平均值。
output(N,C,Hout,Wout)=∑i=03∑j=03W(i,j)∗f(x′,y′){output(N, C, H_{out}, W_{out})}=\sum_{i=0}^{3}\sum_{j=0}^{3}{W(i, j)}*{f (x', y')}
其中:
-
i和j是W(i,j)W(i, j)的索引变量。
-
f(x′,y′)f(x', y')是原图像在(x′,y′)(x', y')的像素值。
-
W(i,j)W(i, j)是双三次插值的权重,定义为:
W(d)={(a+2)∣d∣3−(a+3)∣d∣2+1∣d∣≤1a∣d∣3−5a∣d∣2+8a∣d∣−4a1<∣d∣<20otherwiseW(d) =\begin{cases} (a+2)|d|^3-(a+3)|d|^2+1 & |d|\leq1 \\ a|d|^3-5a|d|^2+8a|d|-4a & 1<|d|<2 \\ 0 & otherwise \end{cases}
其中:
- a=−0.75a=-0.75
- d=∣(xi,yj)−(xi′,yj′)∣d = |(x_i, y_j) - (x'_i, y'_j)|
-
-
-
-
-
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 进行插值计算的输入张量,对应公式中描述的`input`。 | FLOAT16、FLOAT32、BFLOAT16 | ND |
| grid | 输入 | 采样的网格,对应公式中描述的`grid`。 | FLOAT16、FLOAT32、BFLOAT16 | ND |
| interpolation_mode | 可选属性 |
|
STRING | - |
| padding_mode | 可选属性 |
|
STRING | - |
| align_corners | 可选属性 |
|
BOOL | - |
| channel_last | 可选属性 |
|
BOOL | - |
| scheduler_mode | 可选属性 |
|
INT | - |
| y | 输出 | 插值计算的最终输出结果,对应公式中描述的`output`。 | FLOAT16、FLOAT32、BFLOAT16 | ND |
-
Atlas 推理系列产品:
- 2D场景下,需要同时满足以下条件:
- 输入和输出的数据类型仅支持FLOAT32。
- 属性
interpolation_mode需要设置为bilinear。 - 属性
padding_mode设置为zeros。 - 输入
x的C轴的值为32或者(C轴的大小∗H轴的大小∗W轴的大小)<20k(C轴的大小 * H轴的大小 * W轴的大小) < 20k。
- 不支持3D场景。
- 2D场景下,需要同时满足以下条件:
-
Kirin X90 处理器系列产品、Kirin 9030 处理器系列产品:不支持BFLOAT16。
约束说明
- 3D场景下
- 属性
interpolation_mode不支持配置为"bicubic"。 - 输入
x的(D轴的大小∗H轴的大小∗W轴的大小)<INT32的最大值(D轴的大小 * H轴的大小 * W轴的大小) < INT32的最大值。
- 属性
- 2D场景下,输入
x的(H轴的大小∗W轴的大小)<INT32的最大值(H轴的大小 * W轴的大小) < INT32的最大值。 x和grid的shape,所有维度都必须大于0。- 输入
x的(D轴的大小∗H轴的大小∗W轴的大小)<INT32的最大值(D轴的大小 * H轴的大小 * W轴的大小) < INT32的最大值。 - grid的输入值∗图片(长或宽)>24位的二进制数(16777216)输入值 * 图片(长或宽)> 24位的二进制数(16777216),采样点可能存在误差,精度可能产生偏差。
- Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品:如果grid存在超出[-1, 1]范围的数据,使用bicubic插值时,小值域数据计算可能存在误差,精度可能产生偏差。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_aclnn_grid_sample2_d | 通过aclnnGridSampler2D接口方式调用GridSample算子。 |
| aclnn接口 | test_aclnn_grid_sample3_d | 通过aclnnGridSampler3D接口方式调用GridSample算子。 |
| 图模式 | - | 通过算子IR构图方式调用GridSample算子。 |