Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle
提交
df423557
P
Paddle
项目概览
PaddlePaddle
/
Paddle
大约 1 年 前同步成功
通知
2299
Star
20931
Fork
5422
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1423
列表
看板
标记
里程碑
合并请求
543
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1,423
Issue
1,423
列表
看板
标记
里程碑
合并请求
543
合并请求
543
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
df423557
编写于
3月 29, 2023
作者:
傅
傅剑寒
提交者:
GitHub
3月 29, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[AMP OP&Test] add bf16 fp16 test case for interpolate (#51160)
上级
ab47a985
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
1338 addition
and
236 deletion
+1338
-236
paddle/phi/kernels/cpu/interpolate_grad_kernel.cc
paddle/phi/kernels/cpu/interpolate_grad_kernel.cc
+0
-1
python/paddle/fluid/tests/unittests/test_bicubic_interp_v2_op.py
...paddle/fluid/tests/unittests/test_bicubic_interp_v2_op.py
+290
-49
python/paddle/fluid/tests/unittests/test_bilinear_interp_v2_op.py
...addle/fluid/tests/unittests/test_bilinear_interp_v2_op.py
+303
-62
python/paddle/fluid/tests/unittests/test_linear_interp_v2_op.py
.../paddle/fluid/tests/unittests/test_linear_interp_v2_op.py
+109
-13
python/paddle/fluid/tests/unittests/test_nearest_interp_v2_op.py
...paddle/fluid/tests/unittests/test_nearest_interp_v2_op.py
+320
-49
python/paddle/fluid/tests/unittests/test_trilinear_interp_v2_op.py
...ddle/fluid/tests/unittests/test_trilinear_interp_v2_op.py
+316
-62
未找到文件。
paddle/phi/kernels/cpu/interpolate_grad_kernel.cc
浏览文件 @
df423557
...
...
@@ -110,7 +110,6 @@ static void BilinearInterpolationGrad(const DenseTensor& output_grad,
for
(
int
j
=
0
;
j
<
c
;
j
++
)
{
// loop for channels
// bilinear interpolation grad
if
(
data_layout
==
DataLayout
::
kNCHW
)
{
// const T grad = output_grad_t(i, j, k, l);
const
MT
grad
=
static_cast
<
MT
>
(
output_grad_t
(
i
,
j
,
k
,
l
));
input_grad_t
(
i
,
j
,
y_n
,
x_w
)
+=
static_cast
<
T
>
(
grad
*
d_s
*
d_e
);
input_grad_t
(
i
,
j
,
y_s
,
x_w
)
+=
static_cast
<
T
>
(
grad
*
d_n
*
d_e
);
...
...
python/paddle/fluid/tests/unittests/test_bicubic_interp_v2_op.py
浏览文件 @
df423557
...
...
@@ -15,14 +15,81 @@
import
unittest
import
numpy
as
np
from
eager_op_test
import
OpTest
from
eager_op_test
import
OpTest
,
convert_float_to_uint16
import
paddle
from
paddle
import
fluid
from
paddle.fluid
import
Program
,
program_guard
from
paddle.fluid
import
Program
,
core
,
program_guard
from
paddle.nn.functional
import
interpolate
def
create_test_case0
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
2
,
3
,
5
,
5
]
self
.
out_h
=
2
self
.
out_w
=
2
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
3
,
3
]).
astype
(
"int32"
)
self
.
align_corners
=
True
def
create_test_case1
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
align_corners
=
True
def
create_test_case2
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
10
self
.
out_w
=
8
self
.
scale
=
[]
self
.
align_corners
=
True
def
create_test_case3
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
align_corners
=
False
def
create_test_case4
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
2
,
2
]).
astype
(
"int32"
)
self
.
align_corners
=
True
def
create_test_case5
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
11
self
.
out_w
=
11
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
6
,
4
]).
astype
(
"int32"
)
self
.
align_corners
=
False
def
create_test_case6
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
0
self
.
out_size
=
np
.
array
([
64
,
32
]).
astype
(
"int32"
)
self
.
align_corners
=
False
def
bicubic_interp_test
(
x
,
OutSize
=
None
,
...
...
@@ -181,10 +248,12 @@ class TestBicubicInterpOp(OpTest):
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
dtype
=
np
.
float64
self
.
init_test_case
()
self
.
op_type
=
"bicubic_interp_v2"
# NOTE(dev): some AsDispensible input is not used under imperative mode.
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float64"
)
# Skip check_dygraph while found them in Inputs.
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
self
.
dtype
)
scale_h
=
0
scale_w
=
0
if
self
.
data_layout
==
"NCHW"
:
...
...
@@ -249,76 +318,248 @@ class TestBicubicInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
2
,
3
,
5
,
5
]
self
.
out_h
=
2
self
.
out_w
=
2
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
3
,
3
]).
astype
(
"int32"
)
self
.
align_corners
=
True
create_test_case0
(
self
)
class
TestBicubicInterpCase1
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
align_corners
=
True
create_test_case1
(
self
)
class
TestBicubicInterpCase2
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
10
self
.
out_w
=
8
self
.
scale
=
[]
self
.
align_corners
=
True
create_test_case2
(
self
)
class
TestBicubicInterpCase3
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
align_corners
=
False
create_test_case3
(
self
)
class
TestBicubicInterpCase4
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
2
,
2
]).
astype
(
"int32"
)
self
.
align_corners
=
True
create_test_case4
(
self
)
class
TestBicubicInterpCase5
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
11
self
.
out_w
=
11
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
6
,
4
]).
astype
(
"int32"
)
self
.
align_corners
=
False
create_test_case5
(
self
)
class
TestBicubicInterpCase6
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
0
self
.
out_size
=
np
.
array
([
64
,
32
]).
astype
(
"int32"
)
self
.
align_corners
=
False
create_test_case6
(
self
)
class
TestBicubicInterpOpFP16
(
TestBicubicInterpOp
):
def
test_check_output
(
self
):
self
.
check_output
(
atol
=
1e-3
)
def
test_check_grad
(
self
):
self
.
check_grad
(
[
'X'
],
'Out'
,
in_place
=
True
,
max_relative_error
=
1e-2
,
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
self
.
dtype
=
np
.
float16
class
TestBicubicInterpCase1FP16
(
TestBicubicInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case1
(
self
)
self
.
dtype
=
np
.
float16
# this case will cause accuracy loss (backward:0.008773442)
# class TestBicubicInterpCase2FP16(TestBicubicInterpOpFP16):
# def init_test_case(self):
# self.interp_method = 'bicubic'
# self.input_shape = [3, 3, 9, 6]
# self.out_h = 10
# self.out_w = 8
# self.scale = []
# self.align_corners = True
class
TestBicubicInterpCase3FP16
(
TestBicubicInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case3
(
self
)
self
.
dtype
=
np
.
float16
class
TestBicubicInterpCase4FP16
(
TestBicubicInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case4
(
self
)
self
.
dtype
=
np
.
float16
class
TestBicubicInterpCase5FP16
(
TestBicubicInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case5
(
self
)
self
.
dtype
=
np
.
float16
class
TestBicubicInterpCase6FP16
(
TestBicubicInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case6
(
self
)
self
.
dtype
=
np
.
float16
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBicubicInterpOpBF16
(
OpTest
):
def
setUp
(
self
):
self
.
python_api
=
bicubic_interp_test
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
init_test_case
()
self
.
op_type
=
"bicubic_interp_v2"
# NOTE(dev): some AsDispensible input is not used under imperative mode.
# Skip check_dygraph while found them in Inputs.
self
.
check_dygraph
=
True
self
.
dtype
=
np
.
uint16
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float32"
)
scale_h
=
0
scale_w
=
0
if
self
.
data_layout
==
"NCHW"
:
in_h
=
self
.
input_shape
[
2
]
in_w
=
self
.
input_shape
[
3
]
else
:
in_h
=
self
.
input_shape
[
1
]
in_w
=
self
.
input_shape
[
2
]
if
self
.
scale
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
if
self
.
scale
>
0.0
:
scale_h
=
scale_w
=
float
(
self
.
scale
)
if
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
==
1
:
scale_w
=
scale_h
=
self
.
scale
[
0
]
elif
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
>
1
:
scale_w
=
self
.
scale
[
1
]
scale_h
=
self
.
scale
[
0
]
out_h
=
int
(
in_h
*
scale_h
)
out_w
=
int
(
in_w
*
scale_w
)
else
:
out_h
=
self
.
out_h
out_w
=
self
.
out_w
output_np
=
bicubic_interp_np
(
input_np
,
out_h
,
out_w
,
scale_h
,
scale_w
,
self
.
out_size
,
self
.
actual_shape
,
self
.
align_corners
,
self
.
data_layout
,
)
self
.
inputs
=
{
'X'
:
convert_float_to_uint16
(
input_np
)}
if
self
.
out_size
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
out_size
self
.
check_dygraph
=
False
if
self
.
actual_shape
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
actual_shape
self
.
check_dygraph
=
False
self
.
attrs
=
{
'out_h'
:
self
.
out_h
,
'out_w'
:
self
.
out_w
,
'interp_method'
:
self
.
interp_method
,
'align_corners'
:
self
.
align_corners
,
'data_layout'
:
self
.
data_layout
,
}
if
self
.
scale
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
if
self
.
scale
>
0.0
:
self
.
scale
=
[
self
.
scale
]
if
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
==
1
:
self
.
scale
=
[
self
.
scale
[
0
],
self
.
scale
[
0
]]
self
.
attrs
[
'scale'
]
=
self
.
scale
self
.
outputs
=
{
'Out'
:
convert_float_to_uint16
(
output_np
)}
def
test_check_output
(
self
):
self
.
check_output
(
check_dygraph
=
self
.
check_dygraph
,
atol
=
1e-2
)
def
test_check_grad
(
self
):
self
.
check_grad
(
[
'X'
],
'Out'
,
in_place
=
True
,
check_dygraph
=
self
.
check_dygraph
,
max_relative_error
=
1e-2
,
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBicubicInterpCase1BF16
(
TestBicubicInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case1
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBicubicInterpCase2BF16
(
TestBicubicInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case2
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBicubicInterpCase3BF16
(
TestBicubicInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case3
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBicubicInterpCase4BF16
(
TestBicubicInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case4
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBicubicInterpCase5BF16
(
TestBicubicInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case5
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBicubicInterpCase6BF16
(
TestBicubicInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case6
(
self
)
class
TestBicubicInterpSame
(
TestBicubicInterpOp
):
...
...
python/paddle/fluid/tests/unittests/test_bilinear_interp_v2_op.py
浏览文件 @
df423557
...
...
@@ -15,7 +15,7 @@
import
unittest
import
numpy
as
np
from
eager_op_test
import
OpTest
from
eager_op_test
import
OpTest
,
convert_float_to_uint16
import
paddle
from
paddle
import
fluid
...
...
@@ -23,6 +23,90 @@ from paddle.fluid import core
from
paddle.nn.functional
import
interpolate
def
create_test_case0
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
2
,
3
,
5
,
5
]
self
.
out_h
=
2
self
.
out_w
=
2
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
3
,
3
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case1
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case2
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case3
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case4
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
2
,
2
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case5
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
11
,
11
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case6
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
65
,
33
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case7
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[
2.0
,
0.5
]
self
.
align_corners
=
False
self
.
align_mode
=
1
def
bilinear_interp_test
(
x
,
OutSize
=
None
,
...
...
@@ -156,9 +240,10 @@ class TestBilinearInterpOp(OpTest):
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
dtype
=
np
.
float64
self
.
init_test_case
()
self
.
op_type
=
"bilinear_interp_v2"
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float64"
)
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
self
.
dtype
)
if
self
.
data_layout
==
"NCHW"
:
in_h
=
self
.
input_shape
[
2
]
...
...
@@ -225,94 +310,42 @@ class TestBilinearInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
2
,
3
,
5
,
5
]
self
.
out_h
=
2
self
.
out_w
=
2
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
3
,
3
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case0
(
self
)
class
TestBilinearInterpCase1
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case1
(
self
)
class
TestBilinearInterpCase2
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case2
(
self
)
class
TestBilinearInterpCase3
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case3
(
self
)
class
TestBilinearInterpCase4
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
2
,
2
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case4
(
self
)
class
TestBilinearInterpCase5
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
11
,
11
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case5
(
self
)
class
TestBilinearInterpCase6
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
65
,
33
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case6
(
self
)
class
TestBilinearInterpCase7
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[
2.0
,
0.5
]
self
.
align_corners
=
False
self
.
align_mode
=
1
create_test_case7
(
self
)
class
TestBilinearInterpSame
(
TestBilinearInterpOp
):
...
...
@@ -351,6 +384,214 @@ class TestBilinearInterpDataLayout(TestBilinearInterpOp):
self
.
data_layout
=
"NHWC"
class
TestBilinearInterpOpFP16
(
TestBilinearInterpOp
):
def
test_check_output
(
self
):
self
.
check_output
(
atol
=
1e-3
)
def
test_check_grad
(
self
):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
,
max_relative_error
=
1e-2
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
self
.
dtype
=
np
.
float16
class
TestBilinearInterpCase1FP16
(
TestBilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case1
(
self
)
self
.
dtype
=
np
.
float16
class
TestBilinearInterpCase2FP16
(
TestBilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case2
(
self
)
self
.
dtype
=
np
.
float16
class
TestBilinearInterpCase3FP16
(
TestBilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case3
(
self
)
self
.
dtype
=
np
.
float16
class
TestBilinearInterpCase4FP16
(
TestBilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case4
(
self
)
self
.
dtype
=
np
.
float16
class
TestBilinearInterpCase5FP16
(
TestBilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case5
(
self
)
self
.
dtype
=
np
.
float16
class
TestBilinearInterpCase6FP16
(
TestBilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case6
(
self
)
self
.
dtype
=
np
.
float16
class
TestBilinearInterpCase7FP16
(
TestBilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case7
(
self
)
self
.
dtype
=
np
.
float16
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBilinearInterpOpBF16
(
OpTest
):
def
setUp
(
self
):
self
.
python_api
=
bilinear_interp_test
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
init_test_case
()
self
.
op_type
=
"bilinear_interp_v2"
self
.
dtype
=
np
.
uint16
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float32"
)
if
self
.
data_layout
==
"NCHW"
:
in_h
=
self
.
input_shape
[
2
]
in_w
=
self
.
input_shape
[
3
]
else
:
in_h
=
self
.
input_shape
[
1
]
in_w
=
self
.
input_shape
[
2
]
scale_h
=
0
scale_w
=
0
if
self
.
scale
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
if
self
.
scale
>
0.0
:
scale_h
=
scale_w
=
float
(
self
.
scale
)
if
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
==
1
:
scale_w
=
scale_h
=
self
.
scale
[
0
]
elif
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
>
1
:
scale_w
=
self
.
scale
[
1
]
scale_h
=
self
.
scale
[
0
]
out_h
=
int
(
in_h
*
scale_h
)
out_w
=
int
(
in_w
*
scale_w
)
else
:
out_h
=
self
.
out_h
out_w
=
self
.
out_w
output_np
=
bilinear_interp_np
(
input_np
,
out_h
,
out_w
,
0
,
0
,
self
.
out_size
,
self
.
actual_shape
,
self
.
align_corners
,
self
.
align_mode
,
self
.
data_layout
,
)
self
.
inputs
=
{
'X'
:
convert_float_to_uint16
(
input_np
)}
if
self
.
out_size
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
out_size
if
self
.
actual_shape
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
actual_shape
self
.
attrs
=
{
'out_h'
:
self
.
out_h
,
'out_w'
:
self
.
out_w
,
'interp_method'
:
self
.
interp_method
,
'align_corners'
:
self
.
align_corners
,
'align_mode'
:
self
.
align_mode
,
'data_layout'
:
self
.
data_layout
,
}
if
self
.
scale
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
if
self
.
scale
>
0.0
:
self
.
scale
=
[
self
.
scale
]
if
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
==
1
:
self
.
scale
=
[
self
.
scale
[
0
],
self
.
scale
[
0
]]
self
.
attrs
[
'scale'
]
=
self
.
scale
self
.
outputs
=
{
'Out'
:
convert_float_to_uint16
(
output_np
)}
def
test_check_output
(
self
):
self
.
check_output
(
atol
=
1e-2
)
def
test_check_grad
(
self
):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
,
max_relative_error
=
1e-2
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBilinearInterpCase1BF16
(
TestBilinearInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case1
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBilinearInterpCase2BF16
(
TestBilinearInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case2
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBilinearInterpCase3BF16
(
TestBilinearInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case3
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBilinearInterpCase4BF16
(
TestBilinearInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case4
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBilinearInterpCase5BF16
(
TestBilinearInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case5
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBilinearInterpCase6BF16
(
TestBilinearInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case6
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestBilinearInterpCase7BF16
(
TestBilinearInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case7
(
self
)
class
TestBilinearInterpOpUint8
(
OpTest
):
def
setUp
(
self
):
self
.
python_api
=
bilinear_interp_test
...
...
python/paddle/fluid/tests/unittests/test_linear_interp_v2_op.py
浏览文件 @
df423557
...
...
@@ -16,7 +16,7 @@ import platform
import
unittest
import
numpy
as
np
from
eager_op_test
import
OpTest
,
paddle_static_guard
from
eager_op_test
import
OpTest
,
convert_float_to_uint16
,
paddle_static_guard
import
paddle
from
paddle
import
fluid
...
...
@@ -24,6 +24,20 @@ from paddle.fluid import Program, core, program_guard
from
paddle.nn.functional
import
interpolate
def
create_test_case0
(
self
):
self
.
interp_method
=
'linear'
self
.
input_shape
=
[
1
,
3
,
100
]
self
.
out_w
=
50
self
.
scale
=
0.5
self
.
out_size
=
np
.
array
(
[
50
,
]
).
astype
(
"int32"
)
self
.
align_corners
=
False
self
.
align_mode
=
1
def
linear_interp_test
(
x
,
OutSize
=
None
,
...
...
@@ -127,9 +141,10 @@ class TestLinearInterpOp(OpTest):
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
dtype
=
np
.
float64
self
.
init_test_case
()
self
.
op_type
=
"linear_interp_v2"
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float64"
)
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
self
.
dtype
)
scale_w
=
0
if
self
.
data_layout
==
"NCHW"
:
...
...
@@ -185,17 +200,7 @@ class TestLinearInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
self
.
interp_method
=
'linear'
self
.
input_shape
=
[
1
,
3
,
100
]
self
.
out_w
=
50
self
.
scale
=
0.5
self
.
out_size
=
np
.
array
(
[
50
,
]
).
astype
(
"int32"
)
self
.
align_corners
=
False
self
.
align_mode
=
1
create_test_case0
(
self
)
class
TestLinearInterpOpDataLayout
(
TestLinearInterpOp
):
...
...
@@ -333,6 +338,97 @@ class TestLinearInterpOpAPI2_0(unittest.TestCase):
np
.
testing
.
assert_allclose
(
interp
.
numpy
(),
expect
,
rtol
=
1e-05
)
class
TestLinearInterpOpFP16
(
TestLinearInterpOp
):
def
test_check_output
(
self
):
self
.
check_output
(
atol
=
1e-3
)
def
test_check_grad
(
self
):
self
.
check_grad
(
[
'X'
],
'Out'
,
in_place
=
True
,
max_relative_error
=
1e-2
,
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
self
.
dtype
=
np
.
float16
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestLinearInterpOpBF16
(
OpTest
):
def
setUp
(
self
):
self
.
python_api
=
linear_interp_test
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
init_test_case
()
self
.
op_type
=
"linear_interp_v2"
self
.
dtype
=
np
.
uint16
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float32"
)
scale_w
=
0
if
self
.
data_layout
==
"NCHW"
:
in_w
=
self
.
input_shape
[
2
]
else
:
in_w
=
self
.
input_shape
[
1
]
if
self
.
scale
>
0
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
self
.
scale
=
float
(
self
.
scale
)
if
isinstance
(
self
.
scale
,
list
):
self
.
scale
=
float
(
self
.
scale
[
0
])
out_w
=
int
(
in_w
*
self
.
scale
)
else
:
out_w
=
self
.
out_w
output_np
=
linear_interp_np
(
input_np
,
out_w
,
self
.
scale
,
self
.
out_size
,
self
.
actual_shape
,
self
.
align_corners
,
self
.
align_mode
,
self
.
data_layout
,
)
self
.
inputs
=
{
'X'
:
convert_float_to_uint16
(
input_np
)}
if
self
.
out_size
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
out_size
if
self
.
actual_shape
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
actual_shape
self
.
attrs
=
{
'out_w'
:
self
.
out_w
,
'interp_method'
:
self
.
interp_method
,
'align_corners'
:
self
.
align_corners
,
'align_mode'
:
self
.
align_mode
,
'data_layout'
:
self
.
data_layout
,
}
if
self
.
scale
>
0
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
self
.
scale
=
[
float
(
self
.
scale
)]
self
.
attrs
[
'scale'
]
=
self
.
scale
self
.
outputs
=
{
'Out'
:
convert_float_to_uint16
(
output_np
)}
def
test_check_output
(
self
):
place
=
core
.
CUDAPlace
(
0
)
self
.
check_output_with_place
(
place
,
atol
=
1e-2
)
def
test_check_grad
(
self
):
place
=
core
.
CUDAPlace
(
0
)
self
.
check_grad_with_place
(
place
,
[
'X'
],
'Out'
,
in_place
=
True
,
max_relative_error
=
1e-2
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
class
TestResizeLinearOpUint8
(
OpTest
):
def
setUp
(
self
):
self
.
out_size
=
None
...
...
python/paddle/fluid/tests/unittests/test_nearest_interp_v2_op.py
浏览文件 @
df423557
...
...
@@ -15,7 +15,7 @@
import
unittest
import
numpy
as
np
from
eager_op_test
import
OpTest
from
eager_op_test
import
OpTest
,
convert_float_to_uint16
import
paddle
from
paddle
import
fluid
...
...
@@ -25,6 +25,74 @@ from paddle.nn.functional import interpolate
paddle
.
enable_static
()
def
create_test_case0
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
2
,
3
,
4
,
5
]
self
.
out_h
=
2
self
.
out_w
=
2
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
3
,
3
]).
astype
(
"int32"
)
self
.
align_corners
=
True
def
create_test_case1
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
4
,
1
,
1
,
7
,
8
]
self
.
out_d
=
1
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
align_corners
=
True
def
create_test_case2
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
align_corners
=
True
def
create_test_case3
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
align_corners
=
True
def
create_test_case4
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
2
,
2
]).
astype
(
"int32"
)
self
.
align_corners
=
True
def
create_test_case5
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
11
,
11
]).
astype
(
"int32"
)
self
.
align_corners
=
True
def
create_test_case6
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
65
,
129
]).
astype
(
"int32"
)
self
.
align_corners
=
True
def
nearest_interp_test
(
x
,
OutSize
=
None
,
...
...
@@ -208,9 +276,10 @@ class TestNearestInterpOp(OpTest):
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
dtype
=
np
.
float64
self
.
init_test_case
()
self
.
op_type
=
"nearest_interp_v2"
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float64"
)
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
self
.
dtype
)
if
self
.
data_layout
==
"NCHW"
and
len
(
self
.
input_shape
)
==
4
:
in_d
=
1
...
...
@@ -320,77 +389,37 @@ class TestNearestInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
2
,
3
,
4
,
5
]
self
.
out_h
=
2
self
.
out_w
=
2
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
3
,
3
]).
astype
(
"int32"
)
self
.
align_corners
=
True
create_test_case0
(
self
)
class
TestNearestNeighborInterpCase1
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
4
,
1
,
1
,
7
,
8
]
self
.
out_d
=
1
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
align_corners
=
True
create_test_case1
(
self
)
class
TestNearestNeighborInterpCase2
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
align_corners
=
True
create_test_case2
(
self
)
class
TestNearestNeighborInterpCase3
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
align_corners
=
True
create_test_case3
(
self
)
class
TestNearestNeighborInterpCase4
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
2
,
2
]).
astype
(
"int32"
)
self
.
align_corners
=
True
create_test_case4
(
self
)
class
TestNearestNeighborInterpCase5
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
11
,
11
]).
astype
(
"int32"
)
self
.
align_corners
=
True
create_test_case5
(
self
)
class
TestNearestNeighborInterpCase6
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
65
,
129
]).
astype
(
"int32"
)
self
.
align_corners
=
True
create_test_case6
(
self
)
class
TestNearestNeighborInterpSame
(
TestNearestInterpOp
):
...
...
@@ -414,6 +443,248 @@ class TestNearestNeighborInterpActualShape(TestNearestInterpOp):
self
.
align_corners
=
True
class
TestNearestInterpOpFP16
(
TestNearestInterpOp
):
def
test_check_output
(
self
):
self
.
check_output
(
check_dygraph
=
True
,
atol
=
1e-3
)
def
test_check_grad
(
self
):
self
.
check_grad
(
[
'X'
],
'Out'
,
in_place
=
True
,
check_dygraph
=
True
,
max_relative_error
=
1e-2
,
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
self
.
dtype
=
np
.
float16
class
TestNearestNeighborInterpCase1FP16
(
TestNearestInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case1
(
self
)
self
.
dtype
=
np
.
float16
class
TestNearestNeighborInterpCase2FP16
(
TestNearestInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case2
(
self
)
self
.
dtype
=
np
.
float16
class
TestNearestNeighborInterpCase3FP16
(
TestNearestInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case3
(
self
)
self
.
dtype
=
np
.
float16
class
TestNearestNeighborInterpCase4FP16
(
TestNearestInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case4
(
self
)
self
.
dtype
=
np
.
float16
class
TestNearestNeighborInterpCase5FP16
(
TestNearestInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case5
(
self
)
self
.
dtype
=
np
.
float16
class
TestNearestNeighborInterpCase6FP16
(
TestNearestInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case6
(
self
)
self
.
dtype
=
np
.
float16
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestNearestInterpOpBF16
(
OpTest
):
def
setUp
(
self
):
self
.
python_api
=
nearest_interp_test
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
init_test_case
()
self
.
op_type
=
"nearest_interp_v2"
self
.
dtype
=
np
.
uint16
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float32"
)
if
self
.
data_layout
==
"NCHW"
and
len
(
self
.
input_shape
)
==
4
:
in_d
=
1
in_h
=
self
.
input_shape
[
2
]
in_w
=
self
.
input_shape
[
3
]
else
:
in_d
=
1
in_h
=
self
.
input_shape
[
1
]
in_w
=
self
.
input_shape
[
2
]
if
self
.
data_layout
==
"NCDHW"
and
len
(
self
.
input_shape
)
==
5
:
in_d
=
self
.
input_shape
[
2
]
in_h
=
self
.
input_shape
[
3
]
in_w
=
self
.
input_shape
[
4
]
else
:
in_d
=
self
.
input_shape
[
1
]
in_h
=
self
.
input_shape
[
2
]
in_w
=
self
.
input_shape
[
3
]
scale_d
=
0
scale_h
=
0
scale_w
=
0
if
self
.
scale
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
if
self
.
scale
>
0
:
scale_d
=
scale_h
=
scale_w
=
float
(
self
.
scale
)
if
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
==
1
:
scale_d
=
scale_w
=
scale_h
=
self
.
scale
[
0
]
elif
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
>
1
:
if
len
(
self
.
scale
)
==
5
:
scale_w
=
self
.
scale
[
2
]
scale_h
=
self
.
scale
[
1
]
scale_d
=
self
.
scale
[
0
]
else
:
scale_w
=
self
.
scale
[
1
]
scale_h
=
self
.
scale
[
0
]
out_h
=
int
(
in_h
*
scale_h
)
out_w
=
int
(
in_w
*
scale_w
)
out_d
=
int
(
in_d
*
scale_d
)
else
:
if
len
(
self
.
input_shape
)
==
5
:
out_d
=
self
.
out_d
out_h
=
self
.
out_h
out_w
=
self
.
out_w
if
len
(
self
.
input_shape
)
==
4
:
output_np
=
nearest_neighbor_interp_np
(
input_np
,
out_h
,
out_w
,
scale_h
,
scale_w
,
self
.
out_size
,
self
.
actual_shape
,
self
.
align_corners
,
self
.
data_layout
,
)
elif
len
(
self
.
input_shape
)
==
5
:
output_np
=
nearest_neighbor_interp3d_np
(
input_np
,
out_d
,
out_h
,
out_w
,
scale_d
,
scale_h
,
scale_w
,
self
.
out_size
,
self
.
actual_shape
,
self
.
align_corners
,
self
.
data_layout
,
)
self
.
inputs
=
{
'X'
:
convert_float_to_uint16
(
input_np
)}
if
self
.
out_size
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
out_size
if
self
.
actual_shape
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
actual_shape
if
len
(
self
.
input_shape
)
==
5
:
self
.
attrs
=
{
'out_d'
:
self
.
out_d
,
'out_h'
:
self
.
out_h
,
'out_w'
:
self
.
out_w
,
'interp_method'
:
self
.
interp_method
,
'align_corners'
:
self
.
align_corners
,
'data_layout'
:
self
.
data_layout
,
}
else
:
self
.
attrs
=
{
'out_h'
:
self
.
out_h
,
'out_w'
:
self
.
out_w
,
'interp_method'
:
self
.
interp_method
,
'align_corners'
:
self
.
align_corners
,
'data_layout'
:
self
.
data_layout
,
}
if
self
.
scale
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
if
self
.
scale
>
0
:
self
.
scale
=
[
self
.
scale
]
if
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
==
1
:
self
.
scale
=
[
self
.
scale
[
0
],
self
.
scale
[
0
]]
self
.
attrs
[
'scale'
]
=
self
.
scale
self
.
outputs
=
{
'Out'
:
convert_float_to_uint16
(
output_np
)}
def
test_check_output
(
self
):
self
.
check_output
(
check_dygraph
=
True
,
atol
=
1e-2
)
def
test_check_grad
(
self
):
self
.
check_grad
(
[
'X'
],
'Out'
,
in_place
=
True
,
check_dygraph
=
True
,
max_relative_error
=
1e-2
,
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
class
TestNearestNeighborInterpCase1BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case1
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestNearestNeighborInterpCase2BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case2
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestNearestNeighborInterpCase3BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case3
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestNearestNeighborInterpCase4BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case4
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestNearestNeighborInterpCase5BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case5
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestNearestNeighborInterpCase6BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case6
(
self
)
class
TestNearestNeighborInterpDataLayout
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
...
...
python/paddle/fluid/tests/unittests/test_trilinear_interp_v2_op.py
浏览文件 @
df423557
...
...
@@ -15,7 +15,7 @@
import
unittest
import
numpy
as
np
from
eager_op_test
import
OpTest
from
eager_op_test
import
OpTest
,
convert_float_to_uint16
import
paddle
from
paddle
import
fluid
...
...
@@ -25,6 +25,87 @@ from paddle.nn.functional import interpolate
np
.
random
.
seed
(
123
)
def
create_test_case0
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
2
,
3
,
4
,
4
,
4
]
self
.
out_d
=
2
self
.
out_h
=
2
self
.
out_w
=
2
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
3
,
3
,
3
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case1
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
2
,
1
,
7
,
8
,
9
]
self
.
out_d
=
1
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case2
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
2
,
3
,
9
,
6
,
8
]
self
.
out_d
=
12
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case3
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
3
,
2
,
16
,
8
,
4
]
self
.
out_d
=
32
self
.
out_h
=
16
self
.
out_w
=
8
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case4
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
4
,
1
,
7
,
8
,
9
]
self
.
out_d
=
1
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
2
,
2
,
2
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case5
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
3
,
3
,
9
,
6
,
8
]
self
.
out_d
=
12
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
11
,
11
,
11
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
def
create_test_case6
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
1
,
1
,
16
,
8
,
4
]
self
.
out_d
=
8
self
.
out_h
=
32
self
.
out_w
=
16
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
17
,
9
,
5
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
def
trilinear_interp_test
(
x
,
OutSize
=
None
,
...
...
@@ -201,10 +282,13 @@ class TestTrilinearInterpOp(OpTest):
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCDHW'
self
.
dtype
=
np
.
float32
self
.
init_test_case
()
self
.
op_type
=
"trilinear_interp_v2"
# NOTE(dev): some AsDispensible input is not used under imperative mode.
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float32"
)
# Skip check_dygraph while found them in Inputs.
self
.
check_dygraph
=
True
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
self
.
dtype
)
scale_w
=
0
scale_h
=
0
...
...
@@ -285,90 +369,37 @@ class TestTrilinearInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
2
,
3
,
4
,
4
,
4
]
self
.
out_d
=
2
self
.
out_h
=
2
self
.
out_w
=
2
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
3
,
3
,
3
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case0
(
self
)
class
TestTrilinearInterpCase1
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
2
,
1
,
7
,
8
,
9
]
self
.
out_d
=
1
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case1
(
self
)
class
TestTrilinearInterpCase2
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
2
,
3
,
9
,
6
,
8
]
self
.
out_d
=
12
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case2
(
self
)
class
TestTrilinearInterpCase3
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
3
,
2
,
16
,
8
,
4
]
self
.
out_d
=
32
self
.
out_h
=
16
self
.
out_w
=
8
self
.
scale
=
[]
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case3
(
self
)
class
TestTrilinearInterpCase4
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
4
,
1
,
7
,
8
,
9
]
self
.
out_d
=
1
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
2
,
2
,
2
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case4
(
self
)
class
TestTrilinearInterpCase5
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
3
,
3
,
9
,
6
,
8
]
self
.
out_d
=
12
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
11
,
11
,
11
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case5
(
self
)
class
TestTrilinearInterpCase6
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
self
.
input_shape
=
[
1
,
1
,
16
,
8
,
4
]
self
.
out_d
=
8
self
.
out_h
=
32
self
.
out_w
=
16
self
.
scale
=
[]
self
.
out_size
=
np
.
array
([
17
,
9
,
5
]).
astype
(
"int32"
)
self
.
align_corners
=
True
self
.
align_mode
=
1
create_test_case6
(
self
)
class
TestTrilinearInterpSame
(
TestTrilinearInterpOp
):
...
...
@@ -422,6 +453,229 @@ class TestTrilinearInterpDatalayout(TestTrilinearInterpOp):
self
.
data_layout
=
"NDHWC"
class
TestTrilinearInterpOpFP16
(
TestTrilinearInterpOp
):
def
test_check_output
(
self
):
self
.
check_output
(
check_dygraph
=
self
.
check_dygraph
,
atol
=
1e-3
)
def
test_check_grad
(
self
):
self
.
check_grad
(
[
'X'
],
'Out'
,
in_place
=
True
,
check_dygraph
=
self
.
check_dygraph
,
max_relative_error
=
1e-2
,
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
self
.
dtype
=
np
.
float16
class
TestTrilinearInterpCase1FP16
(
TestTrilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case1
(
self
)
self
.
dtype
=
np
.
float16
class
TestTrilinearInterpCase2FP16
(
TestTrilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case2
(
self
)
self
.
dtype
=
np
.
float16
class
TestTrilinearInterpCase3FP16
(
TestTrilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case3
(
self
)
self
.
dtype
=
np
.
float16
class
TestTrilinearInterpCase4FP16
(
TestTrilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case4
(
self
)
self
.
dtype
=
np
.
float16
class
TestTrilinearInterpCase5FP16
(
TestTrilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case5
(
self
)
self
.
dtype
=
np
.
float16
class
TestTrilinearInterpCase6FP16
(
TestTrilinearInterpOpFP16
):
def
init_test_case
(
self
):
create_test_case6
(
self
)
self
.
dtype
=
np
.
float16
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestNearestInterpOpBF16
(
OpTest
):
def
setUp
(
self
):
self
.
python_api
=
trilinear_interp_test
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCDHW'
self
.
init_test_case
()
self
.
op_type
=
"trilinear_interp_v2"
# NOTE(dev): some AsDispensible input is not used under imperative mode.
# Skip check_dygraph while found them in Inputs.
self
.
check_dygraph
=
True
self
.
dtype
=
np
.
uint16
input_np
=
np
.
random
.
random
(
self
.
input_shape
).
astype
(
"float32"
)
scale_w
=
0
scale_h
=
0
scale_d
=
0
if
self
.
data_layout
==
"NCDHW"
:
in_d
=
self
.
input_shape
[
2
]
in_h
=
self
.
input_shape
[
3
]
in_w
=
self
.
input_shape
[
4
]
else
:
in_d
=
self
.
input_shape
[
1
]
in_h
=
self
.
input_shape
[
2
]
in_w
=
self
.
input_shape
[
3
]
if
self
.
scale
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
if
self
.
scale
>
0
:
scale_d
=
scale_h
=
scale_w
=
float
(
self
.
scale
)
if
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
==
1
:
scale_d
=
scale_w
=
scale_h
=
self
.
scale
[
0
]
elif
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
>
1
:
scale_w
=
self
.
scale
[
2
]
scale_h
=
self
.
scale
[
1
]
scale_d
=
self
.
scale
[
0
]
out_d
=
int
(
in_d
*
scale_d
)
out_h
=
int
(
in_h
*
scale_h
)
out_w
=
int
(
in_w
*
scale_w
)
else
:
out_d
=
self
.
out_d
out_h
=
self
.
out_h
out_w
=
self
.
out_w
output_np
=
trilinear_interp_np
(
input_np
,
out_d
,
out_h
,
out_w
,
scale_d
,
scale_h
,
scale_w
,
self
.
out_size
,
self
.
actual_shape
,
self
.
align_corners
,
self
.
align_mode
,
self
.
data_layout
,
)
self
.
inputs
=
{
'X'
:
convert_float_to_uint16
(
input_np
)}
if
self
.
out_size
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
out_size
self
.
check_dygraph
=
False
if
self
.
actual_shape
is
not
None
:
self
.
inputs
[
'OutSize'
]
=
self
.
actual_shape
self
.
check_dygraph
=
False
# c++ end treat NCDHW the same way as NCHW
if
self
.
data_layout
==
'NCDHW'
:
data_layout
=
'NCHW'
else
:
data_layout
=
'NHWC'
self
.
attrs
=
{
'out_d'
:
self
.
out_d
,
'out_h'
:
self
.
out_h
,
'out_w'
:
self
.
out_w
,
'interp_method'
:
self
.
interp_method
,
'align_corners'
:
self
.
align_corners
,
'align_mode'
:
self
.
align_mode
,
'data_layout'
:
data_layout
,
}
if
self
.
scale
:
if
isinstance
(
self
.
scale
,
float
)
or
isinstance
(
self
.
scale
,
int
):
if
self
.
scale
>
0
:
self
.
scale
=
[
self
.
scale
]
if
isinstance
(
self
.
scale
,
list
)
and
len
(
self
.
scale
)
==
1
:
self
.
scale
=
[
self
.
scale
[
0
],
self
.
scale
[
0
],
self
.
scale
[
0
]]
self
.
attrs
[
'scale'
]
=
self
.
scale
self
.
outputs
=
{
'Out'
:
convert_float_to_uint16
(
output_np
)}
def
test_check_output
(
self
):
self
.
check_output
(
check_dygraph
=
self
.
check_dygraph
,
atol
=
1e-2
)
def
test_check_grad
(
self
):
self
.
check_grad
(
[
'X'
],
'Out'
,
in_place
=
True
,
check_dygraph
=
self
.
check_dygraph
,
max_relative_error
=
1e-2
,
)
def
init_test_case
(
self
):
create_test_case0
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestTrilinearInterpCase1BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case1
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestTrilinearInterpCase2BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case2
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestTrilinearInterpCase3BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case3
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestTrilinearInterpCase4BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case4
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestTrilinearInterpCase5BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case5
(
self
)
@
unittest
.
skipIf
(
not
core
.
is_compiled_with_cuda
()
or
not
core
.
is_bfloat16_supported
(
core
.
CUDAPlace
(
0
)),
"core is not compiled with CUDA or not support the bfloat16"
,
)
class
TestTrilinearInterpCase6BF16
(
TestNearestInterpOpBF16
):
def
init_test_case
(
self
):
create_test_case6
(
self
)
class
TestTrilinearInterpOpUint8
(
OpTest
):
def
setUp
(
self
):
self
.
python_api
=
trilinear_interp_test
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录