已合并
modified md files #1118
gitee-duhuiping创建于 7月13日
modified md files #1118
已合并
gitee-duhuiping创建于 7月13日
42 个文件变更+674-661
Mdocs/zh/op_api_list.md+2-2
@@ -56,8 +56,8 @@
56| [aclnnUpsampleLinear1dBackward](../../image/upsample_bilinear2d_grad/docs/aclnnUpsampleLinear1dBackward.md) | [aclnnUpsampleLinear1d](../../image/upsample_linear1d/docs/aclnnUpsampleLinear1d.md)的反向传播。 |默认确定性实现|默认非确定性实现,支持配置开启|56| [aclnnUpsampleLinear1dBackward](../../image/upsample_bilinear2d_grad/docs/aclnnUpsampleLinear1dBackward.md) | [aclnnUpsampleLinear1d](../../image/upsample_linear1d/docs/aclnnUpsampleLinear1d.md)的反向传播。 |默认确定性实现|默认非确定性实现,支持配置开启|
57| [aclnnUpsampleNearestExact1d](../../image/upsample_nearest/docs/aclnnUpsampleNearestExact1d.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|57| [aclnnUpsampleNearestExact1d](../../image/upsample_nearest/docs/aclnnUpsampleNearestExact1d.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|
58| [aclnnUpsampleNearestExact2d](../../image/upsample_nearest/docs/aclnnUpsampleNearestExact2d.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|58| [aclnnUpsampleNearestExact2d](../../image/upsample_nearest/docs/aclnnUpsampleNearestExact2d.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|
59-| [aclnnUpsampleNearest1dBackward](../../image/upsample_nearest2d_grad/docs/aclnnUpsampleNearest1dBackward.md) | [aclnnUpsampleNearestExact1d](../../image/upsample_nearest/docs/aclnnUpsampleNearestExact1d.md)的反向传播。 |默认确定性实现|默认确定性实现|59+| [aclnnUpsampleNearest1dBackward](../../image/upsample_nearest2d_grad/docs/aclnnUpsampleNearest1dBackward.md) | [aclnnUpsampleNearest1dV2](../../image/upsample_nearest3d/docs/aclnnUpsampleNearest1dV2.md)的反向传播。 |默认确定性实现|默认确定性实现|
60-| [aclnnUpsampleNearest2dBackward](../../image/upsample_nearest2d_grad/docs/aclnnUpsampleNearest2dBackward.md) | [aclnnUpsampleNearestExact2d](../../image/upsample_nearest/docs/aclnnUpsampleNearestExact2d.md)的反向传播。 |默认确定性实现|默认确定性实现|60+| [aclnnUpsampleNearest2dBackward](../../image/upsample_nearest2d_grad/docs/aclnnUpsampleNearest2dBackward.md) | [aclnnUpsampleNearest2dV2](../../image/upsample_nearest3d/docs/aclnnUpsampleNearest2dV2.md)的反向传播。 |默认确定性实现|默认确定性实现|
61| [aclnnUpsampleNearest1dV2](../../image/upsample_nearest3d/docs/aclnnUpsampleNearest1dV2.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|61| [aclnnUpsampleNearest1dV2](../../image/upsample_nearest3d/docs/aclnnUpsampleNearest1dV2.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|
62| [aclnnUpsampleNearest2dV2](../../image/upsample_nearest3d/docs/aclnnUpsampleNearest2dV2.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|62| [aclnnUpsampleNearest2dV2](../../image/upsample_nearest3d/docs/aclnnUpsampleNearest2dV2.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|
63| [aclnnUpsampleNearest3d](../../image/upsample_nearest3d/docs/aclnnUpsampleNearest3d.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|63| [aclnnUpsampleNearest3d](../../image/upsample_nearest3d/docs/aclnnUpsampleNearest3d.md) | 对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。 |默认确定性实现|默认确定性实现|
Mimage/grid_sample/README.md+23-23
@@ -21,25 +21,25 @@
21 - 计算流程:21 - 计算流程:
22 1. 根据grid存储的(x, y)或者(x, y, z)值,计算出映射到input上坐标,这些坐标和align_corners、padding_mode有关。22 1. 根据grid存储的(x, y)或者(x, y, z)值,计算出映射到input上坐标,这些坐标和align_corners、padding_mode有关。
23 2. 坐标根据输入的interpolation_mode,选择使用bilinear、nearest、bicubic不同插值模式计算输出值。23 2. 坐标根据输入的interpolation_mode,选择使用bilinear、nearest、bicubic不同插值模式计算输出值。
24- 24+ 
25 - 其中:25 - 其中:
26 - 3D场景:26 - 3D场景:
27- 27+ 
28 输入input、grid网格、输出output的尺寸如下:28 输入input、grid网格、输出output的尺寸如下:
29- 29+ 
30 $$30 $$
31 input: (N, C, D_{in}, H_{in}, W_{in})\\31 input: (N, C, D_{in}, H_{in}, W_{in})\\
32 grid: (N, D_{out}, H_{out}, W_{out}, 3)\\32 grid: (N, D_{out}, H_{out}, W_{out}, 3)\\
33 output: (N, C, D_{out}, H_{out}, W_{out})33 output: (N, C, D_{out}, H_{out}, W_{out})
34 $$34 $$
35- 35+ 
36 其中input、grid、output中的N是一致的,input和output中的C是一致的,grid和output中的$D_{out}$、$H_{out}$、$W_{out}$是一致的,grid最后一维大小为3,表示input像素位置信息为(x, y, z),会将x、y、z的取值范围归一化到[-1, 1]之间。36 其中input、grid、output中的N是一致的,input和output中的C是一致的,grid和output中的$D_{out}$、$H_{out}$、$W_{out}$是一致的,grid最后一维大小为3,表示input像素位置信息为(x, y, z),会将x、y、z的取值范围归一化到[-1, 1]之间。
37 37 
38 - 反归一化的计算公式:38 - 反归一化的计算公式:
39 - align_corners=true,表示特征值位于像素中心。39 - align_corners=true,表示特征值位于像素中心。
40 40 
41 $$41 $$
42- x' = (grid\_x + 1) / 2 * (D_{in} - 1)42+ x' = (grid\_x + 1) / 2 * (W_{in} - 1)
43 $$43 $$
44 44 
45 $$45 $$
@@ -47,13 +47,13 @@
47 $$47 $$
48 48 
49 $$49 $$
50- z' = (grid\_z +1) / 2 * (W_{in} - 1)50+ z' = (grid\_z +1) / 2 * (D_{in} - 1)
51 $$51 $$
52 52 
53 - align_corners=false,表示特征值位于像素的角点。53 - align_corners=false,表示特征值位于像素的角点。
54 54 
55 $$55 $$
56- x' = ((grid\_x +1) * D_{in} - 1) / 256+ x' = ((grid\_x +1) * W_{in} - 1) / 2
57 $$57 $$
58 58 
59 $$59 $$
@@ -61,7 +61,7 @@
61 $$61 $$
62 62 
63 $$63 $$
64- z' = ((grid\_z +1) * W_{in} - 1) / 264+ z' = ((grid\_z +1) * D_{in} - 1) / 2
65 $$65 $$
66 66 
67 - 对于超出范围的坐标,会根据paddingMode进行不同处理:67 - 对于超出范围的坐标,会根据paddingMode进行不同处理:
@@ -72,7 +72,7 @@
72 - interpolationMode="bilinear",表示取input中(x, y, z)周围八个坐标的加权平均值。72 - interpolationMode="bilinear",表示取input中(x, y, z)周围八个坐标的加权平均值。
73 73 
74 $$74 $$
75- {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')}75+ {output(N, C, D_{out}, H_{out}, W_{out})} = \sum_{i=0}^{1}\sum_{j=0}^{1}\sum_{k=0}^{1}{w(i, j, k)} * {f(x', y', z')}
76 $$76 $$
77 77 
78 其中:78 其中:
@@ -113,8 +113,8 @@
113 其中:113 其中:
114 114 
115 $$115 $$
116- D_{out} = min(round(x'), H - 1)\\116+ W_{out} = min(round(x'), W - 1)\\
117- D_{out} = max(round(x'), 0)117+ W_{out} = max(round(x'), 0)
118 $$118 $$
119 119 
120 $$120 $$
@@ -123,10 +123,10 @@
123 $$123 $$
124 124 
125 $$125 $$
126- W_{out} = min(round(z'), W - 1)\\126+ D_{out} = min(round(z'), D - 1)\\
127- W_{out} = max(round(z'), 0)127+ D_{out} = max(round(z'), 0)
128 $$128 $$
129- 129+ 
130 - 2D场景:130 - 2D场景:
131 131 
132 输入input、grid网格、输出output的尺寸如下:132 输入input、grid网格、输出output的尺寸如下:
@@ -136,28 +136,28 @@
136 grid: (N, H_{out}, W_{out}, 2)\\136 grid: (N, H_{out}, W_{out}, 2)\\
137 output: (N, C, H_{out}, W_{out})137 output: (N, C, H_{out}, W_{out})
138 $$138 $$
139- 139+ 
140 其中input、grid、output中的N是一致的,input和output中的C是一致的,grid和output中的$H_{out}$、$W_{out}$是一致的,grid最后一维大小为2,表示input像素位置信息为(x, y),会将x和y的取值范围归一化到[-1, 1]之间,(-1, 1)表示左上角坐标,(1, -1)表示右下角坐标。140 其中input、grid、output中的N是一致的,input和output中的C是一致的,grid和output中的$H_{out}$、$W_{out}$是一致的,grid最后一维大小为2,表示input像素位置信息为(x, y),会将x和y的取值范围归一化到[-1, 1]之间,(-1, 1)表示左上角坐标,(1, -1)表示右下角坐标。
141 141 
142 - 反归一化的计算公式:142 - 反归一化的计算公式:
143 - align_corners=true,表示特征值位于像素中心。143 - align_corners=true,表示特征值位于像素中心。
144 144 
145 $$145 $$
146- x' = (grid\_x + 1) / 2 * (H_{in} - 1)146+ x' = (grid\_x + 1) / 2 * (W_{in} - 1)
147 $$147 $$
148 148 
149 $$149 $$
150- y' = (grid\_y +1) / 2 * (W_{in} - 1)150+ y' = (grid\_y +1) / 2 * (H_{in} - 1)
151 $$151 $$
152 152 
153 - align_corners=false,表示特征值位于像素的角点。153 - align_corners=false,表示特征值位于像素的角点。
154 154 
155 $$155 $$
156- x' = ((grid\_x +1) * H_{in} - 1) / 2156+ x' = ((grid\_x +1) * W_{in} - 1) / 2
157 $$157 $$
158 158 
159 $$159 $$
160- y' = ((grid\_y +1) * W_{in} - 1) / 2160+ y' = ((grid\_y +1) * H_{in} - 1) / 2
161 $$161 $$
162 162 
163 - 对于超出范围的坐标,会根据paddingMode进行不同处理:163 - 对于超出范围的坐标,会根据paddingMode进行不同处理:
@@ -205,13 +205,13 @@
205 其中:205 其中:
206 206 
207 $$207 $$
208- H_{out} = min(round(x'), H - 1)\\208+ W_{out} = min(round(x'), W - 1)\\
209- H_{out} = max(round(x'), 0)209+ W_{out} = max(round(x'), 0)
210 $$210 $$
211 211 
212 $$212 $$
213- W_{out} = min(round(y'), W - 1)\\213+ H_{out} = min(round(y'), H - 1)\\
214- W_{out} = max(round(y'), 0)214+ H_{out} = max(round(y'), 0)
215 $$215 $$
216 216 
217 - interpolationMode=2,表示取(x, y)周围十六个坐标的加权平均值。217 - interpolationMode=2,表示取(x, y)周围十六个坐标的加权平均值。
Mimage/grid_sample/docs/aclnnGridSampler2D.md+17-17
@@ -17,7 +17,7 @@
17 17 
18- 接口功能:提供一个输入Tensor以及一个对应的grid网格,然后根据grid中每个位置提供的坐标信息,将input中对应位置的像素值填充到网格指定的位置,得到最终的输出。18- 接口功能:提供一个输入Tensor以及一个对应的grid网格,然后根据grid中每个位置提供的坐标信息,将input中对应位置的像素值填充到网格指定的位置,得到最终的输出。
19- 计算公式:19- 计算公式:
20- 20+ 
21 输入input、grid网格、输出output的尺寸如下:21 输入input、grid网格、输出output的尺寸如下:
22 22 
23 $$23 $$
@@ -31,21 +31,21 @@
31 - alignCorners=true,表示特征值位于像素中心。31 - alignCorners=true,表示特征值位于像素中心。
32 32 
33 $$33 $$
34- x' = (grid\_x + 1) / 2 * (H_{in} - 1)34+ x' = (grid\_x + 1) / 2 * (W_{in} - 1)
35 $$35 $$
36 36 
37 $$37 $$
38- y' = (grid\_y +1) / 2 * (W_{in} - 1)38+ y' = (grid\_y +1) / 2 * (H_{in} - 1)
39 $$39 $$
40 40 
41 - alignCorners=false,表示特征值位于像素的角点。41 - alignCorners=false,表示特征值位于像素的角点。
42 42 
43 $$43 $$
44- x' = ((grid\_x +1) * H_{in} - 1) / 244+ x' = ((grid\_x +1) * W_{in} - 1) / 2
45 $$45 $$
46 46 
47 $$47 $$
48- y' = ((grid\_y +1) * W_{in} - 1) / 248+ y' = ((grid\_y +1) * H_{in} - 1) / 2
49 $$49 $$
50 50 
51 - 对于超出范围的坐标,会根据paddingMode进行不同处理:51 - 对于超出范围的坐标,会根据paddingMode进行不同处理:
@@ -59,7 +59,7 @@
59 - interpolationMode=0,表示取(x, y)周围四个坐标的加权平均值。59 - interpolationMode=0,表示取(x, y)周围四个坐标的加权平均值。
60 60 
61 $$61 $$
62- output(N, C, H_{out}, W_{out}) = \sum_{i=0}^{2}\sum_{j=0}^{2}{w(i, j)} * {f(x', y')}62+ output(N, C, H_{out}, W_{out}) = \sum_{i=0}^{1}\sum_{j=0}^{1}{w(i, j)} * {f(x', y')}
63 $$63 $$
64 64 
65 其中:65 其中:
@@ -93,13 +93,13 @@
93 其中:93 其中:
94 94 
95 $$95 $$
96- H_{out} = min(round(x'), H - 1)\\96+ W_{out} = min(round(x'), W - 1)\\
97- H_{out} = max(round(x'), 0)97+ W_{out} = max(round(x'), 0)
98 $$98 $$
99 99 
100 $$100 $$
101- W_{out} = min(round(y'), W - 1)\\101+ H_{out} = min(round(y'), H - 1)\\
102- W_{out} = max(round(y'), 0)102+ H_{out} = max(round(y'), 0)
103 $$103 $$
104 104 
105 - interpolationMode=2,表示取(x, y)周围十六个坐标的加权平均值。105 - interpolationMode=2,表示取(x, y)周围十六个坐标的加权平均值。
@@ -179,7 +179,7 @@ aclnnStatus aclnnGridSampler2D(
179 <td>input(aclTensor*)</td>179 <td>input(aclTensor*)</td>
180 <td>输入</td>180 <td>输入</td>
181 <td>进行插值计算的输入张量,对应公式中描述的`input`。</td>181 <td>进行插值计算的输入张量,对应公式中描述的`input`。</td>
182- <td><ul><li>支持空Tensor。</li><li>支持shape为(N, C, <em style='font-size: 14px'>H</em><em style='font-size: 8px'>in</em>, <em style='font-size: 14px'>W</em><em style='font-size: 8px'>in</em>)。H*W < INT32的最大值。`input`的shape最后两维的维度值不能为0。</li></ul></td>182+ <td><ul><li>支持空Tensor。</li><li>支持shape为(N, C, H<sub>in</sub>, W<sub>in</sub>)。H*W < INT32的最大值。`input`的shape最后两维的维度值不能为0。</li></ul></td>
183 <td>FLOAT32、FLOAT16、DOUBLE、BFLOAT16</td>183 <td>FLOAT32、FLOAT16、DOUBLE、BFLOAT16</td>
184 <td>ND</td>184 <td>ND</td>
185 <td>4</td>185 <td>4</td>
@@ -189,7 +189,7 @@ aclnnStatus aclnnGridSampler2D(
189 <td>grid(aclTensor*)</td>189 <td>grid(aclTensor*)</td>
190 <td>输入</td>190 <td>输入</td>
191 <td>采样的网格,对应公式中描述的`grid`。</td>191 <td>采样的网格,对应公式中描述的`grid`。</td>
192- <td><ul><li>支持空Tensor。</li><li>数据类型与入参`input`的数据类型一致。</li><li>支持shape为(N, <em style='font-size: 14px'>H</em><em style='font-size: 8px'>out</em>, <em style='font-size: 14px'>W</em><em style='font-size: 8px'>out</em>, 2),且N与入参`input`的shape中的N一致。</li></ul></td>192+ <td><ul><li>支持空Tensor。</li><li>数据类型与入参`input`的数据类型一致。</li><li>支持shape为(N, H<sub>out</sub>, W<sub>out</sub>, 2),且N与入参`input`的shape中的N一致。</li></ul></td>
193 <td>FLOAT32、FLOAT16、DOUBLE、BFLOAT16</td>193 <td>FLOAT32、FLOAT16、DOUBLE、BFLOAT16</td>
194 <td>ND</td>194 <td>ND</td>
195 <td>4</td>195 <td>4</td>
@@ -229,7 +229,7 @@ aclnnStatus aclnnGridSampler2D(
229 <td>out(aclTensor*)</td>229 <td>out(aclTensor*)</td>
230 <td>输出</td>230 <td>输出</td>
231 <td>插值计算的最终输出结果,对应公式中描述的`output`。</td>231 <td>插值计算的最终输出结果,对应公式中描述的`output`。</td>
232- <td><ul><li>支持空Tensor。</li><li>数据类型与input的数据类型一致。</li><li>支持shape为(N, C, <em style='font-size: 14px'>H</em><em style='font-size: 8px'>out</em>, <em style='font-size: 14px'>W</em><em style='font-size: 8px'>out</em>),且N、C与input的shape中的N、C一致,<em style='font-size: 14px'>H</em><em style='font-size: 8px'>out</em>、<em style='font-size: 14px'>W</em><em style='font-size: 8px'>out</em>与grid的shape中的<em style='font-size: 14px'>H</em><em style='font-size: 8px'>out</em>、<em style='font-size: 14px'>W</em><em style='font-size: 8px'>out</em>一致。</li></ul></td>232+ <td><ul><li>支持空Tensor。</li><li>数据类型与input的数据类型一致。</li><li>支持shape为(N, C, H<sub>out</sub>, W<sub>out</sub>),且N、C与input的shape中的N、C一致,H<sub>out</sub>、W<sub>out</sub>与grid的shape中的H<sub>out</sub>、W<sub>out</sub>一致。</li></ul></td>
233 <td>FLOAT32、FLOAT16、DOUBLE、BFLOAT16</td>233 <td>FLOAT32、FLOAT16、DOUBLE、BFLOAT16</td>
234 <td>ND</td>234 <td>ND</td>
235 <td>4</td>235 <td>4</td>
@@ -262,17 +262,17 @@ aclnnStatus aclnnGridSampler2D(
262 - 入参`interpolationMode`不支持插值模式2:bicubic(双三次插值)。262 - 入参`interpolationMode`不支持插值模式2:bicubic(双三次插值)。
263 - 参数`input``grid``out`的数据类型不支持BFLOAT16。263 - 参数`input``grid``out`的数据类型不支持BFLOAT16。
264 - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>264 - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>
265- 265+ 
266 入参`interpolationMode`,仅当input数据类型为FLOAT32、FLOAT16或者BFLOAT16时,支持2:bicubic(双三次插值)。266 入参`interpolationMode`,仅当input数据类型为FLOAT32、FLOAT16或者BFLOAT16时,支持2:bicubic(双三次插值)。
267 - <term>Atlas 200I/500 A2 推理产品</term>267 - <term>Atlas 200I/500 A2 推理产品</term>
268- 268+ 
269 当接口运行在AI Core时,需要满足如下条件:269 当接口运行在AI Core时,需要满足如下条件:
270 - 入参`interpolationMode`为bilinear。270 - 入参`interpolationMode`为bilinear。
271 - 入参`paddingMode`为zeros。271 - 入参`paddingMode`为zeros。
272 - 参数`input``grid``out`的数据类型为FLOAT16。272 - 参数`input``grid``out`的数据类型为FLOAT16。
273 - 参数`input`的shape需要满足C维的值为32。273 - 参数`input`的shape需要满足C维的值为32。
274 - <term>Atlas 推理系列产品</term>274 - <term>Atlas 推理系列产品</term>
275- 275+ 
276 当接口运行在AI Core时,需要满足如下条件:276 当接口运行在AI Core时,需要满足如下条件:
277 - 入参`interpolationMode`为bilinear。277 - 入参`interpolationMode`为bilinear。
278 - 入参`paddingMode`为zeros。278 - 入参`paddingMode`为zeros。
@@ -283,7 +283,7 @@ aclnnStatus aclnnGridSampler2D(
283- **返回值**283- **返回值**
284 284 
285 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。285 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
286- 286+ 
287 第一段接口完成入参校验,出现以下场景时报错:287 第一段接口完成入参校验,出现以下场景时报错:
288 288 
289 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>289 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
Mimage/grid_sample/docs/aclnnGridSampler3D.md+14-14
@@ -17,7 +17,7 @@
17 17 
18- 接口功能:提供一个输入张量input,以及一个对应的grid网格,根据grid中每个位置提供的坐标信息,将input中对应位置的像素值填充到grid指定的位置,得到最终的输出。18- 接口功能:提供一个输入张量input,以及一个对应的grid网格,根据grid中每个位置提供的坐标信息,将input中对应位置的像素值填充到grid指定的位置,得到最终的输出。
19- 计算公式:19- 计算公式:
20- 20+ 
21 输入input、grid网格、输出output的尺寸如下:21 输入input、grid网格、输出output的尺寸如下:
22 22 
23 $$23 $$
@@ -32,7 +32,7 @@
32 - alignCorners=true,表示特征值位于像素中心。32 - alignCorners=true,表示特征值位于像素中心。
33 33 
34 $$34 $$
35- x' = (grid\_x + 1) / 2 * (D_{in} - 1)35+ x' = (grid\_x + 1) / 2 * (W_{in} - 1)
36 $$36 $$
37 37 
38 $$38 $$
@@ -40,13 +40,13 @@
40 $$40 $$
41 41 
42 $$42 $$
43- z' = (grid\_z +1) / 2 * (W_{in} - 1)43+ z' = (grid\_z +1) / 2 * (D_{in} - 1)
44 $$44 $$
45 45 
46 - alignCorners=false,表示特征值位于像素的角点。46 - alignCorners=false,表示特征值位于像素的角点。
47 47 
48 $$48 $$
49- x' = ((grid\_x +1) * D_{in} - 1) / 249+ x' = ((grid\_x +1) * W_{in} - 1) / 2
50 $$50 $$
51 51 
52 $$52 $$
@@ -54,7 +54,7 @@
54 $$54 $$
55 55 
56 $$56 $$
57- z' = ((grid\_z +1) * W_{in} - 1) / 257+ z' = ((grid\_z +1) * D_{in} - 1) / 2
58 $$58 $$
59 59 
60 - 对于超出范围的坐标,会根据paddingMode进行不同处理:60 - 对于超出范围的坐标,会根据paddingMode进行不同处理:
@@ -65,7 +65,7 @@
65 - interpolationMode="bilinear",表示取input中(x, y, z)周围八个坐标的加权平均值。65 - interpolationMode="bilinear",表示取input中(x, y, z)周围八个坐标的加权平均值。
66 66 
67 $$67 $$
68- {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')}68+ {output(N, C, D_{out}, H_{out}, W_{out})} = \sum_{i=0}^{1}\sum_{j=0}^{1}\sum_{k=0}^{1}{w(i, j, k)} * {f(x', y', z')}
69 $$69 $$
70 70 
71 其中:71 其中:
@@ -106,8 +106,8 @@
106 其中:106 其中:
107 107 
108 $$108 $$
109- D_{out} = min(round(x'), H - 1)\\109+ W_{out} = min(round(x'), W - 1)\\
110- D_{out} = max(round(x'), 0)110+ W_{out} = max(round(x'), 0)
111 $$111 $$
112 112 
113 $$113 $$
@@ -116,8 +116,8 @@
116 $$116 $$
117 117 
118 $$118 $$
119- W_{out} = min(round(z'), W - 1)\\119+ D_{out} = min(round(z'), D- 1)\\
120- W_{out} = max(round(z'), 0)120+ D_{out} = max(round(z'), 0)
121 $$121 $$
122 122 
123## 函数原型123## 函数原型
@@ -184,7 +184,7 @@ aclnnStatus aclnnGridSampler3D(
184 <td>grid(aclTensor*)</td>184 <td>grid(aclTensor*)</td>
185 <td>输入</td>185 <td>输入</td>
186 <td>采样的网格,对应公式中描述的`grid`。</td>186 <td>采样的网格,对应公式中描述的`grid`。</td>
187- <td><ul><li>支持空Tensor。</li><li>数据类型与入参`input`的数据类型一致。</li><li>支持shape为(N, <em style='font-size: 14px'>D</em><em style='font-size: 8px'>out</em>, <em style='font-size: 14px'>H</em><em style='font-size: 8px'>out</em>, <em style='font-size: 14px'>W</em><em style='font-size: 8px'>out</em>, 3),且N与入参`input`的shape中的N一致。</li></ul></td>187+ <td><ul><li>支持空Tensor。</li><li>数据类型与入参`input`的数据类型一致。</li><li>支持shape为(N, D<sub>out</sub>, H<sub>out</sub>, W<sub>out</sub>, 3),且N与入参`input`的shape中的N一致。</li></ul></td>
188 <td>FLOAT16、FLOAT32、DOUBLE、BFLOAT16</td>188 <td>FLOAT16、FLOAT32、DOUBLE、BFLOAT16</td>
189 <td>ND</td>189 <td>ND</td>
190 <td>5</td>190 <td>5</td>
@@ -254,13 +254,13 @@ aclnnStatus aclnnGridSampler3D(
254 </table>254 </table>
255 255 
256 - <term>Atlas 训练系列产品</term>256 - <term>Atlas 训练系列产品</term>
257- 257+ 
258 参数`input`、`grid`、`out`的数据类型不支持BFLOAT16。258 参数`input`、`grid`、`out`的数据类型不支持BFLOAT16。
259- 259+ 
260- **返回值**260- **返回值**
261 261 
262 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。262 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
263- 263+ 
264 第一段接口完成入参校验,出现以下场景时报错:264 第一段接口完成入参校验,出现以下场景时报错:
265 265 
266 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>266 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
Mimage/grid_sampler2_d_grad/README.md+18-18
@@ -19,7 +19,7 @@
19 1. 根据grid存储的(x, y)值,计算出映射到input上的坐标,这些坐标和align_corners、padding_mode有关。19 1. 根据grid存储的(x, y)值,计算出映射到input上的坐标,这些坐标和align_corners、padding_mode有关。
20 2. 根据输入的interpolationMode,选择使用bilinear、nearest、bicubic不同插值模式计算该坐标周围点分配到梯度的权重值。20 2. 根据输入的interpolationMode,选择使用bilinear、nearest、bicubic不同插值模式计算该坐标周围点分配到梯度的权重值。
21 3. 根据grad存储的梯度值乘上对应点的权重值,计算出最终dx、dgrid的结果。21 3. 根据grad存储的梯度值乘上对应点的权重值,计算出最终dx、dgrid的结果。
22- 22+ 
23- 计算公式:23- 计算公式:
24 24 
25 grad、input、grid、dx、dgrid的尺寸如下:25 grad、input、grid、dx、dgrid的尺寸如下:
@@ -32,7 +32,7 @@
32 $$32 $$
33 33 
34 其中grad、input、grid、dx、dgrid中的N均相同,grad、input和dx中的C相同,input和dx中的$H_{in}$、$W_{in}$相同,grad、grid和dgrid中的$H_{out}$、$W_{out}$相同,grid最后一维大小为2,表示input像素位置信息为(x, y)。x和y的取值范围归一化到[-1, 1],(-1, 1)表示左上角坐标,(1, -1)表示右下角坐标。34 其中grad、input、grid、dx、dgrid中的N均相同,grad、input和dx中的C相同,input和dx中的$H_{in}$、$W_{in}$相同,grad、grid和dgrid中的$H_{out}$、$W_{out}$相同,grid最后一维大小为2,表示input像素位置信息为(x, y)。x和y的取值范围归一化到[-1, 1],(-1, 1)表示左上角坐标,(1, -1)表示右下角坐标。
35- 35+ 
36 1. 坐标反归一化:36 1. 坐标反归一化:
37 grid中的(x, y)需要先反归一化到input像素坐标(ix, iy),同时计算梯度乘子`gix_mult`、`giy_mult`(用于后续dgrid计算):37 grid中的(x, y)需要先反归一化到input像素坐标(ix, iy),同时计算梯度乘子`gix_mult`、`giy_mult`(用于后续dgrid计算):
38 - align_corners = true:38 - align_corners = true:
@@ -59,7 +59,7 @@
59 59 
60 四个角点坐标和权重为:60 四个角点坐标和权重为:
61 61 
62- | 角点 | 坐标$(i_p, j_p)$ | 权重$w_p$ |62+ | 角点 | 坐标$(iy_p, ix_p)$ | 权重$w_p$ |
63 |:------:|:------:|:----------:|63 |:------:|:------:|:----------:|
64 | nw(西北) | $(iy_{nw}, ix_{nw})$ | $(ix_{se} - ix) × (iy_{se} - iy)$ |64 | nw(西北) | $(iy_{nw}, ix_{nw})$ | $(ix_{se} - ix) × (iy_{se} - iy)$ |
65 | ne(东北) | $(iy_{ne}, ix_{ne})$ | $(ix - ix_{sw}) × (iy_{sw} - iy)$ |65 | ne(东北) | $(iy_{ne}, ix_{ne})$ | $(ix - ix_{sw}) × (iy_{sw} - iy)$ |
@@ -82,7 +82,7 @@
82 - dx(input梯度):将上游梯度按权重散射到input对应位置82 - dx(input梯度):将上游梯度按权重散射到input对应位置
83 83 
84 $$84 $$
85- dx(N, C, i_p, j_p) \mathrel{+}= w_p \cdot grad(N, C, H_{out}, W_{out})85+ dx(N, C, iy_p, ix_p) \mathrel{+}= w_p \cdot grad(N, C, H_{out}, W_{out})
86 $$86 $$
87 87 
88 即对每个输出像素(h, w),将其梯度乘以双线性权重,累加到input的四个相邻像素位置(越界位置不累加)。88 即对每个输出像素(h, w),将其梯度乘以双线性权重,累加到input的四个相邻像素位置(越界位置不累加)。
@@ -96,7 +96,7 @@
96 giy = \sum_{c} \left[ -V_{nw} \cdot (ix_{se} - ix) - V_{ne} \cdot (ix - ix_{sw}) + V_{sw} \cdot (ix_{ne} - ix) + V_{se} \cdot (ix - ix_{nw}) \right] \cdot grad(N, C, H_{out}, W_{out})96 giy = \sum_{c} \left[ -V_{nw} \cdot (ix_{se} - ix) - V_{ne} \cdot (ix - ix_{sw}) + V_{sw} \cdot (ix_{ne} - ix) + V_{se} \cdot (ix - ix_{nw}) \right] \cdot grad(N, C, H_{out}, W_{out})
97 $$97 $$
98 98 
99- 其中 $V_p = input(N, C, i_p, j_p)$(仅当角点在边界内时参与计算)。99+ 其中 $V_p = input(N, C, iy_p, ix_p)$(仅当角点在边界内时参与计算)。
100 - 最终:100 - 最终:
101 101 
102 $$102 $$
@@ -127,44 +127,49 @@
127 127 
128 $(ix', iy') = (ix_{nw}-1+i, iy_{nw}-1+j)$,$i,j \in \{0,1,2,3\}$,越界位置根据padding_mode处理。128 $(ix', iy') = (ix_{nw}-1+i, iy_{nw}-1+j)$,$i,j \in \{0,1,2,3\}$,越界位置根据padding_mode处理。
129 129 
130+ $$
131+ tx = ix - floor(ix) \\
132+ ty = iy - floor(iy) \\
133+ $$
134+ 
130 $$135 $$
131 A = -0.75 \\136 A = -0.75 \\
132- x_0 = x + 1.0 \\137+ x_0 = tx + 1.0 \\
133 x\_coeffs[0] = ((A * x_0 - 5* A) * x_0 + 8 * A) * x_0 - 4 * A138 x\_coeffs[0] = ((A * x_0 - 5* A) * x_0 + 8 * A) * x_0 - 4 * A
134 $$139 $$
135 140 
136 $$141 $$
137- x_1 = x \\142+ x_1 = tx \\
138 x\_coeffs[1] = ((A + 2)* x_1 - (A + 3)) * x_1 * x_1 + 1143 x\_coeffs[1] = ((A + 2)* x_1 - (A + 3)) * x_1 * x_1 + 1
139 $$144 $$
140 145 
141 $$146 $$
142- x_2 = 1 - x \\147+ x_2 = 1 - tx \\
143 x\_coeffs[2] = ((A + 2)* x_2 - (A + 3)) * x_2 * x_2 + 1148 x\_coeffs[2] = ((A + 2)* x_2 - (A + 3)) * x_2 * x_2 + 1
144 $$149 $$
145 150 
146 $$151 $$
147- x_3 = 2 - x \\152+ x_3 = 2 - tx \\
148 x\_coeffs[3] = ((A * x_3 - 5* A) * x_3 + 8 * A) * x_3 - 4 * A153 x\_coeffs[3] = ((A * x_3 - 5* A) * x_3 + 8 * A) * x_3 - 4 * A
149 $$154 $$
150 155 
151 $$156 $$
152- y_0 = y + 1.0 \\157+ y_0 = ty + 1.0 \\
153 y\_coeffs[0] = ((A * y_0 - 5* A) * y_0 + 8 * A) * y_0 - 4 * A158 y\_coeffs[0] = ((A * y_0 - 5* A) * y_0 + 8 * A) * y_0 - 4 * A
154 $$159 $$
155 160 
156 $$161 $$
157- y_1 = y \\162+ y_1 = ty \\
158 y\_coeffs[1] = ((A + 2)* y_1 - (A + 3)) * y_1 * y_1 + 1163 y\_coeffs[1] = ((A + 2)* y_1 - (A + 3)) * y_1 * y_1 + 1
159 $$164 $$
160 165 
161 $$166 $$
162- y_2 = 1 - y \\167+ y_2 = 1 - ty \\
163 y\_coeffs[2] = ((A + 2)* y_2 - (A + 3)) * y_2 * y_2 + 1168 y\_coeffs[2] = ((A + 2)* y_2 - (A + 3)) * y_2 * y_2 + 1
164 $$169 $$
165 170 
166 $$171 $$
167- y_3 = 2 - y \\172+ y_3 = 2 - ty \\
168 y\_coeffs[3] = ((A * y_3 - 5* A) * y_3 + 8 * A) * y_3 - 4 * A173 y\_coeffs[3] = ((A * y_3 - 5* A) * y_3 + 8 * A) * y_3 - 4 * A
169 $$174 $$
170 175 
@@ -182,11 +187,6 @@
182 187 
183 $V_{ij} = get\_value\_bounded(input(N, C, H_{in}, W_{in}), ix_{nw}-1+i, iy_{nw}-1 +j)$,`x_coeffs_grad`和`y_coeffs_grad`是三次插值系数对tx/ty的导数:188 $V_{ij} = get\_value\_bounded(input(N, C, H_{in}, W_{in}), ix_{nw}-1+i, iy_{nw}-1 +j)$,`x_coeffs_grad`和`y_coeffs_grad`是三次插值系数对tx/ty的导数:
184 189 
185- $$
186- tx = ix - floor(ix) \\
187- ty = iy - floor(iy) \\
188- $$
189- 
190 $$190 $$
191 x\_coeffs\_grad[0] = (-3A \cdot x - 10A) \cdot x - 8A \\191 x\_coeffs\_grad[0] = (-3A \cdot x - 10A) \cdot x - 8A \\
192 \quad x = |-1 - tx|192 \quad x = |-1 - tx|
Mimage/grid_sampler2_d_grad/docs/aclnnGridSampler2DBackward.md+98-98
@@ -22,7 +22,7 @@
22 1. 根据grid存储的(x, y)值,计算出映射到input上的坐标,这些坐标和alignCorners、paddingMode有关。22 1. 根据grid存储的(x, y)值,计算出映射到input上的坐标,这些坐标和alignCorners、paddingMode有关。
23 2. 根据输入的interpolationMode,选择使用bilinear、nearest、bicubic不同插值模式计算该坐标周围点分配到梯度的权重值。23 2. 根据输入的interpolationMode,选择使用bilinear、nearest、bicubic不同插值模式计算该坐标周围点分配到梯度的权重值。
24 3. 根据grad存储的梯度值乘上对应点的权重值,计算出最终dx、dgrid的结果。24 3. 根据grad存储的梯度值乘上对应点的权重值,计算出最终dx、dgrid的结果。
25- 25+ 
26- 计算公式:26- 计算公式:
27 27 
28 grad、input、grid、dx、dgrid的尺寸如下:28 grad、input、grid、dx、dgrid的尺寸如下:
@@ -35,7 +35,7 @@
35 $$35 $$
36 36 
37 其中grad、input、grid、dx、dgrid中的N均相同,grad、input和dx中的C相同,input和dx中的$H_{in}$、$W_{in}$相同,grad、grid和dgrid中的$H_{out}$、$W_{out}$相同,grid最后一维大小为2,表示input像素位置信息为(x, y)。x和y的取值范围归一化到[-1, 1],(-1, 1)表示左上角坐标,(1, -1)表示右下角坐标。37 其中grad、input、grid、dx、dgrid中的N均相同,grad、input和dx中的C相同,input和dx中的$H_{in}$、$W_{in}$相同,grad、grid和dgrid中的$H_{out}$、$W_{out}$相同,grid最后一维大小为2,表示input像素位置信息为(x, y)。x和y的取值范围归一化到[-1, 1],(-1, 1)表示左上角坐标,(1, -1)表示右下角坐标。
38- 38+ 
39 1. 坐标反归一化:39 1. 坐标反归一化:
40 grid中的(x, y)需要先反归一化到input像素坐标(ix, iy),同时计算梯度乘子`gix_mult`、`giy_mult`(用于后续dgrid计算):40 grid中的(x, y)需要先反归一化到input像素坐标(ix, iy),同时计算梯度乘子`gix_mult`、`giy_mult`(用于后续dgrid计算):
41 - alignCorners = true:41 - alignCorners = true:
@@ -62,7 +62,7 @@
62 62 
63 四个角点坐标和权重为:63 四个角点坐标和权重为:
64 64 
65- | 角点 | 坐标$(i_p, j_p)$ | 权重$w_p$ |65+ | 角点 | 坐标$(iy_p, ix_p)$ | 权重$w_p$ |
66 |:------:|:------:|:----------:|66 |:------:|:------:|:----------:|
67 | nw (西北) | $(iy_{nw}, ix_{nw})$ | $(ix_{se} - ix) × (iy_{se} - iy)$ |67 | nw (西北) | $(iy_{nw}, ix_{nw})$ | $(ix_{se} - ix) × (iy_{se} - iy)$ |
68 | ne (东北) | $(iy_{ne}, ix_{ne})$ | $(ix - ix_{sw}) × (iy_{sw} - iy)$ |68 | ne (东北) | $(iy_{ne}, ix_{ne})$ | $(ix - ix_{sw}) × (iy_{sw} - iy)$ |
@@ -85,7 +85,7 @@
85 - dx(input梯度):将上游梯度按权重散射到input对应位置85 - dx(input梯度):将上游梯度按权重散射到input对应位置
86 86 
87 $$87 $$
88- dx(N, C, i_p, j_p) \mathrel{+}= w_p \cdot grad(N, C, H_{out}, W_{out})88+ dx(N, C, iy_p, ix_p) \mathrel{+}= w_p \cdot grad(N, C, H_{out}, W_{out})
89 $$89 $$
90 90 
91 即对每个输出像素(h, w),将其梯度乘以双线性权重,累加到input的四个相邻像素位置(越界位置不累加)。91 即对每个输出像素(h, w),将其梯度乘以双线性权重,累加到input的四个相邻像素位置(越界位置不累加)。
@@ -99,7 +99,7 @@
99 giy = \sum_{c} \left[ -V_{nw} \cdot (ix_{se} - ix) - V_{ne} \cdot (ix - ix_{sw}) + V_{sw} \cdot (ix_{ne} - ix) + V_{se} \cdot (ix - ix_{nw}) \right] \cdot grad(N, C, H_{out}, W_{out})99 giy = \sum_{c} \left[ -V_{nw} \cdot (ix_{se} - ix) - V_{ne} \cdot (ix - ix_{sw}) + V_{sw} \cdot (ix_{ne} - ix) + V_{se} \cdot (ix - ix_{nw}) \right] \cdot grad(N, C, H_{out}, W_{out})
100 $$100 $$
101 101 
102- 其中 $V_p = input(N, C, i_p, j_p)$(仅当角点在边界内时参与计算)。102+ 其中 $V_p = input(N, C, iy_p, ix_p)$(仅当角点在边界内时参与计算)。
103 103 
104 - 最终:104 - 最终:
105 105 
@@ -124,123 +124,123 @@
124 - Bicubic(双三次插值)124 - Bicubic(双三次插值)
125 - dx:125 - dx:
126 126 
127- $$127+ $$
128- dx(N, C, iy', ix') \mathrel{+}= grad(N, C, H_{out}, W_{out}) \cdot x\_coeffs[i] \cdot y\_coeffs[j]128+ dx(N, C, iy', ix') \mathrel{+}= grad(N, C, H_{out}, W_{out}) \cdot x\_coeffs[i] \cdot y\_coeffs[j]
129- $$129+ $$
130 130 
131- 其中:131+ 其中:
132 132 
133- $(ix', iy') = (ix_{nw}-1+i, iy_{nw}-1+j)$,$i,j \in \{0,1,2,3\}$,越界位置根据paddingMode处理。133+ $(ix', iy') = (ix_{nw}-1+i, iy_{nw}-1+j)$,$i,j \in \{0,1,2,3\}$,越界位置根据paddingMode处理。
134 134 
135- $$135+ $$
136- A = -0.75 \\136+ tx = ix - floor(ix) \\
137- x_0 = x + 1.0 \\137+ ty = iy - floor(iy) \\
138- x\_coeffs[0] = ((A * x_0 - 5* A) * x_0 + 8 * A) * x_0 - 4 * A138+ $$
139- $$
140 139 
141- $$140+ $$
142- x_1 = x \\141+ A = -0.75 \\
143- x\_coeffs[1] = ((A + 2)* x_1 - (A + 3)) * x_1 * x_1 + 1142+ x_0 = tx + 1.0 \\
144- $$143+ x\_coeffs[0] = ((A * x_0 - 5* A) * x_0 + 8 * A) * x_0 - 4 * A
144+ $$
145 145 
146- $$146+ $$
147- x_2 = 1 - x \\147+ x_1 = tx \\
148- x\_coeffs[2] = ((A + 2)* x_2 - (A + 3)) * x_2 * x_2 + 1148+ x\_coeffs[1] = ((A + 2)* x_1 - (A + 3)) * x_1 * x_1 + 1
149- $$149+ $$
150 150 
151- $$151+ $$
152- x_3 = 2 - x \\152+ x_2 = 1 - tx \\
153- x\_coeffs[3] = ((A * x_3 - 5* A) * x_3 + 8 * A) * x_3 - 4 * A153+ x\_coeffs[2] = ((A + 2)* x_2 - (A + 3)) * x_2 * x_2 + 1
154- $$154+ $$
155 155 
156- $$156+ $$
157- y_0 = y + 1.0 \\157+ x_3 = 2 - tx \\
158- y\_coeffs[0] = ((A * y_0 - 5* A) * y_0 + 8 * A) * y_0 - 4 * A158+ x\_coeffs[3] = ((A * x_3 - 5* A) * x_3 + 8 * A) * x_3 - 4 * A
159- $$159+ $$
160 160 
161- $$161+ $$
162- y_1 = y \\162+ y_0 = ty + 1.0 \\
163- y\_coeffs[1] = ((A + 2)* y_1 - (A + 3)) * y_1 * y_1 + 1163+ y\_coeffs[0] = ((A * y_0 - 5* A) * y_0 + 8 * A) * y_0 - 4 * A
164- $$164+ $$
165 165 
166- $$166+ $$
167- y_2 = 1 - y \\167+ y_1 = ty \\
168- y\_coeffs[2] = ((A + 2)* y_2 - (A + 3)) * y_2 * y_2 + 1168+ y\_coeffs[1] = ((A + 2)* y_1 - (A + 3)) * y_1 * y_1 + 1
169- $$169+ $$
170 170 
171- $$171+ $$
172- y_3 = 2 - y \\172+ y_2 = 1 - ty \\
173- y\_coeffs[3] = ((A * y_3 - 5* A) * y_3 + 8 * A) * y_3 - 4 * A173+ y\_coeffs[2] = ((A + 2)* y_2 - (A + 3)) * y_2 * y_2 + 1
174- $$174+ $$
175+ 
176+ $$
177+ y_3 = 2 - ty \\
178+ y\_coeffs[3] = ((A * y_3 - 5* A) * y_3 + 8 * A) * y_3 - 4 * A
179+ $$
175 180 
176 - dgrid:181 - dgrid:
177 182 
178- $$183+ $$
179- gix = -\sum_{C}\sum_{i=0}^{3}\sum_{j=0}^{3} V_{ij} \cdot x\_coeffs\_grad[i] \cdot y\_coeffs[j] \cdot grad(N, C, H_{out}, W_{out})184+ gix = -\sum_{C}\sum_{i=0}^{3}\sum_{j=0}^{3} V_{ij} \cdot x\_coeffs\_grad[i] \cdot y\_coeffs[j] \cdot grad(N, C, H_{out}, W_{out})
180- $$185+ $$
181 186 
182- $$187+ $$
183- giy = -\sum_{C}\sum_{i=0}^{3}\sum_{j=0}^{3} V_{ij} \cdot y\_coeffs\_grad[j] \cdot x\_coeffs[i] \cdot grad(N, C, H_{out}, W_{out})188+ giy = -\sum_{C}\sum_{i=0}^{3}\sum_{j=0}^{3} V_{ij} \cdot y\_coeffs\_grad[j] \cdot x\_coeffs[i] \cdot grad(N, C, H_{out}, W_{out})
184- $$189+ $$
185 190 
186- 其中:191+ 其中:
187 192 
188- $V_{ij} = get\_value\_bounded(input(N, C, H_{in}, W_{in}), ix_{nw}-1+i, iy_{nw}-1 +j)$,`x_coeffs_grad`和`y_coeffs_grad`是三次插值系数对tx/ty的导数:193+ $V_{ij} = get\_value\_bounded(input(N, C, H_{in}, W_{in}), ix_{nw}-1+i, iy_{nw}-1 +j)$,`x_coeffs_grad`和`y_coeffs_grad`是三次插值系数对tx/ty的导数:
189 194 
190- $$195+ $$
191- tx = ix - floor(ix) \\196+ x\_coeffs\_grad[0] = (-3A \cdot x - 10A) \cdot x - 8A \\
192- ty = iy - floor(iy) \\197+ \quad x = |-1 - tx|
193- $$198+ $$
194 199 
195- $$200+ $$
196- x\_coeffs\_grad[0] = (-3A \cdot x - 10A) \cdot x - 8A \\201+ x\_coeffs\_grad[1] = (-3(A+2) \cdot x - 2(A+3)) \cdot x \\
197- \quad x = |-1 - tx|202+ \quad x = | 0 - tx|
198- $$203+ $$
199 204 
200- $$205+ $$
201- x\_coeffs\_grad[1] = (-3(A+2) \cdot x - 2(A+3)) \cdot x \\206+ x\_coeffs\_grad[2] = (3(A+2) \cdot x - 2(A+3)) \cdot x \\
202- \quad x = | 0 - tx|207+ \quad x = |1 - tx|
203- $$208+ $$
204 209 
205- $$210+ $$
206- x\_coeffs\_grad[2] = (3(A+2) \cdot x - 2(A+3)) \cdot x \\211+ x\_coeffs\_grad[3] = (3A \cdot x - 10A) \cdot x + 8A \\
207- \quad x = |1 - tx|212+ \quad x = |2 - tx|
208- $$213+ $$
209 214 
210- $$215+ $$
211- x\_coeffs\_grad[3] = (3A \cdot x - 10A) \cdot x + 8A \\216+ y\_coeffs\_grad[0] = (-3A \cdot y - 10A) \cdot y - 8A \\
212- \quad x = |2 - tx|217+ \quad y = |-1 - ty|
213- $$218+ $$
214 219 
215- $$220+ $$
216- y\_coeffs\_grad[0] = (-3A \cdot y - 10A) \cdot y - 8A \\221+ y\_coeffs\_grad[1] = (-3(A+2) \cdot y - 2(A+3)) \cdot y \\
217- \quad y = |-1 - ty|222+ \quad y = | 0 - ty|
218- $$223+ $$
219 224 
220- $$225+ $$
221- y\_coeffs\_grad[1] = (-3(A+2) \cdot y - 2(A+3)) \cdot y \\226+ y\_coeffs\_grad[2] = (3(A+2) \cdot y - 2(A+3)) \cdot y \\
222- \quad y = | 0 - ty|227+ \quad y = |1 - ty|
223- $$228+ $$
224 229 
225- $$230+ $$
226- y\_coeffs\_grad[2] = (3(A+2) \cdot y - 2(A+3)) \cdot y \\231+ y\_coeffs\_grad[3] = (3A \cdot y - 10A) \cdot y + 8A \\
227- \quad y = |1 - ty|232+ \quad y = |2 - ty|
228- $$233+ $$
229 234 
230- $$235+ 最终:
231- y\_coeffs\_grad[3] = (3A \cdot y - 10A) \cdot y + 8A \\
232- \quad y = |2 - ty|
233- $$
234 236 
235- 最终:237+ $$
238+ dgrid(N, H_{out}, W_{out}, 0) = gix\_mult \cdot gix
239+ $$
236 240 
237- $$241+ $$
238- dgrid(N, H_{out}, W_{out}, 0) = gix\_mult \cdot gix242+ dgrid(N, H_{out}, W_{out}, 1) = giy\_mult \cdot giy
239- $$243+ $$
240- 
241- $$
242- dgrid(N, H_{out}, W_{out}, 1) = giy\_mult \cdot giy
243- $$
244 244 
245## 函数原型245## 函数原型
246 246 
@@ -409,13 +409,13 @@ aclnnStatus aclnnGridSampler2DBackward(
409 </table>409 </table>
410 410 
411 - <term>Atlas 训练系列产品</term>411 - <term>Atlas 训练系列产品</term>
412- 412+ 
413 参数`gradOutput`、`input`、`grid`、`inputGrad`、`gridGrad`的数据类型不支持BFLOAT16、DOUBLE。413 参数`gradOutput`、`input`、`grid`、`inputGrad`、`gridGrad`的数据类型不支持BFLOAT16、DOUBLE。
414 414 
415- **返回值**415- **返回值**
416 416 
417 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。417 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
418- 418+ 
419 第一段接口完成入参校验,出现以下场景时报错:419 第一段接口完成入参校验,出现以下场景时报错:
420 420 
421 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>421 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
@@ -460,7 +460,7 @@ aclnnStatus aclnnGridSampler2DBackward(
460 </tr>460 </tr>
461 <tr>461 <tr>
462 <td>input最后两维的维度值为0。</td>462 <td>input最后两维的维度值为0。</td>
463- </tr> 463+ </tr>
464 <tr>464 <tr>
465 <td>grid最后一维的值不等于2。</td>465 <td>grid最后一维的值不等于2。</td>
466 </tr>466 </tr>
Mimage/grid_sampler3_d_grad/README.md+12-12
@@ -19,11 +19,11 @@
19 1. 根据grid存储的(x, y, z)值,计算出映射到input上的坐标,这些坐标和align_corners、padding_mode有关。19 1. 根据grid存储的(x, y, z)值,计算出映射到input上的坐标,这些坐标和align_corners、padding_mode有关。
20 2. 坐标根据输入的interpolation_mode,选择使用bilinear、nearest不同插值模式计算输出值。20 2. 坐标根据输入的interpolation_mode,选择使用bilinear、nearest不同插值模式计算输出值。
21 3. 根据grad存储的梯度值乘上对应点的权重值,计算出最终dx、dgrid的结果。21 3. 根据grad存储的梯度值乘上对应点的权重值,计算出最终dx、dgrid的结果。
22- 22+ 
23- 计算公式:23- 计算公式:
24- 24+ 
25 grad、input、grid、dx、dgrid的尺寸如下:25 grad、input、grid、dx、dgrid的尺寸如下:
26- 26+ 
27 $$27 $$
28 grad: (N, C, D_{out}, H_{out}, W_{out})\\28 grad: (N, C, D_{out}, H_{out}, W_{out})\\
29 input: (N, C, D_{in}, H_{in}, W_{in})\\29 input: (N, C, D_{in}, H_{in}, W_{in})\\
@@ -32,10 +32,10 @@
32 dgrid: (N, D_{out}, H_{out}, W_{out}, 3)32 dgrid: (N, D_{out}, H_{out}, W_{out}, 3)
33 $$33 $$
34 34 
35- 其中grad、input、grid、dx、dgrid中的N是一致的,grad、input和dx中的C是一致的,input和dx中的$D_{in}$、$H_{in}$、$W_{in}$是一致的,grad、grid和dgrid中的$D_{out}$、$H_{out}$、$W_{out}$一致的,grid最后一维大小为3,表示input像素位置信息为(x, y, z),会将x、y、z的取值范围归一化到[-1, 1]之间。35+ 其中grad、input、grid、dx、dgrid中的N是一致的,grad、input和dx中的C是一致的,input和dx中的$D_{in}$、$H_{in}$、$W_{in}$是一致的,grad、grid和dgrid中的$D_{out}$、$H_{out}$、$W_{out}$一致的,grid最后一维大小为3,表示input像素位置信息为(x, y, z),会将x、y、z的取值范围归一化到[-1, 1]之间。
36 36 
37 1. 坐标反归一化:37 1. 坐标反归一化:
38- 38+ 
39 grid中的(x, y, z)需要先反归一化到input像素坐标(ix, iy, iz),同时计算梯度乘子`gix_mult`、`giy_mult`、`giz_mult`(用于后续dgrid计算):39 grid中的(x, y, z)需要先反归一化到input像素坐标(ix, iy, iz),同时计算梯度乘子`gix_mult`、`giy_mult`、`giz_mult`(用于后续dgrid计算):
40 - align_corners = true:40 - align_corners = true:
41 41 
@@ -63,7 +63,7 @@
63 63 
64 四个角点坐标和权重为:64 四个角点坐标和权重为:
65 65 
66- | 角点 | 坐标$(i_p, j_p, k_p)$ | 权重$w_p$ |66+ | 角点 | 坐标$(iz_p, iy_p, ix_p)$ | 权重$w_p$ |
67 |:------:|:------:|:----------:|67 |:------:|:------:|:----------:|
68 | tnw(顶-北-西) | $(⌊iz⌋, ⌊iy⌋, ⌊ix⌋)$ | $(ix_{bse} - ix) × (iy_{bse} - iy) × (iz_{bse} - iz)$ |68 | tnw(顶-北-西) | $(⌊iz⌋, ⌊iy⌋, ⌊ix⌋)$ | $(ix_{bse} - ix) × (iy_{bse} - iy) × (iz_{bse} - iz)$ |
69 | tne(顶-北-东) | $(⌊iz⌋, ⌊iy⌋, ⌊ix⌋+1)$ | $(ix - ix_{bsw}) × (iy_{bsw} - iy) × (iz_{bsw} - iz)$ |69 | tne(顶-北-东) | $(⌊iz⌋, ⌊iy⌋, ⌊ix⌋+1)$ | $(ix - ix_{bsw}) × (iy_{bsw} - iy) × (iz_{bsw} - iz)$ |
@@ -73,7 +73,7 @@
73 | bne(底-北-东) | $(⌊iz⌋+1, ⌊iy⌋, ⌊ix⌋+1)$ | $(ix - ix_{tsw}) × (iy_{tsw} - iy) × (iz - iz_{tsw})$ |73 | bne(底-北-东) | $(⌊iz⌋+1, ⌊iy⌋, ⌊ix⌋+1)$ | $(ix - ix_{tsw}) × (iy_{tsw} - iy) × (iz - iz_{tsw})$ |
74 | bsw(底-南-西) | $(⌊iz⌋+1, ⌊iy⌋+1, ⌊ix⌋)$ | $(ix_{tne} - ix) × (iy - iy_{tne}) × (iz - iz_{tne})$ |74 | bsw(底-南-西) | $(⌊iz⌋+1, ⌊iy⌋+1, ⌊ix⌋)$ | $(ix_{tne} - ix) × (iy - iy_{tne}) × (iz - iz_{tne})$ |
75 | bse(底-南-东) | $(⌊iz⌋+1, ⌊iy⌋+1, ⌊ix⌋+1)$ | $(ix - ix_{tnw}) × (iy - iy_{tnw}) × (iz - iz_{tnw})$ |75 | bse(底-南-东) | $(⌊iz⌋+1, ⌊iy⌋+1, ⌊ix⌋+1)$ | $(ix - ix_{tnw}) × (iy - iy_{tnw}) × (iz - iz_{tnw})$ |
76- 76+ 
77 其中:77 其中:
78 78 
79 $$79 $$
@@ -125,9 +125,9 @@
125 $$125 $$
126 126 
127 - dx(input梯度):将上游梯度按三线性权重散射到input对应位置127 - dx(input梯度):将上游梯度按三线性权重散射到input对应位置
128- 128+ 
129 $$129 $$
130- dx(N, C, i_p, j_p, k_p) \mathrel{+}= w_p \cdot grad(N, C, D_{out}, H_{out}, W_{out})130+ dx(N, C, iz_p, iy_p, ix_p) \mathrel{+}= w_p \cdot grad(N, C, D_{out}, H_{out}, W_{out})
131 $$131 $$
132 132 
133 即对每个输出像素(d, h, w),将其梯度乘以三线性权重,累加到input的8个相邻体素位置(越界位置不累加)。133 即对每个输出像素(d, h, w),将其梯度乘以三线性权重,累加到input的8个相邻体素位置(越界位置不累加)。
@@ -145,7 +145,7 @@
145 giz = \sum_{c} \left[ -V_{tnw} \cdot (ix_{bse}-ix)(iy_{bse}-iy) - V_{tne} \cdot (ix-ix_{bsw})(iy_{bsw}-iy) - V_{tsw} \cdot (ix_{bne}-ix)(iy-iy_{bne}) - V_{tse} \cdot (ix-ix_{bnw})(iy-iy_{bnw}) + V_{bnw} \cdot (ix_{tse}-ix)(iy_{tse}-iy) + V_{bne} \cdot (ix-ix_{tsw})(iy_{tsw}-iy) + V_{bsw} \cdot (ix_{tne}-ix)(iy-iy_{tne}) + V_{bse} \cdot (ix-ix_{tnw})(iy-iy_{tnw}) \right] \cdot grad(N, C, D_{out}, H_{out}, W_{out})145 giz = \sum_{c} \left[ -V_{tnw} \cdot (ix_{bse}-ix)(iy_{bse}-iy) - V_{tne} \cdot (ix-ix_{bsw})(iy_{bsw}-iy) - V_{tsw} \cdot (ix_{bne}-ix)(iy-iy_{bne}) - V_{tse} \cdot (ix-ix_{bnw})(iy-iy_{bnw}) + V_{bnw} \cdot (ix_{tse}-ix)(iy_{tse}-iy) + V_{bne} \cdot (ix-ix_{tsw})(iy_{tsw}-iy) + V_{bsw} \cdot (ix_{tne}-ix)(iy-iy_{tne}) + V_{bse} \cdot (ix-ix_{tnw})(iy-iy_{tnw}) \right] \cdot grad(N, C, D_{out}, H_{out}, W_{out})
146 $$146 $$
147 147 
148- 其中 $V_p = input(N, C, i_p, j_p, k_p)$(仅当角点在边界内时参与计算)。148+ 其中 $V_p = input(N, C, iz_p, iy_p, ix_p)$(仅当角点在边界内时参与计算)。
149 - 最终:149 - 最终:
150 150 
151 $$151 $$
@@ -157,7 +157,7 @@
157 $$157 $$
158 158 
159 $$159 $$
160- dgrid(N, D_{out}, H_{out}, W_{out}, 2) = giy\_mult \cdot giz160+ dgrid(N, D_{out}, H_{out}, W_{out}, 2) = giz\_mult \cdot giz
161 $$161 $$
162 162 
163 - Nearest(最邻近插值)163 - Nearest(最邻近插值)
@@ -204,7 +204,7 @@
204 <tr>204 <tr>
205 <td>grid</td>205 <td>grid</td>
206 <td>输入</td>206 <td>输入</td>
207- <td>表示采像素位置的张量,对应公式描述中的`grid`。shape仅支持五维,且需满足`grid`和`grad`的N轴、D轴、H轴、W轴的值保持一致,最后一维的值等于3。</td>207+ <td>表示采像素位置的张量,对应公式描述中的`grid`。shape仅支持五维,且需满足`grid`和`grad`的N轴、D轴、H轴、W轴的值保持一致,最后一维的值等于3。</td>
208 <td>FLOAT16、FLOAT32、DOUBLE、BFLOAT16</td>208 <td>FLOAT16、FLOAT32、DOUBLE、BFLOAT16</td>
209 <td>NDHWC</td>209 <td>NDHWC</td>
210 </tr>210 </tr>
Mimage/grid_sampler3_d_grad/docs/aclnnGridSampler3DBackward.md+14-14
@@ -21,11 +21,11 @@
21 1. 根据grid存储的(x, y, z)值,计算出映射到input上的坐标,这些坐标和alignCorners、paddingMode有关。21 1. 根据grid存储的(x, y, z)值,计算出映射到input上的坐标,这些坐标和alignCorners、paddingMode有关。
22 2. 坐标根据输入的interpolationMode,选择使用bilinear、nearest不同插值模式计算输出值。22 2. 坐标根据输入的interpolationMode,选择使用bilinear、nearest不同插值模式计算输出值。
23 3. 根据grad存储的梯度值乘上对应点的权重值,计算出最终dx、dgrid的结果。23 3. 根据grad存储的梯度值乘上对应点的权重值,计算出最终dx、dgrid的结果。
24- 24+ 
25- 计算公式:25- 计算公式:
26- 26+ 
27 grad、input、grid、dx、dgrid的尺寸如下:27 grad、input、grid、dx、dgrid的尺寸如下:
28- 28+ 
29 $$29 $$
30 grad: (N, C, D_{out}, H_{out}, W_{out})\\30 grad: (N, C, D_{out}, H_{out}, W_{out})\\
31 input: (N, C, D_{in}, H_{in}, W_{in})\\31 input: (N, C, D_{in}, H_{in}, W_{in})\\
@@ -34,10 +34,10 @@
34 dgrid: (N, D_{out}, H_{out}, W_{out}, 3)34 dgrid: (N, D_{out}, H_{out}, W_{out}, 3)
35 $$35 $$
36 36 
37- 其中grad、input、grid、dx、dgrid中的N是一致的,grad、input和dx中的C是一致的,input和dx中的$D_{in}$、$H_{in}$、$W_{in}$是一致的,grad、grid和dgrid中的$D_{out}$、$H_{out}$、$W_{out}$一致的,grid最后一维大小为3,表示input像素位置信息为(x, y, z),会将x、y、z的取值范围归一化到[-1, 1]之间。37+ 其中grad、input、grid、dx、dgrid中的N是一致的,grad、input和dx中的C是一致的,input和dx中的$D_{in}$、$H_{in}$、$W_{in}$是一致的,grad、grid和dgrid中的$D_{out}$、$H_{out}$、$W_{out}$一致的,grid最后一维大小为3,表示input像素位置信息为(x, y, z),会将x、y、z的取值范围归一化到[-1, 1]之间。
38 38 
39 1. 坐标反归一化:39 1. 坐标反归一化:
40- 40+ 
41 grid中的(x, y, z)需要先反归一化到input像素坐标(ix, iy, iz),同时计算梯度乘子`gix_mult`、`giy_mult`、`giz_mult`(用于后续dgrid计算):41 grid中的(x, y, z)需要先反归一化到input像素坐标(ix, iy, iz),同时计算梯度乘子`gix_mult`、`giy_mult`、`giz_mult`(用于后续dgrid计算):
42 - alignCorners = true:42 - alignCorners = true:
43 43 
@@ -55,7 +55,7 @@
55 iz = \frac{(z+1) \cdot D_{in} - 1}{2}, \quad giz\_mult = \frac{D_{in}}{2}55 iz = \frac{(z+1) \cdot D_{in} - 1}{2}, \quad giz\_mult = \frac{D_{in}}{2}
56 $$56 $$
57 57 
58- 2. padding_mode对梯度乘子的影响:58+ 2. paddingMode对梯度乘子的影响:
59 - paddingMode="zeros",`gix_mult`不变59 - paddingMode="zeros",`gix_mult`不变
60 - paddingMode="border",$gix\_mult = gix\_mult × grad\_clip$(坐标在边界外时grad_clip=0,否则=1)60 - paddingMode="border",$gix\_mult = gix\_mult × grad\_clip$(坐标在边界外时grad_clip=0,否则=1)
61 - paddingMode="reflection",$gix\_mult = gix\_mult × grad\_refl × grad\_clip$(grad_refl是反射坐标变换函数对输入坐标的导数,表示反射后输出坐标随输入坐标变化的方向和速率。取值为-1,0,1)。61 - paddingMode="reflection",$gix\_mult = gix\_mult × grad\_refl × grad\_clip$(grad_refl是反射坐标变换函数对输入坐标的导数,表示反射后输出坐标随输入坐标变化的方向和速率。取值为-1,0,1)。
@@ -65,7 +65,7 @@
65 65 
66 四个角点坐标和权重为:66 四个角点坐标和权重为:
67 67 
68- | 角点 | 坐标$(i_p, j_p, k_p)$ | 权重$w_p$ |68+ | 角点 | 坐标$(iz_p, iy_p, ix_p)$ | 权重$w_p$ |
69 |:------:|:------:|:----------:|69 |:------:|:------:|:----------:|
70 | tnw(顶-北-西) | $(⌊iz⌋, ⌊iy⌋, ⌊ix⌋)$ | $(ix_{bse} - ix) × (iy_{bse} - iy) × (iz_{bse} - iz)$ |70 | tnw(顶-北-西) | $(⌊iz⌋, ⌊iy⌋, ⌊ix⌋)$ | $(ix_{bse} - ix) × (iy_{bse} - iy) × (iz_{bse} - iz)$ |
71 | tne(顶-北-东) | $(⌊iz⌋, ⌊iy⌋, ⌊ix⌋+1)$ | $(ix - ix_{bsw}) × (iy_{bsw} - iy) × (iz_{bsw} - iz)$ |71 | tne(顶-北-东) | $(⌊iz⌋, ⌊iy⌋, ⌊ix⌋+1)$ | $(ix - ix_{bsw}) × (iy_{bsw} - iy) × (iz_{bsw} - iz)$ |
@@ -75,7 +75,7 @@
75 | bne(底-北-东) | $(⌊iz⌋+1, ⌊iy⌋, ⌊ix⌋+1)$ | $(ix - ix_{tsw}) × (iy_{tsw} - iy) × (iz - iz_{tsw})$ |75 | bne(底-北-东) | $(⌊iz⌋+1, ⌊iy⌋, ⌊ix⌋+1)$ | $(ix - ix_{tsw}) × (iy_{tsw} - iy) × (iz - iz_{tsw})$ |
76 | bsw(底-南-西) | $(⌊iz⌋+1, ⌊iy⌋+1, ⌊ix⌋)$ | $(ix_{tne} - ix) × (iy - iy_{tne}) × (iz - iz_{tne})$ |76 | bsw(底-南-西) | $(⌊iz⌋+1, ⌊iy⌋+1, ⌊ix⌋)$ | $(ix_{tne} - ix) × (iy - iy_{tne}) × (iz - iz_{tne})$ |
77 | bse(底-南-东) | $(⌊iz⌋+1, ⌊iy⌋+1, ⌊ix⌋+1)$ | $(ix - ix_{tnw}) × (iy - iy_{tnw}) × (iz - iz_{tnw})$ |77 | bse(底-南-东) | $(⌊iz⌋+1, ⌊iy⌋+1, ⌊ix⌋+1)$ | $(ix - ix_{tnw}) × (iy - iy_{tnw}) × (iz - iz_{tnw})$ |
78- 78+ 
79 其中:79 其中:
80 80 
81 $$81 $$
@@ -129,7 +129,7 @@
129 - dx(input梯度):将上游梯度按三线性权重散射到input对应位置129 - dx(input梯度):将上游梯度按三线性权重散射到input对应位置
130 130 
131 $$131 $$
132- dx(N, C, i_p, j_p, k_p) \mathrel{+}= w_p \cdot grad(N, C, D_{out}, H_{out}, W_{out})132+ dx(N, C, iz_p, iy_p, ix_p) \mathrel{+}= w_p \cdot grad(N, C, D_{out}, H_{out}, W_{out})
133 $$133 $$
134 134 
135 即对每个输出像素(d, h, w),将其梯度乘以三线性权重,累加到input的8个相邻体素位置(越界位置不累加)。135 即对每个输出像素(d, h, w),将其梯度乘以三线性权重,累加到input的8个相邻体素位置(越界位置不累加)。
@@ -147,7 +147,7 @@
147 giz = \sum_{c} \left[ -V_{tnw} \cdot (ix_{bse}-ix)(iy_{bse}-iy) - V_{tne} \cdot (ix-ix_{bsw})(iy_{bsw}-iy) - V_{tsw} \cdot (ix_{bne}-ix)(iy-iy_{bne}) - V_{tse} \cdot (ix-ix_{bnw})(iy-iy_{bnw}) + V_{bnw} \cdot (ix_{tse}-ix)(iy_{tse}-iy) + V_{bne} \cdot (ix-ix_{tsw})(iy_{tsw}-iy) + V_{bsw} \cdot (ix_{tne}-ix)(iy-iy_{tne}) + V_{bse} \cdot (ix-ix_{tnw})(iy-iy_{tnw}) \right] \cdot grad(N, C, D_{out}, H_{out}, W_{out})147 giz = \sum_{c} \left[ -V_{tnw} \cdot (ix_{bse}-ix)(iy_{bse}-iy) - V_{tne} \cdot (ix-ix_{bsw})(iy_{bsw}-iy) - V_{tsw} \cdot (ix_{bne}-ix)(iy-iy_{bne}) - V_{tse} \cdot (ix-ix_{bnw})(iy-iy_{bnw}) + V_{bnw} \cdot (ix_{tse}-ix)(iy_{tse}-iy) + V_{bne} \cdot (ix-ix_{tsw})(iy_{tsw}-iy) + V_{bsw} \cdot (ix_{tne}-ix)(iy-iy_{tne}) + V_{bse} \cdot (ix-ix_{tnw})(iy-iy_{tnw}) \right] \cdot grad(N, C, D_{out}, H_{out}, W_{out})
148 $$148 $$
149 149 
150- 其中 $V_p = input(N, C, i_p, j_p, k_p)$(仅当角点在边界内时参与计算)。150+ 其中 $V_p = input(N, C, iz_p, iy_p, ix_p)$(仅当角点在边界内时参与计算)。
151 - 最终:151 - 最终:
152 152 
153 $$153 $$
@@ -159,7 +159,7 @@
159 $$159 $$
160 160 
161 $$161 $$
162- dgrid(N, D_{out}, H_{out}, W_{out}, 2) = giy\_mult \cdot giz162+ dgrid(N, D_{out}, H_{out}, W_{out}, 2) = giz\_mult \cdot giz
163 $$163 $$
164 164 
165 - Nearest(最邻近插值)165 - Nearest(最邻近插值)
@@ -247,7 +247,7 @@ aclnnStatus aclnnGridSampler3DBackward(
247 <tr>247 <tr>
248 <td>grid(aclTensor*)</td>248 <td>grid(aclTensor*)</td>
249 <td>输入</td>249 <td>输入</td>
250- <td>表示采像素位置的张量,对应公式描述中的`grid`。</td>250+ <td>表示采像素位置的张量,对应公式描述中的`grid`。</td>
251 <td><ul><li>支持空Tensor。</li><li>数据类型与`input`的数据类型一致。</li><li>`grid`和`gradOutput`的N轴、D轴、H轴、W轴的值保持一致,C轴的值必须为3。</li></ul></td>251 <td><ul><li>支持空Tensor。</li><li>数据类型与`input`的数据类型一致。</li><li>`grid`和`gradOutput`的N轴、D轴、H轴、W轴的值保持一致,C轴的值必须为3。</li></ul></td>
252 <td>BFLOAT16、FLOAT16、FLOAT32、DOUBLE</td>252 <td>BFLOAT16、FLOAT16、FLOAT32、DOUBLE</td>
253 <td>NDHWC</td>253 <td>NDHWC</td>
@@ -338,13 +338,13 @@ aclnnStatus aclnnGridSampler3DBackward(
338 </table>338 </table>
339 339 
340 - <term>Atlas 训练系列产品</term>340 - <term>Atlas 训练系列产品</term>
341- 341+ 
342 参数`gradOutput`、`input`、`grid`、`inputGrad`、`gridGrad`的数据类型不支持BFLOAT16。342 参数`gradOutput`、`input`、`grid`、`inputGrad`、`gridGrad`的数据类型不支持BFLOAT16。
343 343 
344- **返回值**344- **返回值**
345 345 
346 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。346 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
347- 347+ 
348 第一段接口完成入参校验,出现以下场景时报错:348 第一段接口完成入参校验,出现以下场景时报错:
349 349 
350 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>350 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
Mimage/rasterizer/README.md+35-35
@@ -19,62 +19,62 @@
19 19 
20 $findices$记录每个像素点最小深度对应的面索引,$barycentric$记录每个顶点相对于$findices$中记录的面的重心坐标透视矫正插值。20 $findices$记录每个像素点最小深度对应的面索引,$barycentric$记录每个顶点相对于$findices$中记录的面的重心坐标透视矫正插值。
21 计算过程中使用的Z-Buffer记录每个像素点$(x, y)$的最小深度$z_{\min}(x, y)$以及该深度对应的三角形面片索引$\text{face\_idx}(x, y)$。21 计算过程中使用的Z-Buffer记录每个像素点$(x, y)$的最小深度$z_{\min}(x, y)$以及该深度对应的三角形面片索引$\text{face\_idx}(x, y)$。
22- 22+ 
23 计算过程如下:23 计算过程如下:
24 对空间中的每个三角形面片$f$:24 对空间中的每个三角形面片$f$:
25- 25+ 
26 1. 将$f$的三个顶点坐标$(v_0, v_1, v_2)$转换为屏幕坐标$(v_{s0}, v_{s1}, v_{s2})$26 1. 将$f$的三个顶点坐标$(v_0, v_1, v_2)$转换为屏幕坐标$(v_{s0}, v_{s1}, v_{s2})$
27 2. 根据$(v_{s0}, v_{s1}, v_{s2})$计算包围$f$的矩形范围27 2. 根据$(v_{s0}, v_{s1}, v_{s2})$计算包围$f$的矩形范围
28 3. 对矩形内每个像素点$v_i = (x_i, y_i)$,执行以下操作:28 3. 对矩形内每个像素点$v_i = (x_i, y_i)$,执行以下操作:
29 29 
30- a. 计算像素中心坐标$v_c$ 30+ a. 计算像素中心坐标$v_c$
31- b. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$ 31+ b. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$
32 c. 根据$(\alpha, \beta, \gamma)$判断$v_c$是否在三角形内部。若$v_c$不在三角形内部,则处理矩形内下个像素点,否则执行下述步骤32 c. 根据$(\alpha, \beta, \gamma)$判断$v_c$是否在三角形内部。若$v_c$不在三角形内部,则处理矩形内下个像素点,否则执行下述步骤
33 d. 使用$(\alpha, \beta, \gamma)$和$(v_{s0}, v_{s1}, v_{s2})$得到当前像素的深度值depth33 d. 使用$(\alpha, \beta, \gamma)$和$(v_{s0}, v_{s1}, v_{s2})$得到当前像素的深度值depth
34- e. 若启用了深度先验;否则,直接执行下一步“Z-Buffer更新”34+ e. 若启用了深度先验,则使用深度先验图计算深度阈值depth_thres;否则,直接执行下一步“Z-Buffer更新”
35 35 
36- - 使用深度先验图计算深度阈值depth_thres36+ - 使用深度先验图计算深度阈值depth_thres
37- - 如果depth < depth_thres,处理矩形内下个像素点,否则执行下述步骤37+ - 如果depth < depth_thres,处理矩形内下个像素点,否则执行下述步骤
38 38 
39 f. Z-Buffer更新:39 f. Z-Buffer更新:
40- 40+ 
41- - 若$depth < z_{\min}(x_i, y_i)$:41+ - 若$depth < z_{\min}(x_i, y_i)$:
42- 42+ 
43- $$43+ $$
44- \quad z_{\min}(x_i, y_i) \gets \text{depth} \\44+ \quad z_{\min}(x_i, y_i) \gets \text{depth} \\
45- \quad \text{face\_idx}(x_i, y_i) \gets f45+ \quad \text{face\_idx}(x_i, y_i) \gets f
46- $$46+ $$
47- 47+ 
48- - 若$depth = z_{\min}(x_i, y_i)$:48+ - 若$depth = z_{\min}(x_i, y_i)$:
49- 49+ 
50- $$50+ $$
51- \quad \text{face\_idx}(x_i, y_i) \gets \min(\text{face\_idx}(x_i, y_i),\ f)51+ \quad \text{face\_idx}(x_i, y_i) \gets \min(\text{face\_idx}(x_i, y_i),\ f)
52- $$52+ $$
53- 53+ 
54 按上述步骤对空间中所有的三角形面片进行处理后,对大小为$height * width$的屏幕上每个像素点$v_i = (x_i, y_i)$:54 按上述步骤对空间中所有的三角形面片进行处理后,对大小为$height * width$的屏幕上每个像素点$v_i = (x_i, y_i)$:
55- 55+ 
56 1. 取Z-Buffer中$v_i$对应的面片索引$f_{idx}$,$findices (x_i, y_i) \gets f_{idx}$56 1. 取Z-Buffer中$v_i$对应的面片索引$f_{idx}$,$findices (x_i, y_i) \gets f_{idx}$
57 2. 将$f$的三个顶点坐标$(v_0, v_1, v_2)$转换为屏幕坐标$(v_{s0}, v_{s1}, v_{s2})$57 2. 将$f$的三个顶点坐标$(v_0, v_1, v_2)$转换为屏幕坐标$(v_{s0}, v_{s1}, v_{s2})$
58 3. 计算$v_i$的中心点坐标$v_c$58 3. 计算$v_i$的中心点坐标$v_c$
59 4. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$59 4. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$
60 5. 使用$(\alpha, \beta, \gamma)$计算透视矫正插值$(\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$60 5. 使用$(\alpha, \beta, \gamma)$计算透视矫正插值$(\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$
61 6. $barycentric(x_i, y_i) \gets (\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$61 6. $barycentric(x_i, y_i) \gets (\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$
62- 62+ 
63 以下是涉及的各种具体计算方法:63 以下是涉及的各种具体计算方法:
64- 64+ 
65 - 顶点$v = (x, y, z, w)$转换为屏幕坐标$v_s = (x_s, y_s, z_s)$65 - 顶点$v = (x, y, z, w)$转换为屏幕坐标$v_s = (x_s, y_s, z_s)$
66- 66+ 
67 $$67 $$
68 x_s = (x / w * 0.5 + 0.5) * (width - 1) + 0.5\\68 x_s = (x / w * 0.5 + 0.5) * (width - 1) + 0.5\\
69 y_s = (0.5 + 0.5 * y / w) * (height - 1) + 0.5\\69 y_s = (0.5 + 0.5 * y / w) * (height - 1) + 0.5\\
70 z_s = z / w * 0.49999 + 0.570 z_s = z / w * 0.49999 + 0.5
71 $$71 $$
72- 72+ 
73 - 点$v$相对于三角形 $(v_0, v_1, v_2)$的重心坐标$(\alpha, \beta, \gamma)$73 - 点$v$相对于三角形 $(v_0, v_1, v_2)$的重心坐标$(\alpha, \beta, \gamma)$
74- 74+ 
75- 1. 分别计算计算三角形$(v_0, v_1, v_2)$、$(v_0, v, v_2)$和$(v_0, v_1, v)$的有向面积$area$、$beta\_tri$和$gamma\_tri$75+ 1. 分别计算三角形$(v_0, v_1, v_2)$、$(v_0, v, v_2)$和$(v_0, v_1, v)$的有向面积$area$、$beta\_tri$和$gamma\_tri$
76 2. 若$area$为0,则$\alpha = \beta = \gamma = -1$,否则76 2. 若$area$为0,则$\alpha = \beta = \gamma = -1$,否则
77- 77+ 
78 $$78 $$
79 \beta = beta\_tri / area\\79 \beta = beta\_tri / area\\
80 \gamma = gamma\_tri / area\\80 \gamma = gamma\_tri / area\\
@@ -82,23 +82,23 @@
82 $$82 $$
83 83 
84 - 由顶点$v_0 = (x_0, y_0, z_0)$,$v_1 = (x_1, y_1, z_1)$和$v_2 = (x_2, y_2, z_2)$组成的三角形的有向面积84 - 由顶点$v_0 = (x_0, y_0, z_0)$,$v_1 = (x_1, y_1, z_1)$和$v_2 = (x_2, y_2, z_2)$组成的三角形的有向面积
85- 85+ 
86 $$86 $$
87 area = (x_2 - x_0) * (y_1 - y_0) - (x_1 - x_0) * (y_2 - y_0)87 area = (x_2 - x_0) * (y_1 - y_0) - (x_1 - x_0) * (y_2 - y_0)
88 $$88 $$
89- 89+ 
90 - 结合重心坐标$(\alpha, \beta, \gamma)$和三角形屏幕坐标$(v_0 = (x_0, y_0, z_0), v_1 = (x_1, y_1, z_1), v_2 = (x_2, y_2, z_2))$计算像素点$v = (x, y)$ 的深度$depth$90 - 结合重心坐标$(\alpha, \beta, \gamma)$和三角形屏幕坐标$(v_0 = (x_0, y_0, z_0), v_1 = (x_1, y_1, z_1), v_2 = (x_2, y_2, z_2))$计算像素点$v = (x, y)$ 的深度$depth$
91- 91+ 
92 $$92 $$
93 depth = \alpha * z_0 + \beta * z_1 + \gamma * z_293 depth = \alpha * z_0 + \beta * z_1 + \gamma * z_2
94 $$94 $$
95 95 
96 - 结合深度图$d$,遮挡截断$occlusion\_truncation$计算点$v = (x, y)$的深度阈值$depth\_thres$96 - 结合深度图$d$,遮挡截断$occlusion\_truncation$计算点$v = (x, y)$的深度阈值$depth\_thres$
97- 97+ 
98 $$98 $$
99 depth\_thres = d(x, y) * 0.49999 + 0.5 + occlusion\_truncation99 depth\_thres = d(x, y) * 0.49999 + 0.5 + occlusion\_truncation
100 $$100 $$
101- 101+ 
102 - 根据重心坐标$(\alpha, \beta, \gamma)$判断顶点是否在三角形内102 - 根据重心坐标$(\alpha, \beta, \gamma)$判断顶点是否在三角形内
103 如果$\alpha >= 0$且$\beta >= 0$且$\gamma >= 0$则点在三角形内(包括在三角形边上),否则点不在三角形内。103 如果$\alpha >= 0$且$\beta >= 0$且$\gamma >= 0$则点在三角形内(包括在三角形边上),否则点不在三角形内。
104 - 结合重心坐标$(\lambda_0, \lambda_1, \lambda_2)$以及三角形的三个顶点坐标$v_0 = (x_0, y_0, z_0, w_0)$,$v_1 = (x_1, y_1, z_1, w_1)$和$v_2 = (x_2, y_2, z_2, w_2)$计算透视矫正插值$(\lambda_0^{corrected}, \lambda_1^{corrected}, \lambda_2^{corrected})$104 - 结合重心坐标$(\lambda_0, \lambda_1, \lambda_2)$以及三角形的三个顶点坐标$v_0 = (x_0, y_0, z_0, w_0)$,$v_1 = (x_1, y_1, z_1, w_1)$和$v_2 = (x_2, y_2, z_2, w_2)$计算透视矫正插值$(\lambda_0^{corrected}, \lambda_1^{corrected}, \lambda_2^{corrected})$
@@ -110,7 +110,7 @@
110## 参数说明110## 参数说明
111 111 
112- **参数说明**112- **参数说明**
113- 113+ 
114 <table style="undefined;table-layout: fixed; width: 1005px"><colgroup>114 <table style="undefined;table-layout: fixed; width: 1005px"><colgroup>
115 <col style="width: 170px">115 <col style="width: 170px">
116 <col style="width: 170px">116 <col style="width: 170px">
Mimage/rasterizer/docs/aclnnRasterizer.md+37-37
@@ -21,62 +21,62 @@
21 21 
22 $findices$记录每个像素点最小深度对应的面索引,$barycentric$记录每个顶点相对于$findices$中记录的面的重心坐标透视矫正插值。22 $findices$记录每个像素点最小深度对应的面索引,$barycentric$记录每个顶点相对于$findices$中记录的面的重心坐标透视矫正插值。
23 计算过程中使用的Z-Buffer记录每个像素点$(x, y)$的最小深度$z_{\min}(x, y)$以及该深度对应的三角形面片索引$\text{face\_idx}(x, y)$。23 计算过程中使用的Z-Buffer记录每个像素点$(x, y)$的最小深度$z_{\min}(x, y)$以及该深度对应的三角形面片索引$\text{face\_idx}(x, y)$。
24- 24+ 
25 计算过程如下:25 计算过程如下:
26 对空间中的每个三角形面片$f$:26 对空间中的每个三角形面片$f$:
27- 27+ 
28 1. 将$f$的三个顶点坐标$(v_0, v_1, v_2)$转换为屏幕坐标$(v_{s0}, v_{s1}, v_{s2})$28 1. 将$f$的三个顶点坐标$(v_0, v_1, v_2)$转换为屏幕坐标$(v_{s0}, v_{s1}, v_{s2})$
29 2. 根据$(v_{s0}, v_{s1}, v_{s2})$计算包围$f$的矩形范围29 2. 根据$(v_{s0}, v_{s1}, v_{s2})$计算包围$f$的矩形范围
30 3. 对矩形内每个像素点$v_i = (x_i, y_i)$,执行以下操作:30 3. 对矩形内每个像素点$v_i = (x_i, y_i)$,执行以下操作:
31 31 
32- a. 计算像素中心坐标$v_c$ 32+ a. 计算像素中心坐标$v_c$
33- b. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$ 33+ b. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$
34 c. 根据$(\alpha, \beta, \gamma)$判断$v_c$是否在三角形内部。若$v_c$不在三角形内部,则处理矩形内下个像素点,否则执行下述步骤34 c. 根据$(\alpha, \beta, \gamma)$判断$v_c$是否在三角形内部。若$v_c$不在三角形内部,则处理矩形内下个像素点,否则执行下述步骤
35 d. 使用$(\alpha, \beta, \gamma)$和$(v_{s0}, v_{s1}, v_{s2})$得到当前像素的深度值depth35 d. 使用$(\alpha, \beta, \gamma)$和$(v_{s0}, v_{s1}, v_{s2})$得到当前像素的深度值depth
36- e. 若启用了深度先验;否则,直接执行下一步“Z-Buffer更新”36+ e. 若启用了深度先验,则使用深度先验图计算深度阈值depth_thres;否则,直接执行下一步“Z-Buffer更新”
37 37 
38- - 使用深度先验图计算深度阈值depth_thres38+ - 使用深度先验图计算深度阈值depth_thres
39- - 如果depth < depth_thres,处理矩形内下个像素点,否则执行下述步骤39+ - 如果depth < depth_thres,处理矩形内下个像素点,否则执行下述步骤
40 40 
41 f. Z-Buffer更新:41 f. Z-Buffer更新:
42- 42+ 
43- - 若$depth < z_{\min}(x_i, y_i)$:43+ - 若$depth < z_{\min}(x_i, y_i)$:
44- 44+ 
45- $$45+ $$
46- \quad z_{\min}(x_i, y_i) \gets \text{depth} \\46+ \quad z_{\min}(x_i, y_i) \gets \text{depth} \\
47- \quad \text{face\_idx}(x_i, y_i) \gets f47+ \quad \text{face\_idx}(x_i, y_i) \gets f
48- $$48+ $$
49- 49+ 
50- - 若$depth = z_{\min}(x_i, y_i)$:50+ - 若$depth = z_{\min}(x_i, y_i)$:
51- 51+ 
52- $$52+ $$
53- \quad \text{face\_idx}(x_i, y_i) \gets \min(\text{face\_idx}(x_i, y_i),\ f)53+ \quad \text{face\_idx}(x_i, y_i) \gets \min(\text{face\_idx}(x_i, y_i),\ f)
54- $$54+ $$
55- 55+ 
56 按上述步骤对空间中所有的三角形面片进行处理后,对大小为$height * width$的屏幕上每个像素点$v_i = (x_i, y_i)$:56 按上述步骤对空间中所有的三角形面片进行处理后,对大小为$height * width$的屏幕上每个像素点$v_i = (x_i, y_i)$:
57- 57+ 
58 1. 取Z-Buffer中$v_i$对应的面片索引$f_{idx}$,$findices (x_i, y_i) \gets f_{idx}$58 1. 取Z-Buffer中$v_i$对应的面片索引$f_{idx}$,$findices (x_i, y_i) \gets f_{idx}$
59 2. 将$f$的三个顶点坐标$(v_0, v_1, v_2)$转换为屏幕坐标$(v_{s0}, v_{s1}, v_{s2})$59 2. 将$f$的三个顶点坐标$(v_0, v_1, v_2)$转换为屏幕坐标$(v_{s0}, v_{s1}, v_{s2})$
60 3. 计算$v_i$的中心点坐标$v_c$60 3. 计算$v_i$的中心点坐标$v_c$
61 4. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$61 4. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$
62 5. 使用$(\alpha, \beta, \gamma)$计算透视矫正插值$(\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$62 5. 使用$(\alpha, \beta, \gamma)$计算透视矫正插值$(\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$
63 6. $barycentric(x_i, y_i) \gets (\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$63 6. $barycentric(x_i, y_i) \gets (\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$
64- 64+ 
65 以下是涉及的各种具体计算方法:65 以下是涉及的各种具体计算方法:
66- 66+ 
67 - 顶点$v = (x, y, z, w)$转换为屏幕坐标$v_s = (x_s, y_s, z_s)$67 - 顶点$v = (x, y, z, w)$转换为屏幕坐标$v_s = (x_s, y_s, z_s)$
68- 68+ 
69 $$69 $$
70 x_s = (x / w * 0.5 + 0.5) * (width - 1) + 0.5\\70 x_s = (x / w * 0.5 + 0.5) * (width - 1) + 0.5\\
71 y_s = (0.5 + 0.5 * y / w) * (height - 1) + 0.5\\71 y_s = (0.5 + 0.5 * y / w) * (height - 1) + 0.5\\
72 z_s = z / w * 0.49999 + 0.572 z_s = z / w * 0.49999 + 0.5
73 $$73 $$
74- 74+ 
75 - 点$v$相对于三角形 $(v_0, v_1, v_2)$的重心坐标$(\alpha, \beta, \gamma)$75 - 点$v$相对于三角形 $(v_0, v_1, v_2)$的重心坐标$(\alpha, \beta, \gamma)$
76- 76+ 
77- 1. 分别计算计算三角形$(v_0, v_1, v_2)$、$(v_0, v, v_2)$和$(v_0, v_1, v)$的有向面积$area$、$beta\_tri$和$gamma\_tri$77+ 1. 分别计算三角形$(v_0, v_1, v_2)$、$(v_0, v, v_2)$和$(v_0, v_1, v)$的有向面积$area$、$beta\_tri$和$gamma\_tri$
78 2. 若$area$为0,则$\alpha = \beta = \gamma = -1$,否则78 2. 若$area$为0,则$\alpha = \beta = \gamma = -1$,否则
79- 79+ 
80 $$80 $$
81 \beta = beta\_tri / area\\81 \beta = beta\_tri / area\\
82 \gamma = gamma\_tri / area\\82 \gamma = gamma\_tri / area\\
@@ -84,23 +84,23 @@
84 $$84 $$
85 85 
86 - 由顶点$v_0 = (x_0, y_0, z_0)$,$v_1 = (x_1, y_1, z_1)$和$v_2 = (x_2, y_2, z_2)$组成的三角形的有向面积86 - 由顶点$v_0 = (x_0, y_0, z_0)$,$v_1 = (x_1, y_1, z_1)$和$v_2 = (x_2, y_2, z_2)$组成的三角形的有向面积
87- 87+ 
88 $$88 $$
89 area = (x_2 - x_0) * (y_1 - y_0) - (x_1 - x_0) * (y_2 - y_0)89 area = (x_2 - x_0) * (y_1 - y_0) - (x_1 - x_0) * (y_2 - y_0)
90 $$90 $$
91- 91+ 
92 - 结合重心坐标$(\alpha, \beta, \gamma)$和三角形屏幕坐标$(v_0 = (x_0, y_0, z_0), v_1 = (x_1, y_1, z_1), v_2 = (x_2, y_2, z_2))$计算像素点$v = (x, y)$ 的深度$depth$92 - 结合重心坐标$(\alpha, \beta, \gamma)$和三角形屏幕坐标$(v_0 = (x_0, y_0, z_0), v_1 = (x_1, y_1, z_1), v_2 = (x_2, y_2, z_2))$计算像素点$v = (x, y)$ 的深度$depth$
93- 93+ 
94 $$94 $$
95 depth = \alpha * z_0 + \beta * z_1 + \gamma * z_295 depth = \alpha * z_0 + \beta * z_1 + \gamma * z_2
96 $$96 $$
97 97 
98 - 结合深度图$d$,遮挡截断$occlusion\_truncation$计算点$v = (x, y)$的深度阈值$depth\_thres$98 - 结合深度图$d$,遮挡截断$occlusion\_truncation$计算点$v = (x, y)$的深度阈值$depth\_thres$
99- 99+ 
100 $$100 $$
101 depth\_thres = d(x, y) * 0.49999 + 0.5 + occlusion\_truncation101 depth\_thres = d(x, y) * 0.49999 + 0.5 + occlusion\_truncation
102 $$102 $$
103- 103+ 
104 - 根据重心坐标$(\alpha, \beta, \gamma)$判断顶点是否在三角形内104 - 根据重心坐标$(\alpha, \beta, \gamma)$判断顶点是否在三角形内
105 如果$\alpha >= 0$且$\beta >= 0$且$\gamma >= 0$则点在三角形内(包括在三角形边上),否则点不在三角形内。105 如果$\alpha >= 0$且$\beta >= 0$且$\gamma >= 0$则点在三角形内(包括在三角形边上),否则点不在三角形内。
106 - 结合重心坐标$(\lambda_0, \lambda_1, \lambda_2)$以及三角形的三个顶点坐标$v_0 = (x_0, y_0, z_0, w_0)$,$v_1 = (x_1, y_1, z_1, w_1)$和$v_2 = (x_2, y_2, z_2, w_2)$计算透视矫正插值$(\lambda_0^{corrected}, \lambda_1^{corrected}, \lambda_2^{corrected})$106 - 结合重心坐标$(\lambda_0, \lambda_1, \lambda_2)$以及三角形的三个顶点坐标$v_0 = (x_0, y_0, z_0, w_0)$,$v_1 = (x_1, y_1, z_1, w_1)$和$v_2 = (x_2, y_2, z_2, w_2)$计算透视矫正插值$(\lambda_0^{corrected}, \lambda_1^{corrected}, \lambda_2^{corrected})$
@@ -139,7 +139,7 @@ aclnnStatus aclnnRasterizer(
139## aclnnRasterizerGetWorkspaceSize139## aclnnRasterizerGetWorkspaceSize
140 140 
141- **参数说明**141- **参数说明**
142- 142+ 
143 <table style="undefined;table-layout: fixed; width: 1550px"><colgroup>143 <table style="undefined;table-layout: fixed; width: 1550px"><colgroup>
144 <col style="width: 170px">144 <col style="width: 170px">
145 <col style="width: 120px">145 <col style="width: 120px">
@@ -277,7 +277,7 @@ aclnnStatus aclnnRasterizer(
277- **返回值**277- **返回值**
278 278 
279 aclnnStatus:返回状态码,具体参见[aclnn返回码](https://gitcode.com/cann/ops-cv/blob/master/docs/zh/context/aclnn%E8%BF%94%E5%9B%9E%E7%A0%81.md)。279 aclnnStatus:返回状态码,具体参见[aclnn返回码](https://gitcode.com/cann/ops-cv/blob/master/docs/zh/context/aclnn%E8%BF%94%E5%9B%9E%E7%A0%81.md)。
280- 280+ 
281 第一段接口完成入参校验,出现以下场景时报错:281 第一段接口完成入参校验,出现以下场景时报错:
282 282 
283 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>283 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
@@ -352,7 +352,7 @@ aclnnStatus aclnnRasterizer(
352 </tbody>352 </tbody>
353 </table>353 </table>
354- **返回值**354- **返回值**
355- 355+ 
356 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。356 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
357 357 
358## 约束说明358## 约束说明
Mimage/resize_bilinear_v2/docs/aclnnResize.md+2-2
@@ -146,7 +146,7 @@ aclnnStatus aclnnResize(
146- **返回值**146- **返回值**
147 147 
148 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。148 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
149- 149+ 
150 第一段接口完成入参校验,出现以下场景时报错:150 第一段接口完成入参校验,出现以下场景时报错:
151 151 
152 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>152 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
@@ -178,7 +178,7 @@ aclnnStatus aclnnResize(
178 <tr>178 <tr>
179 <td>out与self的数据格式或者数据类型不一致。</td></tr>179 <td>out与self的数据格式或者数据类型不一致。</td></tr>
180 <tr>180 <tr>
181- <td>shape不满足要求:<ol><li>self和out的shape必须为4维。</li><li>self和out的N维和C维必须相同。</li><li>out在H维的size必须等于self的H维size乘以scales对应H维的值。</li><li>out在W维的size必须等于self的W维乘以scales对应W维的值。</li></ol></td>181+ <td>shape不满足要求:<ol><li>self和out的shape必须为4维。</li><li>self和out的N维和C维必须相同。</li><li>out在H维的size必须等于self的H维size乘以scales对应H维的值。</li><li>out在W维的size必须等于self的W维size乘以scales对应W维的值。</li></ol></td>
182 </tr>182 </tr>
183 </tbody></table>183 </tbody></table>
184 184 
Mimage/resize_nearest_neighbor_v2/docs/aclnnUpsampleNearest2d.md+10-9
@@ -36,18 +36,18 @@
36 36 
37```Cpp37```Cpp
38aclnnStatus aclnnUpsampleNearest2dGetWorkspaceSize(38aclnnStatus aclnnUpsampleNearest2dGetWorkspaceSize(
39- const aclTensor *self, 39+ const aclTensor *self,
40- const aclIntArray *outputSize, 40+ const aclIntArray *outputSize,
41- aclTensor *out, 41+ aclTensor *out,
42- uint64_t *workspaceSize, 42+ uint64_t *workspaceSize,
43 aclOpExecutor **executor)43 aclOpExecutor **executor)
44```44```
45 45 
46```Cpp46```Cpp
47aclnnStatus aclnnUpsampleNearest2d(47aclnnStatus aclnnUpsampleNearest2d(
48- void *workspace, 48+ void *workspace,
49- uint64_t workspaceSize, 49+ uint64_t workspaceSize,
50- aclOpExecutor *executor, 50+ aclOpExecutor *executor,
51 const aclrtStream stream)51 const aclrtStream stream)
52```52```
53 53 
@@ -224,8 +224,8 @@ aclnnStatus aclnnUpsampleNearest2d(
224- 参数`self``out`的shape约束:224- 参数`self``out`的shape约束:
225 - 每个维度的取值小于等于2^20。225 - 每个维度的取值小于等于2^20。
226 - 参数`out`的N轴和C轴与`self`保持一致。226 - 参数`out`的N轴和C轴与`self`保持一致。
227- - 内存占用需小于60G。内存占用的计算公式如下:227+ - 内存占用需小于60GB。内存占用的计算公式如下:
228- 228+ 
229 $$229 $$
230 N * (ceil(C/16) * 16) * (self\_H * self\_W + out\_H * out\_W) * sizeof(dtype) < 60 * 1024 * 1024 * 1024230 N * (ceil(C/16) * 16) * (self\_H * self\_W + out\_H * out\_W) * sizeof(dtype) < 60 * 1024 * 1024 * 1024
231 $$231 $$
@@ -233,6 +233,7 @@ aclnnStatus aclnnUpsampleNearest2d(
233 其中:233 其中:
234 - N代表输入和输出的N轴。234 - N代表输入和输出的N轴。
235 - C代表输入和输出的C轴。235 - C代表输入和输出的C轴。
236+ - dtype代表输入张量的数据类型。
236- 确定性计算:237- 确定性计算:
237 - aclnnUpsampleNearest2d默认确定性实现。238 - aclnnUpsampleNearest2d默认确定性实现。
238 239 
Mimage/resize_upsample_trilinear/docs/aclnnUpsampleTrilinear3d.md+20-19
@@ -97,22 +97,22 @@
97 97 
98```Cpp98```Cpp
99aclnnStatus aclnnUpsampleTrilinear3dGetWorkspaceSize(99aclnnStatus aclnnUpsampleTrilinear3dGetWorkspaceSize(
100- const aclTensor *self, 100+ const aclTensor *self,
101- const aclIntArray *outputSize, 101+ const aclIntArray *outputSize,
102- bool alignCorners, 102+ bool alignCorners,
103- double scalesD, 103+ double scalesD,
104- double scalesH, 104+ double scalesH,
105- double scalesW, 105+ double scalesW,
106- aclTensor *out, 106+ aclTensor *out,
107- uint64_t *workspaceSize, 107+ uint64_t *workspaceSize,
108 aclOpExecutor **executor)108 aclOpExecutor **executor)
109```109```
110 110 
111```Cpp111```Cpp
112aclnnStatus aclnnUpsampleTrilinear3d(112aclnnStatus aclnnUpsampleTrilinear3d(
113- void *workspace, 113+ void *workspace,
114- uint64_t workspaceSize, 114+ uint64_t workspaceSize,
115- aclOpExecutor *executor, 115+ aclOpExecutor *executor,
116 aclrtStream stream)116 aclrtStream stream)
117```117```
118 118 
@@ -251,7 +251,7 @@ aclnnStatus aclnnUpsampleTrilinear3d(
251 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。251 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
252 252 
253 第一段接口完成入参校验,出现以下场景时报错:253 第一段接口完成入参校验,出现以下场景时报错:
254- 254+ 
255 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>255 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
256 <col style="width: 268px">256 <col style="width: 268px">
257 <col style="width: 140px">257 <col style="width: 140px">
@@ -337,29 +337,30 @@ aclnnStatus aclnnUpsampleTrilinear3d(
337- 输入数据缩放场景缩小倍数必须小于等于50,即:337- 输入数据缩放场景缩小倍数必须小于等于50,即:
338 338 
339 $$339 $$
340-shape的深度D/outputSize\_D <= 50340+shape的深度D/outputSize\_D <= 50
341 $$341 $$
342- 342+ 
343 $$343 $$
344-shape的高度H/outputSize\_H <= 50344+shape的高度H/outputSize\_H <= 50
345 $$345 $$
346- 346+ 
347 $$347 $$
348-shape的宽度W/outputSize\_W <=50348+shape的宽度W/outputSize\_W <=50
349 $$349 $$
350 350 
351- 参数`self``out`的shape约束:351- 参数`self``out`的shape约束:
352 - 每个维度的取值小于等于2^20。352 - 每个维度的取值小于等于2^20。
353 - 参数`out`的N轴和C轴与`self`保持一致。353 - 参数`out`的N轴和C轴与`self`保持一致。
354- - 内存占用需小于60G。内存占用的计算公式如下:354+ - 内存占用需小于60GB。内存占用的计算公式如下:
355 355 
356 $$356 $$
357- N * C * (self\_D * self\_H * self\_W + out\_D * out\_H * out\_W + self\_D * self\_H * out\_W + self\_D * out\_H * out\_W) * sizeof(float) < 60 * 1024 * 1024 * 1024357+ N * C * (self\_D * self\_H * self\_W + out\_D * out\_H * out\_W + self\_D * self\_H * out\_W + self\_D * out\_H * out\_W) * sizeof(dtype) < 60 * 1024 * 1024 * 1024
358 $$358 $$
359 359 
360 其中:360 其中:
361 - N代表输入和输出的N轴。361 - N代表输入和输出的N轴。
362 - C代表输入和输出的C轴。362 - C代表输入和输出的C轴。
363+ - dtype代表输入张量的数据类型。
363 - N \* C \* self_D \* self_H < 2^31364 - N \* C \* self_D \* self_H < 2^31
364 - out_W * out_H < 2^31365 - out_W * out_H < 2^31
365- 参数self、outputSize、scalesD、scalesH、scalesW需要满足如下约束:366- 参数self、outputSize、scalesD、scalesH、scalesW需要满足如下约束:
Mimage/upsample_bicubic2d/docs/aclnnUpsampleBicubic2d.md+12-11
@@ -17,11 +17,11 @@
17 17 
18- 接口功能:对由多个输入通道组成的输入信号应用2D双三次上采样。如果输入Tensor x的shape为(N, C, H, W),则输出Tensor out的shape为(N, C, outputSize[0], outputSize[1])。18- 接口功能:对由多个输入通道组成的输入信号应用2D双三次上采样。如果输入Tensor x的shape为(N, C, H, W),则输出Tensor out的shape为(N, C, outputSize[0], outputSize[1])。
19- 计算公式:对于一个二维插值点$(N, C, h, w)$,插值$out(N, C, h, w)$可以表示为:19- 计算公式:对于一个二维插值点$(N, C, h, w)$,插值$out(N, C, h, w)$可以表示为:
20- 20+ 
21 $$21 $$
22 {out(N, C, h, w)}=\sum_{i=0}^{3}\sum_{j=0}^{3}{W(i, j)}*{f(h_i, w_j)}22 {out(N, C, h, w)}=\sum_{i=0}^{3}\sum_{j=0}^{3}{W(i, j)}*{f(h_i, w_j)}
23 $$23 $$
24- 24+ 
25 $$25 $$
26 scaleH =\begin{cases}26 scaleH =\begin{cases}
27 (self.dim(2)-1) / (outputSize[0]-1) & alignCorners=true \\27 (self.dim(2)-1) / (outputSize[0]-1) & alignCorners=true \\
@@ -29,7 +29,7 @@
29 self.dim(2) / outputSize[0] & otherwise29 self.dim(2) / outputSize[0] & otherwise
30 \end{cases}30 \end{cases}
31 $$31 $$
32- 32+ 
33 $$33 $$
34 scaleW =\begin{cases}34 scaleW =\begin{cases}
35 (self.dim(3)-1) / (outputSize[1]-1) & alignCorners=true \\35 (self.dim(3)-1) / (outputSize[1]-1) & alignCorners=true \\
@@ -37,7 +37,7 @@
37 self.dim(3) / outputSize[1] & otherwise37 self.dim(3) / outputSize[1] & otherwise
38 \end{cases}38 \end{cases}
39 $$39 $$
40- 40+ 
41 其中:41 其中:
42 - alignCorners为true,表示输入和输出张量的角像素点对齐;alignCorners为false,表示输入和输出张量的边像素点对齐。42 - alignCorners为true,表示输入和输出张量的角像素点对齐;alignCorners为false,表示输入和输出张量的边像素点对齐。
43 - i和j是$W(i, j)$的索引变量。43 - i和j是$W(i, j)$的索引变量。
@@ -188,18 +188,18 @@ aclnnStatus aclnnUpsampleBicubic2d(
188 </tr>188 </tr>
189 </tbody>189 </tbody>
190 </table>190 </table>
191- 191+ 
192 - <term>Atlas 200I/500 A2 推理产品</term><term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>192 - <term>Atlas 200I/500 A2 推理产品</term><term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>
193 - 数据类型:参数`self``out`不支持BFLOAT16。193 - 数据类型:参数`self``out`不支持BFLOAT16。
194 - 数据格式:参数`self``out`不支持NHWC。194 - 数据格式:参数`self``out`不支持NHWC。
195 - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>195 - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>
196- 196+ 
197 参数`self`、`out`的数据格式不支持NHWC。197 参数`self`、`out`的数据格式不支持NHWC。
198- 198+ 
199- **返回值**199- **返回值**
200 200 
201 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。201 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
202- 202+ 
203 第一段接口完成入参校验,出现以下场景时报错:203 第一段接口完成入参校验,出现以下场景时报错:
204 204 
205 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>205 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
@@ -256,7 +256,7 @@ aclnnStatus aclnnUpsampleBicubic2d(
256 <td>self、outputSize、scalesH、scalesW不满足约束。</td>256 <td>self、outputSize、scalesH、scalesW不满足约束。</td>
257 </tr>257 </tr>
258 </tbody></table>258 </tbody></table>
259- 259+ 
260## aclnnUpsampleBicubic2d260## aclnnUpsampleBicubic2d
261 261 
262- **参数说明**262- **参数说明**
@@ -305,15 +305,16 @@ aclnnStatus aclnnUpsampleBicubic2d(
305- 参数`self``out`的shape约束:305- 参数`self``out`的shape约束:
306 - 每个维度的取值小于等于2^20。306 - 每个维度的取值小于等于2^20。
307 - 参数`out`的N轴和C轴与`self`保持一致。307 - 参数`out`的N轴和C轴与`self`保持一致。
308- - 内存占用需小于60G。内存占用的计算公式如下:308+ - 内存占用需小于60GB。内存占用的计算公式如下:
309 309 
310 $$310 $$
311- (self\_H * self\_W + out\_H * out\_W + self\_H * out\_W) * N * C * sizeof(float) < 60 * 1024 * 1024 * 1024311+ (self\_H * self\_W + out\_H * out\_W + self\_H * out\_W) * N * C * sizeof(dtype) < 60 * 1024 * 1024 * 1024
312 $$312 $$
313 313 
314 其中:314 其中:
315 - N代表输入和输出的N轴。315 - N代表输入和输出的N轴。
316 - C代表输入和输出的C轴。316 - C代表输入和输出的C轴。
317+ - dtype代表输入张量的数据类型。
317 - N \* C \* self_H < 2^31318 - N \* C \* self_H < 2^31
318- 参数self、outputSize、scalesH、scalesW需要满足如下约束:319- 参数self、outputSize、scalesH、scalesW需要满足如下约束:
319 320 
Mimage/upsample_bicubic2d_aa/docs/aclnnUpsampleBicubic2dAA.md+11-10
@@ -18,11 +18,11 @@
18- 接口功能:对由多个输入通道组成的输入信号应用双三次抗锯齿算法进行上采样。如果输入Tensor x的shape为(N, C, H, W),则输出Tensor out的shape为(N, C, outputSize[0], outputSize[1])。18- 接口功能:对由多个输入通道组成的输入信号应用双三次抗锯齿算法进行上采样。如果输入Tensor x的shape为(N, C, H, W),则输出Tensor out的shape为(N, C, outputSize[0], outputSize[1])。
19 19 
20- 计算公式:对于一个二维插值点$(N, C, h, w)$,插值$out(N, C, h, w)$可以表示为:20- 计算公式:对于一个二维插值点$(N, C, h, w)$,插值$out(N, C, h, w)$可以表示为:
21- 21+ 
22 $$22 $$
23 {out(N, C, h, w)}=\sum_{i=0}^{kW}\sum_{j=0}^{kH}{W(i, j)}*{f(h_i, w_j)}23 {out(N, C, h, w)}=\sum_{i=0}^{kW}\sum_{j=0}^{kH}{W(i, j)}*{f(h_i, w_j)}
24 $$24 $$
25- 25+ 
26 $$26 $$
27 scaleH =\begin{cases}27 scaleH =\begin{cases}
28 (x.dim(2)-1) / (outputSize[0]-1) & alignCorners=true \\28 (x.dim(2)-1) / (outputSize[0]-1) & alignCorners=true \\
@@ -30,7 +30,7 @@
30 x.dim(2) / outputSize[0] & otherwise30 x.dim(2) / outputSize[0] & otherwise
31 \end{cases}31 \end{cases}
32 $$32 $$
33- 33+ 
34 $$34 $$
35 scaleW =\begin{cases}35 scaleW =\begin{cases}
36 (x.dim(3)-1) / (outputSize[1]-1) & alignCorners=true \\36 (x.dim(3)-1) / (outputSize[1]-1) & alignCorners=true \\
@@ -38,7 +38,7 @@
38 x.dim(3) / outputSize[1] & otherwise38 x.dim(3) / outputSize[1] & otherwise
39 \end{cases}39 \end{cases}
40 $$40 $$
41- 41+ 
42 其中:42 其中:
43 - alignCorners为true,表示输入和输出张量的角像素点对齐;alignCorners为false,表示输入和输出张量的边像素点对齐。43 - alignCorners为true,表示输入和输出张量的角像素点对齐;alignCorners为false,表示输入和输出张量的边像素点对齐。
44 - i和j是$W(i, j)$的索引变量。44 - i和j是$W(i, j)$的索引变量。
@@ -135,7 +135,7 @@ aclnnStatus aclnnUpsampleBicubic2dAA(
135 <td>alignCorners(bool)</td>135 <td>alignCorners(bool)</td>
136 <td>输入</td>136 <td>输入</td>
137 <td>决定是否对齐角像素点,对应公式中的`alignCorners`。</td>137 <td>决定是否对齐角像素点,对应公式中的`alignCorners`。</td>
138- <td>alignCorners为True,则输入和输出张量的角像素点会被对齐,否则不对齐。</td>138+ <td>alignCorners为true,则输入和输出张量的角像素点会被对齐,否则不对齐。</td>
139 <td>-</td>139 <td>-</td>
140 <td>-</td>140 <td>-</td>
141 <td>-</td>141 <td>-</td>
@@ -197,7 +197,7 @@ aclnnStatus aclnnUpsampleBicubic2dAA(
197- **返回值**197- **返回值**
198 198 
199 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。199 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
200- 200+ 
201 第一段接口完成入参校验,出现以下场景时报错:201 第一段接口完成入参校验,出现以下场景时报错:
202 202 
203 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>203 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
@@ -282,24 +282,25 @@ aclnnStatus aclnnUpsampleBicubic2dAA(
282- 参数`x``out`的shape约束:282- 参数`x``out`的shape约束:
283 - 每个维度的取值小于等于2^20。283 - 每个维度的取值小于等于2^20。
284 - 参数`out`的N轴和C轴与`x`保持一致,且C轴、H轴、W轴大于0。284 - 参数`out`的N轴和C轴与`x`保持一致,且C轴、H轴、W轴大于0。
285- - 内存占用需小于60G。内存占用的计算公式如下:285+ - 内存占用需小于60GB。内存占用的计算公式如下:
286 286 
287 $$287 $$
288- (x\_H * x\_W + out\_H * out\_W + x\_H * out\_W) * N * C * sizeof(float) < 60 * 1024 * 1024 * 1024288+ (x\_H * x\_W + out\_H * out\_W + x\_H * out\_W) * N * C * sizeof(dtype) < 60 * 1024 * 1024 * 1024
289 $$289 $$
290 290 
291 其中:291 其中:
292 - N代表输入和输出的N轴。292 - N代表输入和输出的N轴。
293 - C代表输入和输出的C轴。293 - C代表输入和输出的C轴。
294+ - dtype代表输入张量的数据类型。
294 - N \* C \* x_H < 2^31295 - N \* C \* x_H < 2^31
295- - <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>296- - <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>
296 297 
297 输入数据缩放场景缩小倍数必须小于等于50,即:298 输入数据缩放场景缩小倍数必须小于等于50,即:
298- 299+ 
299 $$300 $$
300 输入shape的高度H/outputSize\_H <= 50301 输入shape的高度H/outputSize\_H <= 50
301 $$302 $$
302- 303+ 
303 $$304 $$
304 输入shape的宽度W/outputSize\_W <=50305 输入shape的宽度W/outputSize\_W <=50
305 $$306 $$
Mimage/upsample_bicubic2d_aa_grad/docs/aclnnUpsampleBicubic2dAAGrad.md+9-8
@@ -17,11 +17,11 @@
17 17 
18- 接口功能:[aclnnUpsampleBicubic2dAA](../../upsample_bicubic2d_aa/docs/aclnnUpsampleBicubic2dAA.md)的反向传播。如果输入张量的shape为(N, C, H, W),则输出张量的shape为(N, C, inputSize[2], inputSize[3])。18- 接口功能:[aclnnUpsampleBicubic2dAA](../../upsample_bicubic2d_aa/docs/aclnnUpsampleBicubic2dAA.md)的反向传播。如果输入张量的shape为(N, C, H, W),则输出张量的shape为(N, C, inputSize[2], inputSize[3])。
19- 计算公式:对于一个二维插值点$(N, C, h, w)$,插值$gradInput(N, C, h, w)$可以表示为:19- 计算公式:对于一个二维插值点$(N, C, h, w)$,插值$gradInput(N, C, h, w)$可以表示为:
20- 20+ 
21 $$21 $$
22 {gradInput(N, C, h, w)}=\sum_{i=0}^{3}\sum_{j=0}^{3}{W(i, j)}*{f(h_i, w_j)}22 {gradInput(N, C, h, w)}=\sum_{i=0}^{3}\sum_{j=0}^{3}{W(i, j)}*{f(h_i, w_j)}
23 $$23 $$
24- 24+ 
25 $$25 $$
26 scaleH =\begin{cases}26 scaleH =\begin{cases}
27 (inputSize[2]-1) / (outputSize[0]-1) & alignCorners=true \\27 (inputSize[2]-1) / (outputSize[0]-1) & alignCorners=true \\
@@ -29,7 +29,7 @@
29 inputSize[2] / outputSize[0] & otherwise29 inputSize[2] / outputSize[0] & otherwise
30 \end{cases}30 \end{cases}
31 $$31 $$
32- 32+ 
33 $$33 $$
34 scaleW =\begin{cases}34 scaleW =\begin{cases}
35 (inputSize[3]-1) / (outputSize[1]-1) & alignCorners=true \\35 (inputSize[3]-1) / (outputSize[1]-1) & alignCorners=true \\
@@ -37,7 +37,7 @@
37 inputSize[3] / outputSize[1] & otherwise37 inputSize[3] / outputSize[1] & otherwise
38 \end{cases}38 \end{cases}
39 $$39 $$
40- 40+ 
41 其中:41 其中:
42 - alignCorners为true,表示输入和输出张量的角像素点对齐;alignCorners为false,表示输入和输出张量的边像素点对齐。42 - alignCorners为true,表示输入和输出张量的角像素点对齐;alignCorners为false,表示输入和输出张量的边像素点对齐。
43 - i和j是$W(i, j)$的索引变量。43 - i和j是$W(i, j)$的索引变量。
@@ -203,7 +203,7 @@ aclnnStatus aclnnUpsampleBicubic2dAAGrad(
203- **返回值**203- **返回值**
204 204 
205 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。205 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
206- 206+ 
207 第一段接口完成入参校验,出现以下场景时报错:207 第一段接口完成入参校验,出现以下场景时报错:
208 208 
209 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>209 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
@@ -300,21 +300,22 @@ aclnnStatus aclnnUpsampleBicubic2dAAGrad(
300 - 内存占用需要满足如下条件:300 - 内存占用需要满足如下条件:
301 301 
302 $$302 $$
303- (gradOutput\_H * gradOutput\_W + out\_H * out\_W + gradOutput\_H * out\_W) * N * C * sizeof(float) < 60 * 1024 * 1024 * 1024303+ (gradOutput\_H * gradOutput\_W + out\_H * out\_W + gradOutput\_H * out\_W) * N * C * sizeof(dtype) < 60 * 1024 * 1024 * 1024
304 $$304 $$
305 305 
306 其中:306 其中:
307 - N代表输入和输出的N轴。307 - N代表输入和输出的N轴。
308 - C代表输入和输出的C轴。308 - C代表输入和输出的C轴。
309+ - dtype代表输入张量的数据类型。
309 - N \* C \* gradOutput_H < 2^31310 - N \* C \* gradOutput_H < 2^31
310- <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>311- <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>
311 312 
312- 输入数据缩放场景放大倍数必须小于等于50,即:313+ 反向接口的输入数据缩倍数必须小于等于50,即:
313 314 
314 $$315 $$
315 outputSize\_H / 输出shape的高度H <= 50316 outputSize\_H / 输出shape的高度H <= 50
316 $$317 $$
317- 318+ 
318 $$319 $$
319 outputSize\_W / 输出shape的宽度W <=50320 outputSize\_W / 输出shape的宽度W <=50
320 $$321 $$
Mimage/upsample_bilinear2d/README.md+1-1
@@ -24,7 +24,7 @@
24 2. 根据这个浮点数坐标,计算前后相邻的原始图像的点。24 2. 根据这个浮点数坐标,计算前后相邻的原始图像的点。
25 3. 分别计算相邻点到对应目标点的权重,按照权重相乘累加即可得到目标点值。25 3. 分别计算相邻点到对应目标点的权重,按照权重相乘累加即可得到目标点值。
26 - 具体计算逻辑:26 - 具体计算逻辑:
27- 缩放方式分为角对齐和边对齐,角对齐(alignCorners为true)表示按照原始图片左上角像素中心点对齐,边对齐(alignCorners为true)表示按照原始图片左上角顶点及两条边对齐,在计算缩放系数和坐标位置时存在差异。对于一个二维插值点$(N, C, H, W)$,则有以下公式:27+ 缩放方式分为角对齐和边对齐,角对齐(alignCorners为true)表示按照原始图片左上角像素中心点对齐,边对齐(alignCorners为false)表示按照原始图片左上角顶点及两条边对齐,在计算缩放系数和坐标位置时存在差异。对于一个二维插值点$(N, C, H, W)$,则有以下公式:
28 28 
29 $$29 $$
30 scale\_h =\begin{cases}30 scale\_h =\begin{cases}
Mimage/upsample_bilinear2d/docs/aclnnUpsampleBilinear2d.md+2-2
@@ -25,7 +25,7 @@
25 2. 根据这个浮点数坐标,计算前后相邻的原始图像的点。25 2. 根据这个浮点数坐标,计算前后相邻的原始图像的点。
26 3. 分别计算相邻点到对应目标点的权重,按照权重相乘累加即可得到目标点值。26 3. 分别计算相邻点到对应目标点的权重,按照权重相乘累加即可得到目标点值。
27 - 具体计算逻辑:27 - 具体计算逻辑:
28- 缩放方式分为角对齐和边对齐,角对齐(alignCorners为true)表示按照原始图片左上角像素中心点对齐,边对齐(alignCorners为true)表示按照原始图片左上角顶点及两条边对齐,在计算缩放系数和坐标位置时存在差异。对于一个二维插值点$(N, C, H, W)$,则有以下公式:28+ 缩放方式分为角对齐和边对齐,角对齐(alignCorners为true)表示按照原始图片左上角像素中心点对齐,边对齐(alignCorners为false)表示按照原始图片左上角顶点及两条边对齐,在计算缩放系数和坐标位置时存在差异。对于一个二维插值点$(N, C, H, W)$,则有以下公式:
29 29 
30 $$30 $$
31 scaleH =\begin{cases}31 scaleH =\begin{cases}
@@ -218,7 +218,7 @@ aclnnStatus aclnnUpsampleBilinear2d(
218- **返回值**218- **返回值**
219 219 
220 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。220 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
221- 221+ 
222 第一段接口完成入参校验,出现以下场景时报错:222 第一段接口完成入参校验,出现以下场景时报错:
223 223 
224 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>224 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
Mimage/upsample_bilinear2d_aa_backward/docs/aclnnUpsampleBilinear2dAABackward.md+9-9
@@ -17,11 +17,11 @@
17 17 
18- 接口功能:[aclnnUpsampleBilinear2dAA](../../upsample_bilinear2d_aa/docs/aclnnUpsampleBilinear2dAA.md)的反向传播。18- 接口功能:[aclnnUpsampleBilinear2dAA](../../upsample_bilinear2d_aa/docs/aclnnUpsampleBilinear2dAA.md)的反向传播。
19- 计算公式:对于一个二维插值点$(N, C, H, W)$,插值$I(N, C, H, W)$可以表示为:19- 计算公式:对于一个二维插值点$(N, C, H, W)$,插值$I(N, C, H, W)$可以表示为:
20- 20+ 
21 $$21 $$
22 {I(N, C, H, W)} = \sum_{i=0}^{kW}\sum_{j=0}^{kH}{w(i) * w(j)} * {f(h_i, w_j)}/\sum_{i=0}^{kW}w(i)/\sum_{j=0}^{kH}w(j)22 {I(N, C, H, W)} = \sum_{i=0}^{kW}\sum_{j=0}^{kH}{w(i) * w(j)} * {f(h_i, w_j)}/\sum_{i=0}^{kW}w(i)/\sum_{j=0}^{kH}w(j)
23 $$23 $$
24- 24+ 
25 $$25 $$
26 scaleH =\begin{cases}26 scaleH =\begin{cases}
27 (inputSize[2]-1) / (outputSize[0]-1) & alignCorners=true \\27 (inputSize[2]-1) / (outputSize[0]-1) & alignCorners=true \\
@@ -29,7 +29,7 @@
29 inputSize[2] / outputSize[0] & otherwise29 inputSize[2] / outputSize[0] & otherwise
30 \end{cases}30 \end{cases}
31 $$31 $$
32- 32+ 
33 $$33 $$
34 scaleW =\begin{cases}34 scaleW =\begin{cases}
35 (inputSize[3]-1) / (outputSize[1]-1) & alignCorners=true \\35 (inputSize[3]-1) / (outputSize[1]-1) & alignCorners=true \\
@@ -37,7 +37,7 @@
37 inputSize[3] / outputSize[1] & otherwise37 inputSize[3] / outputSize[1] & otherwise
38 \end{cases}38 \end{cases}
39 $$39 $$
40- 40+ 
41 - 其中:41 - 其中:
42 - alignCorners为true,表示输入和输出张量的角像素点对齐;alignCorners为false,表示输入和输出张量的边像素点对齐。42 - alignCorners为true,表示输入和输出张量的角像素点对齐;alignCorners为false,表示输入和输出张量的边像素点对齐。
43 - $kW$、$kH$分别表示W方向和H方向影响插值点大小的点的数量43 - $kW$、$kH$分别表示W方向和H方向影响插值点大小的点的数量
@@ -60,11 +60,11 @@
60 $$60 $$
61 61 
62 - 假设:正向插值的输出图像out $(h, w)$受原图像input $(h_i, w_j)$影响,则有:62 - 假设:正向插值的输出图像out $(h, w)$受原图像input $(h_i, w_j)$影响,则有:
63- 63+ 
64 $$64 $$
65 gradInput(h_i,w_j) += gradOutput(h,w) * w(i) * w(j)65 gradInput(h_i,w_j) += gradOutput(h,w) * w(i) * w(j)
66 $$66 $$
67- 67+ 
68## 函数原型68## 函数原型
69 69 
70每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnUpsampleBilinear2dAABackwardGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnUpsampleBilinear2dAABackward”接口执行计算。70每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnUpsampleBilinear2dAABackwardGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnUpsampleBilinear2dAABackward”接口执行计算。
@@ -212,7 +212,7 @@ aclnnStatus aclnnUpsampleBilinear2dAABackward(
212* **返回值**212* **返回值**
213 213 
214 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。214 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
215- 215+ 
216 第一段接口完成入参校验,出现以下场景时报错:216 第一段接口完成入参校验,出现以下场景时报错:
217 217 
218 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>218 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
@@ -313,12 +313,12 @@ aclnnStatus aclnnUpsampleBilinear2dAABackward(
313 其中:313 其中:
314 - N代表输入和输出的N轴。314 - N代表输入和输出的N轴。
315 - C代表输入和输出的C轴。315 - C代表输入和输出的C轴。
316- - 输入数据缩放场景放大倍数必须小于等于50,即:316+ - 反向接口的输入数据缩倍数必须小于等于50,即:
317 317 
318 $$318 $$
319 outputSize\_H / 输出shape的高度H <= 50319 outputSize\_H / 输出shape的高度H <= 50
320 $$320 $$
321- 321+ 
322 $$322 $$
323 outputSize\_W / 输出shape的宽度W <=50323 outputSize\_W / 输出shape的宽度W <=50
324 $$324 $$
Mimage/upsample_bilinear2d_grad/docs/aclnnUpsampleBilinear2dBackwardV2.md+8-7
@@ -77,7 +77,7 @@
77 $$77 $$
78 78 
79 - 假设:正向插值的输出图像out $(x, y)$受原图像input $(x_i, y_j)$影响,则有:79 - 假设:正向插值的输出图像out $(x, y)$受原图像input $(x_i, y_j)$影响,则有:
80- 80+ 
81 $$81 $$
82 gradInput(x_i,y_j) += gradOutput(x,y) * lambda(x_i,y_j) * lambdb(x_i,y_j)82 gradInput(x_i,y_j) += gradOutput(x,y) * lambda(x_i,y_j) * lambdb(x_i,y_j)
83 $$83 $$
@@ -227,13 +227,13 @@ aclnnStatus aclnnUpsampleBilinear2dBackwardV2(
227 </table>227 </table>
228 228 
229 - <term>Atlas 训练系列产品</term><term>Atlas 推理系列产品</term>229 - <term>Atlas 训练系列产品</term><term>Atlas 推理系列产品</term>
230- 230+ 
231 参数`gradOut`、`out`的数据类型不支持BFLOAT16。231 参数`gradOut`、`out`的数据类型不支持BFLOAT16。
232 232 
233- **返回值**233- **返回值**
234 234 
235 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。235 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
236- 236+ 
237 第一段接口完成入参校验,出现以下场景时报错:237 第一段接口完成入参校验,出现以下场景时报错:
238 238 
239 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>239 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
@@ -255,8 +255,8 @@ aclnnStatus aclnnUpsampleBilinear2dBackwardV2(
255 <td>传入的gradOut、outputSize、inputSize或out是空指针。</td>255 <td>传入的gradOut、outputSize、inputSize或out是空指针。</td>
256 </tr>256 </tr>
257 <tr>257 <tr>
258- <td rowspan="12">ACLNN_ERR_PARAM_INVALID</td>258+ <td rowspan="10">ACLNN_ERR_PARAM_INVALID</td>
259- <td rowspan="12">161002</td>259+ <td rowspan="10">161002</td>
260 <td>gradOut、out的数据类型和数据格式不在支持的范围之内。</td>260 <td>gradOut、out的数据类型和数据格式不在支持的范围之内。</td>
261 </tr>261 </tr>
262 <tr>262 <tr>
@@ -336,15 +336,16 @@ aclnnStatus aclnnUpsampleBilinear2dBackwardV2(
336- 参数`gradOut``out`的shape约束:336- 参数`gradOut``out`的shape约束:
337 - 每个维度的取值小于等于2^20。337 - 每个维度的取值小于等于2^20。
338 - 参数`out`的N轴和C轴与`gradOut`保持一致。338 - 参数`out`的N轴和C轴与`gradOut`保持一致。
339- - 内存占用需小于60G。内存占用的计算公式如下:339+ - 内存占用需小于60GB。内存占用的计算公式如下:
340 340 
341 $$341 $$
342- (gradOut\_H * gradOut\_W + out\_H * out\_W + gradOut\_H * out\_W) * N * C * sizeof(float) < 60 * 1024 * 1024 * 1024342+ (gradOut\_H * gradOut\_W + out\_H * out\_W + gradOut\_H * out\_W) * N * C * sizeof(dtype) < 60 * 1024 * 1024 * 1024
343 $$343 $$
344 344 
345 其中:345 其中:
346 - N代表输入和输出的N轴。346 - N代表输入和输出的N轴。
347 - C代表输入和输出的C轴。347 - C代表输入和输出的C轴。
348+ - dtype代表输入张量的数据类型。
348 - N \* C \* gradOut_H < 2^31349 - N \* C \* gradOut_H < 2^31
349- 参数inputSize、outputSize、scalesH、scalesW需要满足如下约束:350- 参数inputSize、outputSize、scalesH、scalesW需要满足如下约束:
350 351 
Mimage/upsample_bilinear2d_grad/docs/aclnnUpsampleLinear1dBackward.md+20-19
@@ -33,7 +33,7 @@
33 \end{cases}33 \end{cases}
34 $$34 $$
35 35 
36- 因此,对于output的某个方向上的点p(x,y),映射回原始图像中的点记为q(x',y'),则有关系:36+ 因此,对于output的某个方向上的点p(x),映射回原始图像中的点记为q(x'),则有关系:
37 37 
38 $$38 $$
39 x' =\begin{cases}39 x' =\begin{cases}
@@ -55,7 +55,7 @@
55 $$55 $$
56 56 
57 - 假设:正向插值的输出图像out $(x)$受原图像input $(x_i)$影响,则有:57 - 假设:正向插值的输出图像out $(x)$受原图像input $(x_i)$影响,则有:
58- 58+ 
59 $$59 $$
60 gradInput(x_i) += gradOut(x) * lambda(x_i)60 gradInput(x_i) += gradOut(x) * lambda(x_i)
61 $$61 $$
@@ -66,21 +66,21 @@
66 66 
67```Cpp67```Cpp
68aclnnStatus aclnnUpsampleLinear1dBackwardGetWorkspaceSize(68aclnnStatus aclnnUpsampleLinear1dBackwardGetWorkspaceSize(
69- const aclTensor * gradOut, 69+ const aclTensor * gradOut,
70- const aclIntArray * outputSize, 70+ const aclIntArray * outputSize,
71- const aclIntArray * inputSize, 71+ const aclIntArray * inputSize,
72- bool alignCorners, 72+ bool alignCorners,
73- double scales, 73+ double scales,
74- aclTensor * out, 74+ aclTensor * out,
75- uint64_t * workspaceSize, 75+ uint64_t * workspaceSize,
76 aclOpExecutor ** executor)76 aclOpExecutor ** executor)
77```77```
78 78 
79```Cpp79```Cpp
80aclnnStatus aclnnUpsampleLinear1dBackward(80aclnnStatus aclnnUpsampleLinear1dBackward(
81- void * workspace, 81+ void * workspace,
82- uint64_t workspaceSize, 82+ uint64_t workspaceSize,
83- aclOpExecutor * executor, 83+ aclOpExecutor * executor,
84 aclrtStream stream)84 aclrtStream stream)
85```85```
86 86 
@@ -113,7 +113,7 @@ aclnnStatus aclnnUpsampleLinear1dBackward(
113 <tr>113 <tr>
114 <td>gradOut(aclTensor*)</td>114 <td>gradOut(aclTensor*)</td>
115 <td>输入</td>115 <td>输入</td>
116- <td>表示进行上采样输入张量,对应公式中的`gradOut`。</td>116+ <td>表示反向计算梯度Tensor,对应公式中的`gradOut`。</td>
117 <td><ul><li>不支持空Tensor。</li><li>当数据格式为ND时,默认按照NCL格式处理。</li></ul></td>117 <td><ul><li>不支持空Tensor。</li><li>当数据格式为ND时,默认按照NCL格式处理。</li></ul></td>
118 <td>FLOAT32、FLOAT16、BFLOAT16</td>118 <td>FLOAT32、FLOAT16、BFLOAT16</td>
119 <td>ND、NCL</td>119 <td>ND、NCL</td>
@@ -163,7 +163,7 @@ aclnnStatus aclnnUpsampleLinear1dBackward(
163 <tr>163 <tr>
164 <td>out(aclTensor*)</td>164 <td>out(aclTensor*)</td>
165 <td>输出</td>165 <td>输出</td>
166- <td>表示采样后的输出张量,对应公式中的`gradInput`。</td>166+ <td>表示反向计算的输出Tensor,对应公式中的`gradInput`。</td>
167 <td><ul><li>不支持空Tensor</li><li>输出维度必须是3维。数据类型、数据格式与入参`gradOut`保持一致。</li></ul></td>167 <td><ul><li>不支持空Tensor</li><li>输出维度必须是3维。数据类型、数据格式与入参`gradOut`保持一致。</li></ul></td>
168 <td>FLOAT32、FLOAT16、BFLOAT16</td>168 <td>FLOAT32、FLOAT16、BFLOAT16</td>
169 <td>NCL</td>169 <td>NCL</td>
@@ -196,7 +196,7 @@ aclnnStatus aclnnUpsampleLinear1dBackward(
196 - <term>Atlas 训练系列产品</term>196 - <term>Atlas 训练系列产品</term>
197 197 
198 入参`gradOut`和出参`out`的数据类型仅支持FLOAT32、FLOAT16。198 入参`gradOut`和出参`out`的数据类型仅支持FLOAT32、FLOAT16。
199- 199+ 
200 - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>200 - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>
201 201 
202 入参`gradOut`:当gradOut的shape对应轴的值与inputSize对应轴的值不相同时,数据类型仅支持FLOAT32、FLOAT16。202 入参`gradOut`:当gradOut的shape对应轴的值与inputSize对应轴的值不相同时,数据类型仅支持FLOAT32、FLOAT16。
@@ -204,7 +204,7 @@ aclnnStatus aclnnUpsampleLinear1dBackward(
204- **返回值**204- **返回值**
205 205 
206 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。206 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
207- 207+ 
208 第一段接口完成入参校验,出现以下场景时报错:208 第一段接口完成入参校验,出现以下场景时报错:
209 209 
210 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>210 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
@@ -302,7 +302,7 @@ aclnnStatus aclnnUpsampleLinear1dBackward(
302- 参数`gradOut``out`的shape约束:302- 参数`gradOut``out`的shape约束:
303 - 每个维度的取值小于等于2^20。303 - 每个维度的取值小于等于2^20。
304 - 参数`out`的N轴和C轴与`gradOut`保持一致。304 - 参数`out`的N轴和C轴与`gradOut`保持一致。
305- - 内存占用需小于60G。内存占用的计算公式如下:305+ - 内存占用需小于60GB。内存占用的计算公式如下:
306 306 
307 $$307 $$
308 (gradOut\_L + out\_L + out\_L) * N * C * sizeof(dtype) < 60 * 1024 * 1024 * 1024308 (gradOut\_L + out\_L + out\_L) * N * C * sizeof(dtype) < 60 * 1024 * 1024 * 1024
@@ -311,10 +311,11 @@ aclnnStatus aclnnUpsampleLinear1dBackward(
311 其中:311 其中:
312 - N代表输入和输出的N轴。312 - N代表输入和输出的N轴。
313 - C代表输入和输出的C轴。313 - C代表输入和输出的C轴。
314+ - dtype代表输入张量的数据类型。
314 - N * C < 2^31315 - N * C < 2^31
315- 入参`gradOut`和出参`out`的数据格式不为NCL或ND时,输入其他数据格式默认按照NCL处理。316- 入参`gradOut`和出参`out`的数据格式不为NCL或ND时,输入其他数据格式默认按照NCL处理。
316-- <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>、<term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:输入数据缩放场景放大倍数必须小于等于500,即:317+- <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>、<term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:反向接口的输入数据缩倍数必须小于等于500,即:
317- 318+ 
318 $$319 $$
319 outputSize[0] / 输出shape的长度L <= 500320 outputSize[0] / 输出shape的长度L <= 500
320 $$321 $$
Mimage/upsample_linear1d/README.md+3-3
@@ -35,8 +35,8 @@
35 35 
36 $$36 $$
37 x' =\begin{cases}37 x' =\begin{cases}
38- x * scale\_h & alignCorners=true \\38+ x * scale & alignCorners=true \\
39- MAX(0,{(x+0.5)*scale\_h-0.5}) & alignCorners=false39+ MAX(0,{(x+0.5)*scale-0.5}) & alignCorners=false
40 \end{cases}40 \end{cases}
41 $$41 $$
42 42 
@@ -49,7 +49,7 @@
49 - 则有以下公式:49 - 则有以下公式:
50 50 
51 $$51 $$
52- {V(p_{x})} = {V(p_{x0})} * {lambda_{0}} + {V(p_{x1})} * {lambda_{1}} 52+ {V(p_{x})} = {V(p_{x0})} * {lambda_{0}} + {V(p_{x1})} * {lambda_{1}}
53 $$53 $$
54 54 
55## 参数说明55## 参数说明
Mimage/upsample_linear1d/docs/aclnnUpsampleLinear1d.md+14-14
@@ -37,8 +37,8 @@
37 37 
38 $$38 $$
39 x' =\begin{cases}39 x' =\begin{cases}
40- x * scale\_h & alignCorners=true \\40+ x * scale & alignCorners=true \\
41- MAX(0,{(x+0.5)*scale\_h-0.5}) & alignCorners=false41+ MAX(0,{(x+0.5)*scale-0.5}) & alignCorners=false
42 \end{cases}42 \end{cases}
43 $$43 $$
44 44 
@@ -51,7 +51,7 @@
51 - 则有以下公式:51 - 则有以下公式:
52 52 
53 $$53 $$
54- {V(p_{x})} = {V(p_{x0})} * {lambda_{0}} + {V(p_{x1})} * {lambda_{1}} 54+ {V(p_{x})} = {V(p_{x0})} * {lambda_{0}} + {V(p_{x1})} * {lambda_{1}}
55 $$55 $$
56 56 
57## 函数原型57## 函数原型
@@ -60,20 +60,20 @@
60 60 
61```Cpp61```Cpp
62aclnnStatus aclnnUpsampleLinear1dGetWorkspaceSize(62aclnnStatus aclnnUpsampleLinear1dGetWorkspaceSize(
63- const aclTensor *self, 63+ const aclTensor *self,
64 const aclIntArray *outputSize,64 const aclIntArray *outputSize,
65- const bool alignCorners, 65+ const bool alignCorners,
66- const double scales, 66+ const double scales,
67- aclTensor *out, 67+ aclTensor *out,
68- uint64_t *workspaceSize, 68+ uint64_t *workspaceSize,
69 aclOpExecutor **executor)69 aclOpExecutor **executor)
70```70```
71 71 
72```Cpp72```Cpp
73aclnnStatus aclnnUpsampleLinear1d(73aclnnStatus aclnnUpsampleLinear1d(
74- void *workspace, 74+ void *workspace,
75- uint64_t workspaceSize, 75+ uint64_t workspaceSize,
76- aclOpExecutor *executor, 76+ aclOpExecutor *executor,
77 aclrtStream stream)77 aclrtStream stream)
78```78```
79 79 
@@ -128,8 +128,8 @@ aclnnStatus aclnnUpsampleLinear1d(
128 <td>alignCorners(bool)</td>128 <td>alignCorners(bool)</td>
129 <td>输入</td>129 <td>输入</td>
130 <td>bool类型参数,决定是否对齐角像素点,对应公式中的`alignCorners`。</td>130 <td>bool类型参数,决定是否对齐角像素点,对应公式中的`alignCorners`。</td>
131- <td><ul><li>如果设置为True,则输入和输出张量按其角像素的中心点对齐,保留角像素处的值。</li>131+ <td><ul><li>如果设置为true,则输入和输出张量按其角像素的中心点对齐,保留角像素处的值。</li>
132- <li>如果设置为False,则输入和输出张量通过其角像素的角点对齐,并且插值使用边缘值填充用于外界边值,使此操作在保持不变时独立于输入大小scales。</li></ul></td>132+ <li>如果设置为false,则输入和输出张量通过其角像素的角点对齐,并且插值使用边缘值填充用于外界边值,使此操作在保持不变时独立于输入大小scales。</li></ul></td>
133 <td>-</td>133 <td>-</td>
134 <td>-</td>134 <td>-</td>
135 <td>-</td>135 <td>-</td>
@@ -185,7 +185,7 @@ aclnnStatus aclnnUpsampleLinear1d(
185- **返回值**185- **返回值**
186 186 
187 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。187 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
188- 188+ 
189 第一段接口完成入参校验,出现以下场景时报错:189 第一段接口完成入参校验,出现以下场景时报错:
190 190 
191 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>191 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
Mimage/upsample_nearest/docs/aclnnUpsampleNearestExact1d.md+17-12
@@ -17,9 +17,13 @@
17 17 
18- 接口功能:对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。如果输入shape为(N, C, L),则输出shape为(N, C, outputSize)。18- 接口功能:对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。如果输入shape为(N, C, L),则输出shape为(N, C, outputSize)。
19- 计算公式:19- 计算公式:
20- 20+ 
21 $$21 $$
22- out(N, C, l) = self(N, C, min(floor((l + 0.5) * scales), L-1))22+ l_{src} = min(floor((l_{dst} + 0.5) / scales), L - 1), \quad scales = outputSize[0] / L
23+ $$
24+ 
25+ $$
26+ out(N, C, l_{dst}) = self(N, C, l_{src})
23 $$27 $$
24 28 
25## 函数原型29## 函数原型
@@ -28,19 +32,19 @@
28 32 
29```cpp33```cpp
30aclnnStatus aclnnUpsampleNearestExact1dGetWorkspaceSize(34aclnnStatus aclnnUpsampleNearestExact1dGetWorkspaceSize(
31- const aclTensor *self, 35+ const aclTensor *self,
32 const aclIntArray *outputSize,36 const aclIntArray *outputSize,
33- double scales, 37+ double scales,
34- aclTensor *out, 38+ aclTensor *out,
35- uint64_t *workspaceSize, 39+ uint64_t *workspaceSize,
36 aclOpExecutor **executor)40 aclOpExecutor **executor)
37```41```
38 42 
39```cpp43```cpp
40aclnnStatus aclnnUpsampleNearestExact1d(44aclnnStatus aclnnUpsampleNearestExact1d(
41- void *workspace, 45+ void *workspace,
42- uint64_t workspaceSize, 46+ uint64_t workspaceSize,
43- aclOpExecutor *executor, 47+ aclOpExecutor *executor,
44 aclrtStream stream)48 aclrtStream stream)
45```49```
46 50 
@@ -133,7 +137,7 @@ aclnnStatus aclnnUpsampleNearestExact1d(
133 </table>137 </table>
134 138 
135 - <term>Atlas 推理系列产品</term>139 - <term>Atlas 推理系列产品</term>
136- 140+ 
137 入参`self`和出参`out`的数据类型不支持BFLOAT16。141 入参`self`和出参`out`的数据类型不支持BFLOAT16。
138 142 
139- **返回值**143- **返回值**
@@ -222,8 +226,8 @@ aclnnStatus aclnnUpsampleNearestExact1d(
222 参数`self``out`的shape约束:226 参数`self``out`的shape约束:
223 - 每个维度的取值小于等于2^20。227 - 每个维度的取值小于等于2^20。
224 - 参数`out`的N轴和C轴与`self`保持一致。228 - 参数`out`的N轴和C轴与`self`保持一致。
225- - 内存占用需小于60G。内存占用的计算公式如下:229+ - 内存占用需小于60GB。内存占用的计算公式如下:
226- 230+ 
227 $$231 $$
228 N * (ceil(C/16) * 16) * (self\_L + out\_L) * sizeof(dtype) < 60 * 1024 * 1024 * 1024232 N * (ceil(C/16) * 16) * (self\_L + out\_L) * sizeof(dtype) < 60 * 1024 * 1024 * 1024
229 $$233 $$
@@ -231,6 +235,7 @@ aclnnStatus aclnnUpsampleNearestExact1d(
231 其中:235 其中:
232 - N代表输入和输出的N轴。236 - N代表输入和输出的N轴。
233 - C代表输入和输出的C轴。237 - C代表输入和输出的C轴。
238+ - dtype代表输入张量的数据类型。
234- 参数self、outputSize、scales需要满足如下约束:239- 参数self、outputSize、scales需要满足如下约束:
235 240 
236 $$241 $$
Mimage/upsample_nearest/docs/aclnnUpsampleNearestExact2d.md+17-16
@@ -19,11 +19,11 @@
19- 计算公式:19- 计算公式:
20 20 
21 $$21 $$
22- h_{src} = min(floor((h_{dst} + 0.5) / scalesH), H - 1),scalesH = outputSize[0] / H22+ h_{src} = min(floor((h_{dst} + 0.5) / scalesH), H - 1), \quad scalesH = outputSize[0] / H
23 $$23 $$
24 24 
25 $$25 $$
26- w_{src} = min(floor((w_{dst} + 0.5) / scalesW), W - 1),scalesW = outputSize[1] / W26+ w_{src} = min(floor((w_{dst} + 0.5) / scalesW), W - 1), \quad scalesW = outputSize[1] / W
27 $$27 $$
28 28 
29 $$29 $$
@@ -36,20 +36,20 @@
36 36 
37```Cpp37```Cpp
38aclnnStatus aclnnUpsampleNearestExact2dGetWorkspaceSize(38aclnnStatus aclnnUpsampleNearestExact2dGetWorkspaceSize(
39- const aclTensor *self, 39+ const aclTensor *self,
40- const aclIntArray *outputSize, 40+ const aclIntArray *outputSize,
41- double scalesH, 41+ double scalesH,
42- double scalesW, 42+ double scalesW,
43- aclTensor *out, 43+ aclTensor *out,
44- uint64_t *workspaceSize, 44+ uint64_t *workspaceSize,
45 aclOpExecutor **executor)45 aclOpExecutor **executor)
46```46```
47 47 
48```Cpp48```Cpp
49aclnnStatus aclnnUpsampleNearestExact2d(49aclnnStatus aclnnUpsampleNearestExact2d(
50- void *workspace, 50+ void *workspace,
51- uint64_t workspaceSize, 51+ uint64_t workspaceSize,
52- aclOpExecutor *executor, 52+ aclOpExecutor *executor,
53 aclrtStream stream)53 aclrtStream stream)
54```54```
55 55 
@@ -153,15 +153,15 @@ aclnnStatus aclnnUpsampleNearestExact2d(
153 </table>153 </table>
154 154 
155 - <term>Atlas 推理系列产品</term>155 - <term>Atlas 推理系列产品</term>
156- 156+ 
157 参数self、out的数据类型仅支持FLOAT32、FLOAT16。157 参数self、out的数据类型仅支持FLOAT32、FLOAT16。
158- 158+ 
159- **返回值**159- **返回值**
160 160 
161 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。161 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
162 162 
163 第一段接口完成入参校验,出现以下场景时报错:163 第一段接口完成入参校验,出现以下场景时报错:
164- 164+ 
165 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>165 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
166 <col style="width: 268px">166 <col style="width: 268px">
167 <col style="width: 140px">167 <col style="width: 140px">
@@ -246,8 +246,8 @@ aclnnStatus aclnnUpsampleNearestExact2d(
246 参数`self``out`的shape约束:246 参数`self``out`的shape约束:
247 - 每个维度的取值小于等于2^20。247 - 每个维度的取值小于等于2^20。
248 - 参数`out`的N轴和C轴与`self`保持一致。248 - 参数`out`的N轴和C轴与`self`保持一致。
249- - 内存占用需小于60G。内存占用的计算公式如下:249+ - 内存占用需小于60GB。内存占用的计算公式如下:
250- 250+ 
251 $$251 $$
252 N * (ceil(C/16) * 16) * (self\_H * self\_W + out\_H * out\_W) * sizeof(dtype) < 60 * 1024 * 1024 * 1024252 N * (ceil(C/16) * 16) * (self\_H * self\_W + out\_H * out\_W) * sizeof(dtype) < 60 * 1024 * 1024 * 1024
253 $$253 $$
@@ -255,6 +255,7 @@ aclnnStatus aclnnUpsampleNearestExact2d(
255 其中:255 其中:
256 - N代表输入和输出的N轴。256 - N代表输入和输出的N轴。
257 - C代表输入和输出的C轴。257 - C代表输入和输出的C轴。
258+ - dtype代表输入张量的数据类型。
258- 参数self、outputSize、scalesH、scalesW需要满足如下约束:259- 参数self、outputSize、scalesH、scalesW需要满足如下约束:
259 260 
260 $$261 $$
Mimage/upsample_nearest2d_grad/README.md+6-6
@@ -25,27 +25,27 @@
25 其中:25 其中:
26 26 
27 $$27 $$
28- scalesH = inputSize[2]/outputSize[0]28+ scalesH = outputSize[0]/inputSize[2]
29 $$29 $$
30 30 
31 $$31 $$
32- scalesW = inputSize[3]/outputSize[1]32+ scalesW = outputSize[1]/inputSize[3]
33 $$33 $$
34 34 
35 $$35 $$
36- srcH = Min(scalesH * H, outputSize[0])36+ srcH = Min(ceil(scalesH * H), outputSize[0])
37 $$37 $$
38 38 
39 $$39 $$
40- srcHUp = Min(scalesH * (H + 1), outputSize[0])40+ srcHUp = Min(ceil(scalesH * (H + 1)), outputSize[0])
41 $$41 $$
42 42 
43 $$43 $$
44- srcW = Min(scalesW * W, outputSize[1])44+ srcW = Min(ceil(scalesW * W), outputSize[1])
45 $$45 $$
46 46 
47 $$47 $$
48- srcHUp = Min(scalesW * (W + 1), outputSize[1])48+ srcWUp = Min(ceil(scalesW * (W + 1)), outputSize[1])
49 $$49 $$
50 50 
51## 参数说明51## 参数说明
Mimage/upsample_nearest2d_grad/docs/aclnnUpsampleNearest1dBackward.md+14-14
@@ -28,15 +28,15 @@
28 其中:28 其中:
29 29 
30 $$30 $$
31- scalesL = inputSize[2]/outputSize[0]31+ scalesL = outputSize[0]/inputSize[2]
32 $$32 $$
33 33 
34 $$34 $$
35- srcL = Min(scalesL * L, outputSize[0])35+ srcL = Min(ceil(scalesL * L), outputSize[0])
36 $$36 $$
37 37 
38 $$38 $$
39- srcLUp = Min(scalesL * (L + 1), outputSize[0])39+ srcLUp = Min(ceil(scalesL * (L + 1)), outputSize[0])
40 $$40 $$
41 41 
42## 函数原型42## 函数原型
@@ -45,20 +45,20 @@
45 45 
46```Cpp46```Cpp
47aclnnStatus aclnnUpsampleNearest1dBackwardGetWorkspaceSize(47aclnnStatus aclnnUpsampleNearest1dBackwardGetWorkspaceSize(
48- const aclTensor *gradOut, 48+ const aclTensor *gradOut,
49- const aclIntArray *outputSize, 49+ const aclIntArray *outputSize,
50- const aclIntArray *inputSize, 50+ const aclIntArray *inputSize,
51- double scales, 51+ double scales,
52- aclTensor *out, 52+ aclTensor *out,
53- uint64_t *workspaceSize, 53+ uint64_t *workspaceSize,
54 aclOpExecutor **executor)54 aclOpExecutor **executor)
55```55```
56 56 
57```Cpp57```Cpp
58aclnnStatus aclnnUpsampleNearest1dBackward(58aclnnStatus aclnnUpsampleNearest1dBackward(
59- void *workspace, 59+ void *workspace,
60- uint64_t workspaceSize, 60+ uint64_t workspaceSize,
61- aclOpExecutor *executor, 61+ aclOpExecutor *executor,
62 aclrtStream stream)62 aclrtStream stream)
63```63```
64 64 
@@ -164,11 +164,11 @@ aclnnStatus aclnnUpsampleNearest1dBackward(
164 </table>164 </table>
165 165 
166 - <term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>:入参`gradOut`和出参`out`的数据类型仅支持FLOAT16。166 - <term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>:入参`gradOut`和出参`out`的数据类型仅支持FLOAT16。
167- 167+ 
168- **返回值**168- **返回值**
169 169 
170 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。170 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
171- 171+ 
172 第一段接口完成入参校验,出现以下场景时报错:172 第一段接口完成入参校验,出现以下场景时报错:
173 173 
174 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>174 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
Mimage/upsample_nearest2d_grad/docs/aclnnUpsampleNearest2dBackward.md+19-19
@@ -28,27 +28,27 @@
28 其中:28 其中:
29 29 
30 $$30 $$
31- scalesH = inputSize[2]/outputSize[0]31+ scalesH = outputSize[0]/inputSize[2]
32 $$32 $$
33 33 
34 $$34 $$
35- scalesW = inputSize[3]/outputSize[1]35+ scalesW = outputSize[1]/inputSize[3]
36 $$36 $$
37 37 
38 $$38 $$
39- srcH = Min(scalesH * H, outputSize[0])39+ srcH = Min(ceil(scalesH * H), outputSize[0])
40 $$40 $$
41 41 
42 $$42 $$
43- srcHUp = Min(scalesH * (H + 1), outputSize[0])43+ srcHUp = Min(ceil(scalesH * (H + 1)), outputSize[0])
44 $$44 $$
45 45 
46 $$46 $$
47- srcW = Min(scalesW * W, outputSize[1])47+ srcW = Min(ceil(scalesW * W), outputSize[1])
48 $$48 $$
49 49 
50 $$50 $$
51- srcHUp = Min(scalesW * (W + 1), outputSize[1])51+ srcWUp = Min(ceil(scalesW * (W + 1)), outputSize[1])
52 $$52 $$
53 53 
54## 函数原型54## 函数原型
@@ -57,21 +57,21 @@
57 57 
58```Cpp58```Cpp
59aclnnStatus aclnnUpsampleNearest2dBackwardGetWorkspaceSize(59aclnnStatus aclnnUpsampleNearest2dBackwardGetWorkspaceSize(
60- const aclTensor *gradOut, 60+ const aclTensor *gradOut,
61- const aclIntArray *outputSize, 61+ const aclIntArray *outputSize,
62- const aclIntArray *inputSize, 62+ const aclIntArray *inputSize,
63- double scalesH, 63+ double scalesH,
64- double scalesW, 64+ double scalesW,
65- aclTensor* gradInput, 65+ aclTensor* gradInput,
66- uint64_t *workspaceSize, 66+ uint64_t *workspaceSize,
67 aclOpExecutor **executor)67 aclOpExecutor **executor)
68```68```
69 69 
70```Cpp70```Cpp
71aclnnStatus aclnnUpsampleNearest2dBackward(71aclnnStatus aclnnUpsampleNearest2dBackward(
72- void *workspace, 72+ void *workspace,
73- uint64_t workspaceSize, 73+ uint64_t workspaceSize,
74- aclOpExecutor *executor, 74+ aclOpExecutor *executor,
75 aclrtStream stream)75 aclrtStream stream)
76```76```
77 77 
@@ -185,13 +185,13 @@ aclnnStatus aclnnUpsampleNearest2dBackward(
185 </table>185 </table>
186 186 
187 - <term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>187 - <term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>
188- 188+ 
189 入参`gradOut`和出参`gradInput`的数据类型仅支持FLOAT16。189 入参`gradOut`和出参`gradInput`的数据类型仅支持FLOAT16。
190- 190+ 
191- **返回值**191- **返回值**
192 192 
193 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。193 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
194- 194+ 
195 第一段接口完成入参校验,出现以下场景时报错:195 第一段接口完成入参校验,出现以下场景时报错:
196 196 
197 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>197 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
Mimage/upsample_nearest3d/README.md+3-6
@@ -25,18 +25,15 @@
25 对于out的某个方向上的点p(x,y,z),映射回原始图像中的点记为q(x',y',z'),则有关系:25 对于out的某个方向上的点p(x,y,z),映射回原始图像中的点记为q(x',y',z'),则有关系:
26 26 
27 $$27 $$
28- x' = \min(\lfloor x * scales\_depth \rfloor, self\_D - 1) ,\ 28+ x' = \min(\lfloor x * scales\_depth \rfloor, self\_D - 1), \quad scales\_depth = self\_D / outputSize[0]
29- scales\_depth = self\_D / outputSize[0]
30 $$29 $$
31 30 
32 $$31 $$
33- y' = \min(\lfloor y * scales\_height \rfloor, self\_H - 1) ,\ 32+ y' = \min(\lfloor y * scales\_height \rfloor, self\_H - 1), \quad scales\_height = self\_H / outputSize[1]
34- scales\_height = self\_H / outputSize[1]
35 $$33 $$
36 34 
37 $$35 $$
38- z' = \min(\lfloor z * scales\_width \rfloor, self\_W - 1) ,\ 36+ z' = \min(\lfloor z * scales\_width \rfloor, self\_W - 1), \quad scales\_width = self\_W / outputSize[2]
39- scales\_width = self\_W / outputSize[2]
40 $$37 $$
41 38 
42 则有以下公式:39 则有以下公式:
Mimage/upsample_nearest3d/docs/aclnnUpsampleNearest1dV2.md+12-12
@@ -18,9 +18,9 @@
18- 接口功能:对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。如果输入shape为(N, C, L),则输出shape为(N, C, outputSize)。本接口相较于[aclnnUpsampleNearest1d](../../resize_nearest_neighbor_v2/docs/aclnnUpsampleNearest1d.md),增加入参scaleL,请根据实际情况选择合适的接口。18- 接口功能:对由多个输入通道组成的输入信号应用最近邻插值算法进行上采样。如果输入shape为(N, C, L),则输出shape为(N, C, outputSize)。本接口相较于[aclnnUpsampleNearest1d](../../resize_nearest_neighbor_v2/docs/aclnnUpsampleNearest1d.md),增加入参scaleL,请根据实际情况选择合适的接口。
19 19 
20- 计算公式:20- 计算公式:
21- 21+ 
22 $$22 $$
23- out(N, C, l) = self(N, C, min(floor(l * scaleL), L-1)), \ scaleL = outputSize[0] / self\_L23+ out(N, C, l) = self(N, C, min(floor(l * scaleL), L-1)), \quad scaleL = outputSize[0] / self\_L
24 $$24 $$
25 25 
26## 函数原型26## 函数原型
@@ -29,19 +29,19 @@
29 29 
30```Cpp30```Cpp
31aclnnStatus aclnnUpsampleNearest1dV2GetWorkspaceSize(31aclnnStatus aclnnUpsampleNearest1dV2GetWorkspaceSize(
32- const aclTensor *self, 32+ const aclTensor *self,
33- const aclIntArray *outputSize, 33+ const aclIntArray *outputSize,
34 float scaleL,34 float scaleL,
35- aclTensor *out, 35+ aclTensor *out,
36- uint64_t *workspaceSize, 36+ uint64_t *workspaceSize,
37 aclOpExecutor **executor)37 aclOpExecutor **executor)
38```38```
39 39 
40```Cpp40```Cpp
41aclnnStatus aclnnUpsampleNearest1dV2(41aclnnStatus aclnnUpsampleNearest1dV2(
42- void *workspace, 42+ void *workspace,
43- uint64_t workspaceSize, 43+ uint64_t workspaceSize,
44- aclOpExecutor *executor, 44+ aclOpExecutor *executor,
45 aclrtStream stream)45 aclrtStream stream)
46```46```
47 47 
@@ -136,13 +136,13 @@ aclnnStatus aclnnUpsampleNearest1dV2(
136 </table>136 </table>
137 137 
138 - <term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>138 - <term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>
139- 139+ 
140 入参`self`和出参`out`的数据类型不支持BFLOAT16。140 入参`self`和出参`out`的数据类型不支持BFLOAT16。
141- 141+ 
142- **返回值**142- **返回值**
143 143 
144 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。144 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
145- 145+ 
146 第一段接口完成入参校验,出现以下场景时报错:146 第一段接口完成入参校验,出现以下场景时报错:
147 147 
148 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>148 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
Mimage/upsample_nearest3d/docs/aclnnUpsampleNearest2dV2.md+12-12
@@ -20,11 +20,11 @@
20- 计算公式:20- 计算公式:
21 21 
22 $$22 $$
23- h_{src} = min(floor(h_{dst} * scalesH), H - 1), \ scalesH = outputSize[0] / self\_H23+ h_{src} = min(floor(h_{dst} * scalesH), H - 1), \quad scalesH = outputSize[0] / self\_H
24 $$24 $$
25 25 
26 $$26 $$
27- w_{src} = min(floor(w_{dst} * scalesW), W - 1), \ scalesW = outputSize[1] / self\_W27+ w_{src} = min(floor(w_{dst} * scalesW), W - 1), \quad scalesW = outputSize[1] / self\_W
28 $$28 $$
29 29 
30 $$30 $$
@@ -37,20 +37,20 @@
37 37 
38```Cpp38```Cpp
39aclnnStatus aclnnUpsampleNearest2dV2GetWorkspaceSize(39aclnnStatus aclnnUpsampleNearest2dV2GetWorkspaceSize(
40- const aclTensor *self, 40+ const aclTensor *self,
41- const aclIntArray *outputSize, 41+ const aclIntArray *outputSize,
42- float scalesH, 42+ float scalesH,
43- float scalesW, 43+ float scalesW,
44- aclTensor *out, 44+ aclTensor *out,
45- uint64_t *workspaceSize, 45+ uint64_t *workspaceSize,
46 aclOpExecutor **executor)46 aclOpExecutor **executor)
47```47```
48 48 
49```Cpp49```Cpp
50aclnnStatus aclnnUpsampleNearest2dV2(50aclnnStatus aclnnUpsampleNearest2dV2(
51- void *workspace, 51+ void *workspace,
52- uint64_t workspaceSize, 52+ uint64_t workspaceSize,
53- aclOpExecutor *executor, 53+ aclOpExecutor *executor,
54 aclrtStream stream)54 aclrtStream stream)
55```55```
56 56 
@@ -154,7 +154,7 @@ aclnnStatus aclnnUpsampleNearest2dV2(
154 </table>154 </table>
155 155 
156 - <term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>156 - <term>Atlas 推理系列产品</term><term>Atlas 训练系列产品</term>
157- 157+ 
158 入参`self`和出参`out`的数据类型不支持FLOAT32、BFLOAT16。158 入参`self`和出参`out`的数据类型不支持FLOAT32、BFLOAT16。
159 159 
160- **返回值**160- **返回值**
Mimage/upsample_nearest3d/docs/aclnnUpsampleNearest3d.md+15-15
@@ -23,15 +23,15 @@
23 - 具体计算逻辑:23 - 具体计算逻辑:
24 24 
25 $$25 $$
26- d_{src} = min(floor(d_{dst} / scalesD), self\_D - 1), \ scalesD = outputSize[0] / self\_D26+ d_{src} = min(floor(d_{dst} / scalesD), self\_D - 1), \quad scalesD = outputSize[0] / self\_D
27 $$27 $$
28 28 
29 $$29 $$
30- h_{src} = min(floor(h_{dst} / scalesH), self\_H - 1), \ scalesH = outputSize[1] / self\_H30+ h_{src} = min(floor(h_{dst} / scalesH), self\_H - 1), \quad scalesH = outputSize[1] / self\_H
31 $$31 $$
32 32 
33 $$33 $$
34- w_{src} = min(floor(w_{dst} / scalesW), self\_W - 1), \ scalesW = outputSize[2] / self\_W34+ w_{src} = min(floor(w_{dst} / scalesW), self\_W - 1), \quad scalesW = outputSize[2] / self\_W
35 $$35 $$
36 36 
37 $$37 $$
@@ -44,21 +44,21 @@
44 44 
45```Cpp45```Cpp
46aclnnStatus aclnnUpsampleNearest3dGetWorkspaceSize(46aclnnStatus aclnnUpsampleNearest3dGetWorkspaceSize(
47- const aclTensor *self, 47+ const aclTensor *self,
48- const aclIntArray *outputSize, 48+ const aclIntArray *outputSize,
49- double scalesD, 49+ double scalesD,
50- double scalesH, 50+ double scalesH,
51- double scalesW, 51+ double scalesW,
52- aclTensor *out, 52+ aclTensor *out,
53- uint64_t *workspaceSize, 53+ uint64_t *workspaceSize,
54 aclOpExecutor **executor)54 aclOpExecutor **executor)
55```55```
56 56 
57```Cpp57```Cpp
58aclnnStatus aclnnUpsampleNearest3d(58aclnnStatus aclnnUpsampleNearest3d(
59- void *workspace, 59+ void *workspace,
60- uint64_t workspaceSize, 60+ uint64_t workspaceSize,
61- aclOpExecutor *executor, 61+ aclOpExecutor *executor,
62 aclrtStream stream)62 aclrtStream stream)
63```63```
64 64 
@@ -183,9 +183,9 @@ aclnnStatus aclnnUpsampleNearest3d(
183- **返回值**183- **返回值**
184 184 
185 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。185 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
186- 186+ 
187 第一段接口完成入参校验,出现以下场景时报错:187 第一段接口完成入参校验,出现以下场景时报错:
188- 188+ 
189 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>189 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
190 <col style="width: 268px">190 <col style="width: 268px">
191 <col style="width: 140px">191 <col style="width: 140px">
Mimage/upsample_nearest3d_grad/README.md+13-13
@@ -15,7 +15,7 @@
15 15 
16- 算子功能:[UpsampleNearest3d](../upsample_nearest3d/README.md)的反向计算。16- 算子功能:[UpsampleNearest3d](../upsample_nearest3d/README.md)的反向计算。
17- 计算公式:17- 计算公式:
18- 18+ 
19 对于输入gradOut(N, C, d, h, w),输出gradInput上任意一点(N, C, D, H, W),则有:19 对于输入gradOut(N, C, d, h, w),输出gradInput上任意一点(N, C, D, H, W),则有:
20 20 
21 $$21 $$
@@ -25,39 +25,39 @@
25 其中:25 其中:
26 26 
27 $$27 $$
28- scalesD = inputSize[2]/outputSize[0]28+ scalesD = outputSize[0]/inputSize[2]
29 $$29 $$
30 30 
31 $$31 $$
32- scalesH = inputSize[3]/outputSize[1]32+ scalesH = outputSize[1]/inputSize[3]
33 $$33 $$
34 34 
35 $$35 $$
36- scalesW = inputSize[4]/outputSize[2]36+ scalesW = outputSize[2]/inputSize[4]
37- $$
38-
39- $$
40- srcD = Min(scalesD * D, outputSize[0])
41 $$37 $$
42 38 
43 $$39 $$
44- srcDUp = Min(scalesD * (D + 1), outputSize[0])40+ srcD = Min(ceil(scalesD * D), outputSize[0])
45 $$41 $$
46 42 
47 $$43 $$
48- srcH = Min(scalesH * H, outputSize[1])44+ srcDUp = Min(ceil(scalesD * (D + 1)), outputSize[0])
49 $$45 $$
50 46 
51 $$47 $$
52- srcHUp = Min(scalesH * (H + 1), outputSize[1])48+ srcH = Min(ceil(scalesH * H), outputSize[1])
53 $$49 $$
54 50 
55 $$51 $$
56- srcW = Min(scalesW * W, outputSize[2])52+ srcHUp = Min(ceil(scalesH * (H + 1)), outputSize[1])
57 $$53 $$
58 54 
59 $$55 $$
60- srcHUp = Min(scalesW * (W + 1), outputSize[2])56+ srcW = Min(ceil(scalesW * W), outputSize[2])
57+ $$
58+ 
59+ $$
60+ srcWUp = Min(ceil(scalesW * (W + 1)), outputSize[2])
61 $$61 $$
62 62 
63## 参数说明63## 参数说明
Mimage/upsample_nearest3d_grad/docs/aclnnUpsampleNearest3dBackward.md+30-29
@@ -27,39 +27,39 @@
27 其中:27 其中:
28 28 
29 $$29 $$
30- scalesD = inputSize[2]/outputSize[0]30+ scalesD = outputSize[0]/inputSize[2]
31 $$31 $$
32 32 
33 $$33 $$
34- scalesH = inputSize[3]/outputSize[1]34+ scalesH = outputSize[1]/inputSize[3]
35 $$35 $$
36 36 
37 $$37 $$
38- scalesW = inputSize[4]/outputSize[2]38+ scalesW = outputSize[2]/inputSize[4]
39- $$
40-
41- $$
42- srcD = Min(scalesD * D, outputSize[0])
43 $$39 $$
44 40 
45 $$41 $$
46- srcDUp = Min(scalesD * (D + 1), outputSize[0])42+ srcD = Min(ceil(scalesD * D), outputSize[0])
47 $$43 $$
48 44 
49 $$45 $$
50- srcH = Min(scalesH * H, outputSize[1])46+ srcDUp = Min(ceil(scalesD * (D + 1)), outputSize[0])
51 $$47 $$
52 48 
53 $$49 $$
54- srcHUp = Min(scalesH * (H + 1), outputSize[1])50+ srcH = Min(ceil(scalesH * H), outputSize[1])
55 $$51 $$
56 52 
57 $$53 $$
58- srcW = Min(scalesW * W, outputSize[2])54+ srcHUp = Min(ceil(scalesH * (H + 1)), outputSize[1])
59 $$55 $$
60 56 
61 $$57 $$
62- srcHUp = Min(scalesW * (W + 1), outputSize[2])58+ srcW = Min(ceil(scalesW * W), outputSize[2])
59+ $$
60+ 
61+ $$
62+ srcWUp = Min(ceil(scalesW * (W + 1)), outputSize[2])
63 $$63 $$
64 64 
65## 函数原型65## 函数原型
@@ -68,22 +68,22 @@
68 68 
69```Cpp69```Cpp
70aclnnStatus aclnnUpsampleNearest3dBackwardGetWorkspaceSize(70aclnnStatus aclnnUpsampleNearest3dBackwardGetWorkspaceSize(
71- const aclTensor *gradOut, 71+ const aclTensor *gradOut,
72- const aclIntArray *outputSize, 72+ const aclIntArray *outputSize,
73- const aclIntArray *inputSize, 73+ const aclIntArray *inputSize,
74- double scalesD, 74+ double scalesD,
75- double scalesH, 75+ double scalesH,
76- double scalesW, 76+ double scalesW,
77- aclTensor *gradInput, 77+ aclTensor *gradInput,
78- uint64_t *workspaceSize, 78+ uint64_t *workspaceSize,
79 aclOpExecutor **executor)79 aclOpExecutor **executor)
80```80```
81 81 
82```Cpp82```Cpp
83aclnnStatus aclnnUpsampleNearest3dBackward(83aclnnStatus aclnnUpsampleNearest3dBackward(
84- void *workspace, 84+ void *workspace,
85- uint64_t workspaceSize, 85+ uint64_t workspaceSize,
86- aclOpExecutor *executor, 86+ aclOpExecutor *executor,
87 aclrtStream stream)87 aclrtStream stream)
88```88```
89 89 
@@ -151,7 +151,7 @@ aclnnStatus aclnnUpsampleNearest3dBackward(
151 <td>-</td>151 <td>-</td>
152 <td>-</td>152 <td>-</td>
153 <td>-</td>153 <td>-</td>
154- </tr> 154+ </tr>
155 <tr>155 <tr>
156 <td>scalesH(double)</td>156 <td>scalesH(double)</td>
157 <td>输入</td>157 <td>输入</td>
@@ -161,7 +161,7 @@ aclnnStatus aclnnUpsampleNearest3dBackward(
161 <td>-</td>161 <td>-</td>
162 <td>-</td>162 <td>-</td>
163 <td>-</td>163 <td>-</td>
164- </tr> 164+ </tr>
165 <tr>165 <tr>
166 <td>scalesW(double)</td>166 <td>scalesW(double)</td>
167 <td>输入</td>167 <td>输入</td>
@@ -210,7 +210,7 @@ aclnnStatus aclnnUpsampleNearest3dBackward(
210 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。210 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
211 211 
212 第一段接口完成入参校验,出现以下场景时报错:212 第一段接口完成入参校验,出现以下场景时报错:
213- 213+ 
214 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>214 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
215 <col style="width: 268px">215 <col style="width: 268px">
216 <col style="width: 140px">216 <col style="width: 140px">
@@ -310,15 +310,16 @@ aclnnStatus aclnnUpsampleNearest3dBackward(
310- 参数`gradOut``gradInput`的shape约束:310- 参数`gradOut``gradInput`的shape约束:
311 - 每个维度的取值小于等于2^20。311 - 每个维度的取值小于等于2^20。
312 - 参数`gradInput`的N轴和C轴与`gradOut`保持一致。312 - 参数`gradInput`的N轴和C轴与`gradOut`保持一致。
313- - 内存占用需小于60G。内存占用的计算公式如下:313+ - 内存占用需小于60GB。内存占用的计算公式如下:
314 314 
315 $$315 $$
316- N * C * (gradOut\_D * gradOut\_H * gradOut\_W + gradInput\_D * gradInput\_H * gradInput\_W + gradOut\_D * gradOut\_H * gradInput\_W + gradOut\_D * gradInput\_H * gradInput\_W) * sizeof(float) < 60 * 1024 * 1024 * 1024316+ N * C * (gradOut\_D * gradOut\_H * gradOut\_W + gradInput\_D * gradInput\_H * gradInput\_W + gradOut\_D * gradOut\_H * gradInput\_W + gradOut\_D * gradInput\_H * gradInput\_W) * sizeof(dtype) < 60 * 1024 * 1024 * 1024
317 $$317 $$
318 318 
319 其中:319 其中:
320 - N代表输入和输出的N轴。320 - N代表输入和输出的N轴。
321 - C代表输入和输出的C轴。321 - C代表输入和输出的C轴。
322+ - dtype代表输入张量的数据类型。
322 - N \* C \* gradOut_D \* gradOut_H < 2^31323 - N \* C \* gradOut_D \* gradOut_H < 2^31
323 - gradInput_W * gradInput_H < 2^31324 - gradInput_W * gradInput_H < 2^31
324- 参数gradOut、gradInput的数据格式不为NCDHW或NDHWC时,输入其他数据格式默认按NCDHW处理。325- 参数gradOut、gradInput的数据格式不为NCDHW或NDHWC时,输入其他数据格式默认按NCDHW处理。
@@ -327,7 +328,7 @@ aclnnStatus aclnnUpsampleNearest3dBackward(
327 $$328 $$
328 outputSize\_D = floor(inputSize\_D * scalesD)329 outputSize\_D = floor(inputSize\_D * scalesD)
329 $$330 $$
330- 331+ 
331 $$332 $$
332 outputSize\_H = floor(inputSize\_H * scalesH)333 outputSize\_H = floor(inputSize\_H * scalesH)
333 $$334 $$
Mimage/upsample_nearest_exact2d_grad/README.md+7-7
@@ -15,7 +15,7 @@
15 15 
16- 算子功能:[UpsampleNearest](../upsample_nearest/README.md)在exact_mode为true时的反向传播。16- 算子功能:[UpsampleNearest](../upsample_nearest/README.md)在exact_mode为true时的反向传播。
17- 计算公式:17- 计算公式:
18- 18+ 
19 对于输入gradOut(N, C, h, w),输出gradInput上任意一点(N, C, H, W),则有:19 对于输入gradOut(N, C, h, w),输出gradInput上任意一点(N, C, H, W),则有:
20 20 
21 $$21 $$
@@ -25,27 +25,27 @@
25 其中:25 其中:
26 26 
27 $$27 $$
28- scalesH = inputSize[2]/outputSize[0]28+ scalesH = outputSize[0]/inputSize[2]
29 $$29 $$
30 30 
31 $$31 $$
32- scalesW = inputSize[3]/outputSize[1]32+ scalesW = outputSize[1]/inputSize[3]
33 $$33 $$
34 34 
35 $$35 $$
36- srcH = Min(scalesH * H - 0.5, outputSize[0])36+ srcH = Min(ceil(scalesH * H - 0.5), outputSize[0])
37 $$37 $$
38 38 
39 $$39 $$
40- srcHUp = Min(scalesH * (H + 1) - 0.5, outputSize[0])40+ srcHUp = Min(ceil(scalesH * (H + 1) - 0.5), outputSize[0])
41 $$41 $$
42 42 
43 $$43 $$
44- srcW = Min(scalesW * W - 0.5, outputSize[1])44+ srcW = Min(ceil(scalesW * W - 0.5), outputSize[1])
45 $$45 $$
46 46 
47 $$47 $$
48- srcHUp = Min(scalesW * (W + 1) - 0.5, outputSize[1])48+ srcWUp = Min(ceil(scalesW * (W + 1) - 0.5), outputSize[1])
49 $$49 $$
50 50 
51## 参数说明51## 参数说明
Mimage/upsample_nearest_exact2d_grad/docs/aclnnUpsampleNearestExact1dBackward.md+17-17
@@ -17,7 +17,7 @@
17 17 
18- 接口功能:[aclnnUpsampleNearestExact1d](../../upsample_nearest/docs/aclnnUpsampleNearestExact1d.md)的反向传播。通过计算输出梯度张量的点映射到输入梯度张量的位置,将输出梯度的值累加到输入梯度张量上。18- 接口功能:[aclnnUpsampleNearestExact1d](../../upsample_nearest/docs/aclnnUpsampleNearestExact1d.md)的反向传播。通过计算输出梯度张量的点映射到输入梯度张量的位置,将输出梯度的值累加到输入梯度张量上。
19- 计算公式:19- 计算公式:
20- 20+ 
21 对于输入gradOut(N, C, l),输出gradInput上任意一点(N, C, L),则有:21 对于输入gradOut(N, C, l),输出gradInput上任意一点(N, C, L),则有:
22 22 
23 $$23 $$
@@ -27,15 +27,15 @@
27 其中:27 其中:
28 28 
29 $$29 $$
30- scalesL = inputSize[2]/outputSize[0]30+ scalesL = outputSize[0]/inputSize[2]
atomgit-bot
atomgit-botatomgit-bot7月13日

🟡 Medium Priority

该 diff 将 aclnnUpsampleNearestExact1dBackward.md 中的 scales 公式从 scalesL = inputSize[2]/outputSize[0] 改为 scalesL = outputSize[0]/inputSize[2]

证据链:

  1. 正向公式 (aclnnUpsampleNearestExact1d.md 第22行):out(N, C, l) = self(N, C, min(floor((l + 0.5) * scales), L-1)) — 使用乘法
  2. 反向传播需要求解:floor((l + 0.5) * scales_user) = L,其中 scales_user ≈ outputSize/inputSize(来自约束 outputSize = floor(inputSize * scales_user))。
  3. 推导得:L * inputSize/outputSize - 0.5 ≤ l < (L+1) * inputSize/outputSize - 0.5,因此反向 scale 应为 inputSize/outputSize
  4. 新公式 outputSize/inputSize 会导致:srcL = Min(L * outputSize/inputSize - 0.5, outputSize),这与正确推导得出的 L * inputSize/outputSize - 0.5 完全不一致。

具体反例(inputSize=4, outputSize=8, scales_user=2.0):

注意: 同样的 scales 反转在 Exact2d (aclnnUpsampleNearestExact2dBackward.md) 和 Exact3d (aclnnUpsampleNearestExact3dBackward.md) 中是正确的,因为它们的正向使用除法 (/ scalesH, / scalesD)。Exact1d 是唯一使用乘法 (* scales) 的正向,不应被反转。

建议:将第30行改回 scalesL = inputSize[2]/outputSize[0],因为正向 Exact1d 使用乘法(* scales),其反向 scale 应为 inputSize/outputSize 而非 outputSize/inputSize

改动建议
30
- scalesL = outputSize[0]/inputSize[2]
30
+ scalesL = inputSize[2]/outputSize[0]
应用建议
likedislike
gitee-duhuiping
7月14日 评论:
31 $$31 $$
32 32 
33 $$33 $$
34- srcL = Min(scalesL * L - 0.5, outputSize[0])34+ srcL = Min(ceil(scalesL * L - 0.5), outputSize[0])
35 $$35 $$
36 36 
37 $$37 $$
38- srcLUp = Min(scalesL * (L + 1) - 0.5, outputSize[0])38+ srcLUp = Min(ceil(scalesL * (L + 1) - 0.5), outputSize[0])
39 $$39 $$
40 40 
41## 函数原型41## 函数原型
@@ -44,20 +44,20 @@
44 44 
45```cpp45```cpp
46aclnnStatus aclnnUpsampleNearestExact1dBackwardGetWorkspaceSize(46aclnnStatus aclnnUpsampleNearestExact1dBackwardGetWorkspaceSize(
47- const aclTensor *gradOutput, 47+ const aclTensor *gradOutput,
48- const aclIntArray *outputSize, 48+ const aclIntArray *outputSize,
49- const aclIntArray *inputSize, 49+ const aclIntArray *inputSize,
50- double scales, 50+ double scales,
51- aclTensor *out, 51+ aclTensor *out,
52- uint64_t *workspaceSize, 52+ uint64_t *workspaceSize,
53 aclOpExecutor **executor)53 aclOpExecutor **executor)
54```54```
55 55 
56```cpp56```cpp
57aclnnStatus aclnnUpsampleNearestExact1dBackward(57aclnnStatus aclnnUpsampleNearestExact1dBackward(
58- void *workspace, 58+ void *workspace,
59- uint64_t workspaceSize, 59+ uint64_t workspaceSize,
60- aclOpExecutor *executor, 60+ aclOpExecutor *executor,
61 aclrtStream stream)61 aclrtStream stream)
62```62```
63 63 
@@ -119,7 +119,7 @@ aclnnStatus aclnnUpsampleNearestExact1dBackward(
119 <tr>119 <tr>
120 <td>scales(double)</td>120 <td>scales(double)</td>
121 <td>输入</td>121 <td>输入</td>
122- <td>表示输出out的缩放系数。</td>122+ <td>公式中的`scalesL`,表示输出out的缩放系数。</td>
123 <td>不能传入负值。</td>123 <td>不能传入负值。</td>
124 <td>-</td>124 <td>-</td>
125 <td>-</td>125 <td>-</td>
@@ -164,7 +164,7 @@ aclnnStatus aclnnUpsampleNearestExact1dBackward(
164 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。164 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
165 165 
166 第一段接口完成入参校验,出现以下场景时报错:166 第一段接口完成入参校验,出现以下场景时报错:
167- 167+ 
168 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>168 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
169 <col style="width: 268px">169 <col style="width: 268px">
170 <col style="width: 140px">170 <col style="width: 140px">
@@ -249,8 +249,8 @@ aclnnStatus aclnnUpsampleNearestExact1dBackward(
249 249 
250## 约束说明250## 约束说明
251 251 
252-- 输入数据缩放场景放大倍数必须小于等于50,即:252+- 反向接口的输入数据缩倍数必须小于等于50,即:
253- 253+ 
254 $$254 $$
255 outputSize[0]/输出shape的高度L <= 50255 outputSize[0]/输出shape的高度L <= 50
256 $$256 $$
Mimage/upsample_nearest_exact2d_grad/docs/aclnnUpsampleNearestExact2dBackward.md+21-21
@@ -17,7 +17,7 @@
17 17 
18- 接口功能:[aclnnUpsampleNearestExact2d](../../upsample_nearest/docs/aclnnUpsampleNearestExact2d.md)的反向传播。18- 接口功能:[aclnnUpsampleNearestExact2d](../../upsample_nearest/docs/aclnnUpsampleNearestExact2d.md)的反向传播。
19- 计算公式:19- 计算公式:
20- 20+ 
21 对于输入gradOut(N, C, h, w),输出gradInput上任意一点(N, C, H, W),则有:21 对于输入gradOut(N, C, h, w),输出gradInput上任意一点(N, C, H, W),则有:
22 22 
23 $$23 $$
@@ -27,50 +27,50 @@
27 其中:27 其中:
28 28 
29 $$29 $$
30- scalesH = inputSize[2]/outputSize[0]30+ scalesH = outputSize[0]/inputSize[2]
31 $$31 $$
32 32 
33 $$33 $$
34- scalesW = inputSize[3]/outputSize[1]34+ scalesW = outputSize[1]/inputSize[3]
35 $$35 $$
36 36 
37 $$37 $$
38- srcH = Min(scalesH * H - 0.5, outputSize[0])38+ srcH = Min(ceil(scalesH * H - 0.5), outputSize[0])
39 $$39 $$
40 40 
41 $$41 $$
42- srcHUp = Min(scalesH * (H + 1) - 0.5, outputSize[0])42+ srcHUp = Min(ceil(scalesH * (H + 1) - 0.5), outputSize[0])
43 $$43 $$
44 44 
45 $$45 $$
46- srcW = Min(scalesW * W - 0.5, outputSize[1])46+ srcW = Min(ceil(scalesW * W - 0.5), outputSize[1])
47 $$47 $$
48 48 
49 $$49 $$
50- srcHUp = Min(scalesW * (W + 1) - 0.5, outputSize[1])50+ srcWUp = Min(ceil(scalesW * (W + 1) - 0.5), outputSize[1])
51 $$51 $$
52- 52+ 
53## 函数原型53## 函数原型
54 54 
55每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnUpsampleNearestExact2dBackwardGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnUpsampleNearestExact2dBackward”接口执行计算。55每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnUpsampleNearestExact2dBackwardGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnUpsampleNearestExact2dBackward”接口执行计算。
56 56 
57```Cpp57```Cpp
58aclnnStatus aclnnUpsampleNearestExact2dBackwardGetWorkspaceSize(58aclnnStatus aclnnUpsampleNearestExact2dBackwardGetWorkspaceSize(
59- const aclTensor *gradOutput, 59+ const aclTensor *gradOutput,
60- const aclIntArray *outputSize, 60+ const aclIntArray *outputSize,
61- const aclIntArray *inputSize, 61+ const aclIntArray *inputSize,
62- double scalesH, 62+ double scalesH,
63- double scalesW, 63+ double scalesW,
64- aclTensor *out, 64+ aclTensor *out,
65- uint64_t *workspaceSize, 65+ uint64_t *workspaceSize,
66 aclOpExecutor **executor)66 aclOpExecutor **executor)
67```67```
68 68 
69```Cpp69```Cpp
70aclnnStatus aclnnUpsampleNearestExact2dBackward(70aclnnStatus aclnnUpsampleNearestExact2dBackward(
71- void *workspace, 71+ void *workspace,
72- uint64_t workspaceSize, 72+ uint64_t workspaceSize,
73- aclOpExecutor *executor, 73+ aclOpExecutor *executor,
74 aclrtStream stream)74 aclrtStream stream)
75```75```
76 76 
@@ -182,7 +182,7 @@ aclnnStatus aclnnUpsampleNearestExact2dBackward(
182 </tr>182 </tr>
183 </tbody>183 </tbody>
184 </table>184 </table>
185- 185+ 
186- **返回值**186- **返回值**
187 187 
188 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。188 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
@@ -274,12 +274,12 @@ aclnnStatus aclnnUpsampleNearestExact2dBackward(
274 274 
275## 约束说明275## 约束说明
276 276 
277-- 输入数据缩放场景放大倍数必须小于等于50,即:277+- 反向接口的输入数据缩倍数必须小于等于50,即:
278 278 
279 $$279 $$
280 outputSize\_H / 输出shape的高度H <= 50280 outputSize\_H / 输出shape的高度H <= 50
281 $$281 $$
282- 282+ 
283 $$283 $$
284 outputSize\_W / 输出shape的宽度W <=50284 outputSize\_W / 输出shape的宽度W <=50
285 $$285 $$
Mimage/upsample_nearest_exact3d/README.md+3-3
@@ -19,15 +19,15 @@
19- 计算公式:19- 计算公式:
20 20 
21 $$21 $$
22- d_{src} = min(floor((d_{dst} + 0.5) / scalesD), D - 1),scalesD = outputSize[0] / D22+ d_{src} = min(floor((d_{dst} + 0.5) / scalesD), D - 1), \quad scalesD = outputSize[0] / D
23 $$23 $$
24 24 
25 $$25 $$
26- h_{src} = min(floor((h_{dst} + 0.5) / scalesH), H - 1),scalesH = outputSize[1] / H26+ h_{src} = min(floor((h_{dst} + 0.5) / scalesH), H - 1), \quad scalesH = outputSize[1] / H
27 $$27 $$
28 28 
29 $$29 $$
30- w_{src} = min(floor((w_{dst} + 0.5) / scalesW), W - 1),scalesW = outputSize[2] / W30+ w_{src} = min(floor((w_{dst} + 0.5) / scalesW), W - 1), \quad scalesW = outputSize[2] / W
31 $$31 $$
32 32 
33 $$33 $$
Mimage/upsample_nearest_exact3d/docs/aclnnUpsampleNearestExact3d.md+14-14
@@ -19,15 +19,15 @@
19- 计算公式:19- 计算公式:
20 20 
21 $$21 $$
22- d_{src} = min(floor((d_{dst} + 0.5) / scalesD), D - 1),scalesD = outputSize[0] / D22+ d_{src} = min(floor((d_{dst} + 0.5) / scalesD), D - 1), \quad scalesD = outputSize[0] / D
23 $$23 $$
24 24 
25 $$25 $$
26- h_{src} = min(floor((h_{dst} + 0.5) / scalesH), H - 1),scalesH = outputSize[1] / H26+ h_{src} = min(floor((h_{dst} + 0.5) / scalesH), H - 1), \quad scalesH = outputSize[1] / H
27 $$27 $$
28 28 
29 $$29 $$
30- w_{src} = min(floor((w_{dst} + 0.5) / scalesW), W - 1),scalesW = outputSize[2] / W30+ w_{src} = min(floor((w_{dst} + 0.5) / scalesW), W - 1), \quad scalesW = outputSize[2] / W
31 $$31 $$
32 32 
33 $$33 $$
@@ -40,21 +40,21 @@
40 40 
41```Cpp41```Cpp
42aclnnStatus aclnnUpsampleNearestExact3dGetWorkspaceSize(42aclnnStatus aclnnUpsampleNearestExact3dGetWorkspaceSize(
43- const aclTensor *self, 43+ const aclTensor *self,
44- const aclIntArray *outputSize, 44+ const aclIntArray *outputSize,
45- double scalesD, 45+ double scalesD,
46- double scalesH, 46+ double scalesH,
47- double scalesW, 47+ double scalesW,
48- aclTensor *out, 48+ aclTensor *out,
49- uint64_t *workspaceSize, 49+ uint64_t *workspaceSize,
50 aclOpExecutor **executor)50 aclOpExecutor **executor)
51```51```
52 52 
53```Cpp53```Cpp
54aclnnStatus aclnnUpsampleNearestExact3d(54aclnnStatus aclnnUpsampleNearestExact3d(
55- void *workspace, 55+ void *workspace,
56- uint64_t workspaceSize, 56+ uint64_t workspaceSize,
57- aclOpExecutor *executor, 57+ aclOpExecutor *executor,
58 aclrtStream stream)58 aclrtStream stream)
59```59```
60 60 
@@ -168,7 +168,7 @@ aclnnStatus aclnnUpsampleNearestExact3d(
168 </table>168 </table>
169 169 
170 - <term>Atlas 推理系列产品</term>170 - <term>Atlas 推理系列产品</term>
171- 171+ 
172 参数`self`、`out`的数据类型仅支持FLOAT32、FLOAT16。172 参数`self`、`out`的数据类型仅支持FLOAT32、FLOAT16。
173 173 
174- **返回值**174- **返回值**
Mimage/upsample_nearest_exact3d_grad/README.md+13-13
@@ -15,7 +15,7 @@
15 15 
16- 算子功能:[UpsampleNearestExact3d](../upsample_nearest_exact3d/README.md)的反向计算。16- 算子功能:[UpsampleNearestExact3d](../upsample_nearest_exact3d/README.md)的反向计算。
17- 计算公式:17- 计算公式:
18- 18+ 
19 对于输入gradOut(N, C, d, h, w),输出gradInput上任意一点(N, C, D, H, W),则有:19 对于输入gradOut(N, C, d, h, w),输出gradInput上任意一点(N, C, D, H, W),则有:
20 20 
21 $$21 $$
@@ -25,39 +25,39 @@
25 其中:25 其中:
26 26 
27 $$27 $$
28- scalesD = inputSize[2]/outputSize[0]28+ scalesD = outputSize[0]/inputSize[2]
29 $$29 $$
30 30 
31 $$31 $$
32- scalesH = inputSize[3]/outputSize[1]32+ scalesH = outputSize[1]/inputSize[3]
33 $$33 $$
34 34 
35 $$35 $$
36- scalesW = inputSize[4]/outputSize[2]36+ scalesW = outputSize[2]/inputSize[4]
37- $$
38-
39- $$
40- srcD = Min(scalesD * D - 0.5, outputSize[0])
41 $$37 $$
42 38 
43 $$39 $$
44- srcDUp = Min(scalesD * (D + 1) -0.5, outputSize[0])40+ srcD = Min(ceil(scalesD * D - 0.5), outputSize[0])
45 $$41 $$
46 42 
47 $$43 $$
48- srcH = Min(scalesH * H - 0.5, outputSize[1])44+ srcDUp = Min(ceil(scalesD * (D + 1) -0.5), outputSize[0])
49 $$45 $$
50 46 
51 $$47 $$
52- srcHUp = Min(scalesH * (H + 1) -0.5, outputSize[1])48+ srcH = Min(ceil(scalesH * H - 0.5), outputSize[1])
53 $$49 $$
54 50 
55 $$51 $$
56- srcW = Min(scalesW * W - 0.5, outputSize[2])52+ srcHUp = Min(ceil(scalesH * (H + 1) -0.5), outputSize[1])
57 $$53 $$
58 54 
59 $$55 $$
60- srcHUp = Min(scalesW * (W + 1) -0.5, outputSize[2])56+ srcW = Min(ceil(scalesW * W - 0.5), outputSize[2])
57+ $$
58+ 
59+ $$
60+ srcWUp = Min(ceil(scalesW * (W + 1) -0.5), outputSize[2])
61 $$61 $$
62 62 
63## 参数说明63## 参数说明
Mimage/upsample_nearest_exact3d_grad/docs/aclnnUpsampleNearestExact3dBackward.md+30-29
@@ -27,39 +27,39 @@
27 其中:27 其中:
28 28 
29 $$29 $$
30- scalesD = inputSize[2]/outputSize[0]30+ scalesD = outputSize[0]/inputSize[2]
31 $$31 $$
32 32 
33 $$33 $$
34- scalesH = inputSize[3]/outputSize[1]34+ scalesH = outputSize[1]/inputSize[3]
35 $$35 $$
36 36 
37 $$37 $$
38- scalesW = inputSize[4]/outputSize[2]38+ scalesW = outputSize[2]/inputSize[4]
39- $$
40-
41- $$
42- srcD = Min(scalesD * D - 0.5, outputSize[0])
43 $$39 $$
44 40 
45 $$41 $$
46- srcDUp = Min(scalesD * (D + 1) -0.5, outputSize[0])42+ srcD = Min(ceil(scalesD * D - 0.5), outputSize[0])
47 $$43 $$
48 44 
49 $$45 $$
50- srcH = Min(scalesH * H - 0.5, outputSize[1])46+ srcDUp = Min(ceil(scalesD * (D + 1) - 0.5), outputSize[0])
51 $$47 $$
52 48 
53 $$49 $$
54- srcHUp = Min(scalesH * (H + 1) -0.5, outputSize[1])50+ srcH = Min(ceil(scalesH * H - 0.5), outputSize[1])
55 $$51 $$
56 52 
57 $$53 $$
58- srcW = Min(scalesW * W - 0.5, outputSize[2])54+ srcHUp = Min(ceil(scalesH * (H + 1) - 0.5), outputSize[1])
59 $$55 $$
60 56 
61 $$57 $$
62- srcHUp = Min(scalesW * (W + 1) -0.5, outputSize[2])58+ srcW = Min(ceil(scalesW * W - 0.5), outputSize[2])
59+ $$
60+ 
61+ $$
62+ srcWUp = Min(ceil(scalesW * (W + 1) - 0.5), outputSize[2])
63 $$63 $$
64 64 
65## 函数原型65## 函数原型
@@ -68,22 +68,22 @@
68 68 
69```Cpp69```Cpp
70aclnnStatus aclnnUpsampleNearestExact3dBackwardGetWorkspaceSize(70aclnnStatus aclnnUpsampleNearestExact3dBackwardGetWorkspaceSize(
71- const aclTensor *gradOut, 71+ const aclTensor *gradOut,
72- const aclIntArray *outputSize, 72+ const aclIntArray *outputSize,
73- const aclIntArray *inputSize, 73+ const aclIntArray *inputSize,
74- double scalesD, 74+ double scalesD,
75- double scalesH, 75+ double scalesH,
76- double scalesW, 76+ double scalesW,
77- aclTensor *gradInput, 77+ aclTensor *gradInput,
78- uint64_t *workspaceSize, 78+ uint64_t *workspaceSize,
79 aclOpExecutor **executor)79 aclOpExecutor **executor)
80```80```
81 81 
82```Cpp82```Cpp
83aclnnStatus aclnnUpsampleNearestExact3dBackward(83aclnnStatus aclnnUpsampleNearestExact3dBackward(
84- void *workspace, 84+ void *workspace,
85- uint64_t workspaceSize, 85+ uint64_t workspaceSize,
86- aclOpExecutor *executor, 86+ aclOpExecutor *executor,
87 aclrtStream stream)87 aclrtStream stream)
88```88```
89 89 
@@ -211,7 +211,7 @@ aclnnStatus aclnnUpsampleNearestExact3dBackward(
211 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。211 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
212 212 
213 第一段接口完成入参校验,出现以下场景时报错:213 第一段接口完成入参校验,出现以下场景时报错:
214- 214+ 
215 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>215 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
216 <col style="width: 268px">216 <col style="width: 268px">
217 <col style="width: 140px">217 <col style="width: 140px">
@@ -315,19 +315,20 @@ aclnnStatus aclnnUpsampleNearestExact3dBackward(
315- 参数`gradOut``gradInput`的shape约束:315- 参数`gradOut``gradInput`的shape约束:
316 - 每个维度的取值小于等于2^20。316 - 每个维度的取值小于等于2^20。
317 - 参数`gradInput`的N轴和C轴与`gradOut`保持一致。317 - 参数`gradInput`的N轴和C轴与`gradOut`保持一致。
318- - 内存占用需小于60G。内存占用的计算公式如下:318+ - 内存占用需小于60GB。内存占用的计算公式如下:
319 319 
320 $$320 $$
321- N * C * (gradOut\_D * gradOut\_H * gradOut\_W + gradInput\_D * gradInput\_H * gradInput\_W + gradOut\_D * gradOut\_H * gradInput\_W + gradOut\_D * gradInput\_H * gradInput\_W) * sizeof(float) < 60 * 1024 * 1024 * 1024321+ N * C * (gradOut\_D * gradOut\_H * gradOut\_W + gradInput\_D * gradInput\_H * gradInput\_W + gradOut\_D * gradOut\_H * gradInput\_W + gradOut\_D * gradInput\_H * gradInput\_W) * sizeof(dtype) < 60 * 1024 * 1024 * 1024
322 $$322 $$
323 323 
324 其中:324 其中:
325 - N代表输入和输出的N轴。325 - N代表输入和输出的N轴。
326 - C代表输入和输出的C轴。326 - C代表输入和输出的C轴。
327+ - dtype代表输入张量的数据类型。
327 - N \* C \* gradOut_D \* gradOut_H < 2^31328 - N \* C \* gradOut_D \* gradOut_H < 2^31
328 - gradInput_W * gradInput_H < 2^31329 - gradInput_W * gradInput_H < 2^31
329- 参数gradOut、gradInput的数据格式不为NCDHW或NDHWC时,输入其他数据格式默认按NCDHW处理。330- 参数gradOut、gradInput的数据格式不为NCDHW或NDHWC时,输入其他数据格式默认按NCDHW处理。
330-- 输入数据缩放场景放大倍数必须小于等于50,即:331+- 反向接口的输入数据缩倍数必须小于等于50,即:
331 332 
332 $$333 $$
333 outputSize\_D / 输出shape的深度D <= 50334 outputSize\_D / 输出shape的深度D <= 50
@@ -336,7 +337,7 @@ aclnnStatus aclnnUpsampleNearestExact3dBackward(
336 $$337 $$
337 outputSize\_H / 输出shape的高度H <= 50338 outputSize\_H / 输出shape的高度H <= 50
338 $$339 $$
339- 340+ 
340 $$341 $$
341 outputSize\_W / 输出shape的宽度W <=50342 outputSize\_W / 输出shape的宽度W <=50
342 $$343 $$
@@ -346,7 +347,7 @@ aclnnStatus aclnnUpsampleNearestExact3dBackward(
346 $$347 $$
347 outputSize\_D = floor(inputSize\_D * scalesD)348 outputSize\_D = floor(inputSize\_D * scalesD)
348 $$349 $$
349- 350+ 
350 $$351 $$
351 outputSize\_H = floor(inputSize\_H * scalesH)352 outputSize\_H = floor(inputSize\_H * scalesH)
352 $$353 $$
Mimage/upsample_trilinear3d_backward/docs/aclnnUpsampleTrilinear3dBackward.md+20-19
@@ -90,11 +90,11 @@
90 - 则有以下公式:90 - 则有以下公式:
91 91 
92 $$92 $$
93- {V(p_{x, y, z})} = {V(p_{x0, y0, z0})} * {lambda_{0}} * {lambdb_{0}} * {lambdc_{0}} + {V(p_{x0, y0, z1})} * {lambda_{0}} * {lambdb_{0}} * {lambdc_{1}} + {V(p_{x0, y1, z0})} * {lambda_{0}} * {lambdb_{1}} * {lambdc_{0}} + {V(p_{x0, y1, z1})} * {lambda_{0}} * {lambdb_{1}} * {lambdc_{1}} + {V(p_{x1, y0, z0})} * {lambda_{1}} * {lambdb_{0}} * {lambdc_{0}} + {V(p_{x1, y0, z1})} * {lambda_{1}} * {lambdb_{0}} * {lambdc_{1}} + {V(p_{x1, y1, z0})} * {lambda_{1}} * {lambdb_{1}} * {lambdc_{0}} + {V(p_{x1, y1, z1})} * {lambda_{1}} * {lambdb_{1}} * {lambdc_{1}} 93+ {V(p_{x, y, z})} = {V(p_{x0, y0, z0})} * {lambda_{0}} * {lambdb_{0}} * {lambdc_{0}} + {V(p_{x0, y0, z1})} * {lambda_{0}} * {lambdb_{0}} * {lambdc_{1}} + {V(p_{x0, y1, z0})} * {lambda_{0}} * {lambdb_{1}} * {lambdc_{0}} + {V(p_{x0, y1, z1})} * {lambda_{0}} * {lambdb_{1}} * {lambdc_{1}} + {V(p_{x1, y0, z0})} * {lambda_{1}} * {lambdb_{0}} * {lambdc_{0}} + {V(p_{x1, y0, z1})} * {lambda_{1}} * {lambdb_{0}} * {lambdc_{1}} + {V(p_{x1, y1, z0})} * {lambda_{1}} * {lambdb_{1}} * {lambdc_{0}} + {V(p_{x1, y1, z1})} * {lambda_{1}} * {lambdb_{1}} * {lambdc_{1}}
94 $$94 $$
95 95 
96 - 假设:正向插值的输出图像out $(x, y, z)$受原图像input $(x_i, y_j, z_k)$影响,则有:96 - 假设:正向插值的输出图像out $(x, y, z)$受原图像input $(x_i, y_j, z_k)$影响,则有:
97- 97+ 
98 $$98 $$
99 gradInput(x_i,y_j,z_k) += gradOut(x,y,z) * lambda(x_i,y_j,z_k)* lambdb(x_i,y_j,z_k)* lambdc(x_i,y_j,z_k)99 gradInput(x_i,y_j,z_k) += gradOut(x,y,z) * lambda(x_i,y_j,z_k)* lambdb(x_i,y_j,z_k)* lambdc(x_i,y_j,z_k)
100 $$100 $$
@@ -105,23 +105,23 @@
105 105 
106```Cpp106```Cpp
107aclnnStatus aclnnUpsampleTrilinear3dBackwardGetWorkspaceSize(107aclnnStatus aclnnUpsampleTrilinear3dBackwardGetWorkspaceSize(
108- const aclTensor *gradOut, 108+ const aclTensor *gradOut,
109- const aclIntArray *outputSize, 109+ const aclIntArray *outputSize,
110- const aclIntArray *inputSize, 110+ const aclIntArray *inputSize,
111- bool alignCorners, 111+ bool alignCorners,
112- double scalesD, 112+ double scalesD,
113- double scalesH, 113+ double scalesH,
114- double scalesW, 114+ double scalesW,
115- aclTensor *gradInput, 115+ aclTensor *gradInput,
116- uint64_t *workspaceSize, 116+ uint64_t *workspaceSize,
117 aclOpExecutor **executor)117 aclOpExecutor **executor)
118```118```
119 119 
120```Cpp120```Cpp
121aclnnStatus aclnnUpsampleTrilinear3dBackward(121aclnnStatus aclnnUpsampleTrilinear3dBackward(
122- void *workspace, 122+ void *workspace,
123- uint64_t workspaceSize, 123+ uint64_t workspaceSize,
124- aclOpExecutor *executor, 124+ aclOpExecutor *executor,
125 aclrtStream stream)125 aclrtStream stream)
126```126```
127 127 
@@ -255,7 +255,7 @@ aclnnStatus aclnnUpsampleTrilinear3dBackward(
255 </table>255 </table>
256 256 
257 - <term>Atlas 训练系列产品</term>257 - <term>Atlas 训练系列产品</term>
258- 258+ 
259 参数`gradOut`和`gradInput`的数据类型不支持BFLOAT16。259 参数`gradOut`和`gradInput`的数据类型不支持BFLOAT16。
260 260 
261- **返回值**261- **返回值**
@@ -263,7 +263,7 @@ aclnnStatus aclnnUpsampleTrilinear3dBackward(
263 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。263 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
264 264 
265 第一段接口完成入参校验,出现以下场景时报错:265 第一段接口完成入参校验,出现以下场景时报错:
266- 266+ 
267 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>267 <table style="undefined;table-layout: fixed;width: 1170px"><colgroup>
268 <col style="width: 268px">268 <col style="width: 268px">
269 <col style="width: 140px">269 <col style="width: 140px">
@@ -364,15 +364,16 @@ aclnnStatus aclnnUpsampleTrilinear3dBackward(
364- 参数`gradOut``gradInput`的shape约束:364- 参数`gradOut``gradInput`的shape约束:
365 - 每个维度的取值小于等于2^20。365 - 每个维度的取值小于等于2^20。
366 - 参数`gradInput`的N轴和C轴与`gradOut`保持一致。366 - 参数`gradInput`的N轴和C轴与`gradOut`保持一致。
367- - 内存占用需小于60G。内存占用的计算公式如下:367+ - 内存占用需小于60GB。内存占用的计算公式如下:
368 368 
369 $$369 $$
370- N * C * (gradOut\_D * gradOut\_H * gradOut\_W + gradInput\_D * gradInput\_H * gradInput\_W + gradOut\_D * gradOut\_H * gradInput\_W + gradOut\_D * gradInput\_H * gradInput\_W) * sizeof(float) < 60 * 1024 * 1024 * 1024370+ N * C * (gradOut\_D * gradOut\_H * gradOut\_W + gradInput\_D * gradInput\_H * gradInput\_W + gradOut\_D * gradOut\_H * gradInput\_W + gradOut\_D * gradInput\_H * gradInput\_W) * sizeof(dtype) < 60 * 1024 * 1024 * 1024
371 $$371 $$
372 372 
373 其中:373 其中:
374 - N代表输入和输出的N轴。374 - N代表输入和输出的N轴。
375 - C代表输入和输出的C轴。375 - C代表输入和输出的C轴。
376+ - dtype代表输入张量的数据类型。
376 - N \* C \* gradOut_D \* gradOut_H < 2^31377 - N \* C \* gradOut_D \* gradOut_H < 2^31
377 - gradInput_W * gradInput_H < 2^31378 - gradInput_W * gradInput_H < 2^31
378- 参数inputSize、outputSize、scalesD、scalesH、scalesW需要满足如下约束:379- 参数inputSize、outputSize、scalesD、scalesH、scalesW需要满足如下约束:
@@ -380,7 +381,7 @@ aclnnStatus aclnnUpsampleTrilinear3dBackward(
380 $$381 $$
381 outputSize\_D = floor(inputSize\_D * scalesD)382 outputSize\_D = floor(inputSize\_D * scalesD)
382 $$383 $$
383- 384+ 
384 $$385 $$
385 outputSize\_H = floor(inputSize\_H * scalesH)386 outputSize\_H = floor(inputSize\_H * scalesH)
386 $$387 $$