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,
...
@@ -110,7 +110,6 @@ static void BilinearInterpolationGrad(const DenseTensor& output_grad,
for
(
int
j
=
0
;
j
<
c
;
j
++
)
{
// loop for channels
for
(
int
j
=
0
;
j
<
c
;
j
++
)
{
// loop for channels
// bilinear interpolation grad
// bilinear interpolation grad
if
(
data_layout
==
DataLayout
::
kNCHW
)
{
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
));
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_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
);
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 @@
...
@@ -15,14 +15,81 @@
import
unittest
import
unittest
import
numpy
as
np
import
numpy
as
np
from
eager_op_test
import
OpTest
from
eager_op_test
import
OpTest
,
convert_float_to_uint16
import
paddle
import
paddle
from
paddle
import
fluid
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
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
(
def
bicubic_interp_test
(
x
,
x
,
OutSize
=
None
,
OutSize
=
None
,
...
@@ -181,10 +248,12 @@ class TestBicubicInterpOp(OpTest):
...
@@ -181,10 +248,12 @@ class TestBicubicInterpOp(OpTest):
self
.
out_size
=
None
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
data_layout
=
'NCHW'
self
.
dtype
=
np
.
float64
self
.
init_test_case
()
self
.
init_test_case
()
self
.
op_type
=
"bicubic_interp_v2"
self
.
op_type
=
"bicubic_interp_v2"
# NOTE(dev): some AsDispensible input is not used under imperative mode.
# 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_h
=
0
scale_w
=
0
scale_w
=
0
if
self
.
data_layout
==
"NCHW"
:
if
self
.
data_layout
==
"NCHW"
:
...
@@ -249,76 +318,248 @@ class TestBicubicInterpOp(OpTest):
...
@@ -249,76 +318,248 @@ class TestBicubicInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
create_test_case0
(
self
)
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
class
TestBicubicInterpCase1
(
TestBicubicInterpOp
):
class
TestBicubicInterpCase1
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
create_test_case1
(
self
)
self
.
input_shape
=
[
4
,
1
,
7
,
8
]
self
.
out_h
=
1
self
.
out_w
=
1
self
.
scale
=
[]
self
.
align_corners
=
True
class
TestBicubicInterpCase2
(
TestBicubicInterpOp
):
class
TestBicubicInterpCase2
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
create_test_case2
(
self
)
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
10
self
.
out_w
=
8
self
.
scale
=
[]
self
.
align_corners
=
True
class
TestBicubicInterpCase3
(
TestBicubicInterpOp
):
class
TestBicubicInterpCase3
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
create_test_case3
(
self
)
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
align_corners
=
False
class
TestBicubicInterpCase4
(
TestBicubicInterpOp
):
class
TestBicubicInterpCase4
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
create_test_case4
(
self
)
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
class
TestBicubicInterpCase5
(
TestBicubicInterpOp
):
class
TestBicubicInterpCase5
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
create_test_case5
(
self
)
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
class
TestBicubicInterpCase6
(
TestBicubicInterpOp
):
class
TestBicubicInterpCase6
(
TestBicubicInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bicubic'
create_test_case6
(
self
)
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
class
TestBicubicInterpOpFP16
(
TestBicubicInterpOp
):
self
.
scale
=
0
def
test_check_output
(
self
):
self
.
out_size
=
np
.
array
([
64
,
32
]).
astype
(
"int32"
)
self
.
check_output
(
atol
=
1e-3
)
self
.
align_corners
=
False
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
):
class
TestBicubicInterpSame
(
TestBicubicInterpOp
):
...
...
python/paddle/fluid/tests/unittests/test_bilinear_interp_v2_op.py
浏览文件 @
df423557
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
import
unittest
import
unittest
import
numpy
as
np
import
numpy
as
np
from
eager_op_test
import
OpTest
from
eager_op_test
import
OpTest
,
convert_float_to_uint16
import
paddle
import
paddle
from
paddle
import
fluid
from
paddle
import
fluid
...
@@ -23,6 +23,90 @@ from paddle.fluid import core
...
@@ -23,6 +23,90 @@ from paddle.fluid import core
from
paddle.nn.functional
import
interpolate
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
(
def
bilinear_interp_test
(
x
,
x
,
OutSize
=
None
,
OutSize
=
None
,
...
@@ -156,9 +240,10 @@ class TestBilinearInterpOp(OpTest):
...
@@ -156,9 +240,10 @@ class TestBilinearInterpOp(OpTest):
self
.
out_size
=
None
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
data_layout
=
'NCHW'
self
.
dtype
=
np
.
float64
self
.
init_test_case
()
self
.
init_test_case
()
self
.
op_type
=
"bilinear_interp_v2"
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"
:
if
self
.
data_layout
==
"NCHW"
:
in_h
=
self
.
input_shape
[
2
]
in_h
=
self
.
input_shape
[
2
]
...
@@ -225,94 +310,42 @@ class TestBilinearInterpOp(OpTest):
...
@@ -225,94 +310,42 @@ class TestBilinearInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
create_test_case0
(
self
)
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
class
TestBilinearInterpCase1
(
TestBilinearInterpOp
):
class
TestBilinearInterpCase1
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
create_test_case1
(
self
)
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
class
TestBilinearInterpCase2
(
TestBilinearInterpOp
):
class
TestBilinearInterpCase2
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
create_test_case2
(
self
)
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
class
TestBilinearInterpCase3
(
TestBilinearInterpOp
):
class
TestBilinearInterpCase3
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
create_test_case3
(
self
)
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
class
TestBilinearInterpCase4
(
TestBilinearInterpOp
):
class
TestBilinearInterpCase4
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
create_test_case4
(
self
)
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
class
TestBilinearInterpCase5
(
TestBilinearInterpOp
):
class
TestBilinearInterpCase5
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
create_test_case5
(
self
)
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
class
TestBilinearInterpCase6
(
TestBilinearInterpOp
):
class
TestBilinearInterpCase6
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
create_test_case6
(
self
)
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
class
TestBilinearInterpCase7
(
TestBilinearInterpOp
):
class
TestBilinearInterpCase7
(
TestBilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'bilinear'
create_test_case7
(
self
)
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
class
TestBilinearInterpSame
(
TestBilinearInterpOp
):
class
TestBilinearInterpSame
(
TestBilinearInterpOp
):
...
@@ -351,6 +384,214 @@ class TestBilinearInterpDataLayout(TestBilinearInterpOp):
...
@@ -351,6 +384,214 @@ class TestBilinearInterpDataLayout(TestBilinearInterpOp):
self
.
data_layout
=
"NHWC"
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
):
class
TestBilinearInterpOpUint8
(
OpTest
):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
python_api
=
bilinear_interp_test
self
.
python_api
=
bilinear_interp_test
...
...
python/paddle/fluid/tests/unittests/test_linear_interp_v2_op.py
浏览文件 @
df423557
...
@@ -16,7 +16,7 @@ import platform
...
@@ -16,7 +16,7 @@ import platform
import
unittest
import
unittest
import
numpy
as
np
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
import
paddle
from
paddle
import
fluid
from
paddle
import
fluid
...
@@ -24,6 +24,20 @@ from paddle.fluid import Program, core, program_guard
...
@@ -24,6 +24,20 @@ from paddle.fluid import Program, core, program_guard
from
paddle.nn.functional
import
interpolate
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
(
def
linear_interp_test
(
x
,
x
,
OutSize
=
None
,
OutSize
=
None
,
...
@@ -127,9 +141,10 @@ class TestLinearInterpOp(OpTest):
...
@@ -127,9 +141,10 @@ class TestLinearInterpOp(OpTest):
self
.
out_size
=
None
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
data_layout
=
'NCHW'
self
.
dtype
=
np
.
float64
self
.
init_test_case
()
self
.
init_test_case
()
self
.
op_type
=
"linear_interp_v2"
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
scale_w
=
0
if
self
.
data_layout
==
"NCHW"
:
if
self
.
data_layout
==
"NCHW"
:
...
@@ -185,17 +200,7 @@ class TestLinearInterpOp(OpTest):
...
@@ -185,17 +200,7 @@ class TestLinearInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'linear'
create_test_case0
(
self
)
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
class
TestLinearInterpOpDataLayout
(
TestLinearInterpOp
):
class
TestLinearInterpOpDataLayout
(
TestLinearInterpOp
):
...
@@ -333,6 +338,97 @@ class TestLinearInterpOpAPI2_0(unittest.TestCase):
...
@@ -333,6 +338,97 @@ class TestLinearInterpOpAPI2_0(unittest.TestCase):
np
.
testing
.
assert_allclose
(
interp
.
numpy
(),
expect
,
rtol
=
1e-05
)
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
):
class
TestResizeLinearOpUint8
(
OpTest
):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
out_size
=
None
self
.
out_size
=
None
...
...
python/paddle/fluid/tests/unittests/test_nearest_interp_v2_op.py
浏览文件 @
df423557
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
import
unittest
import
unittest
import
numpy
as
np
import
numpy
as
np
from
eager_op_test
import
OpTest
from
eager_op_test
import
OpTest
,
convert_float_to_uint16
import
paddle
import
paddle
from
paddle
import
fluid
from
paddle
import
fluid
...
@@ -25,6 +25,74 @@ from paddle.nn.functional import interpolate
...
@@ -25,6 +25,74 @@ from paddle.nn.functional import interpolate
paddle
.
enable_static
()
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
(
def
nearest_interp_test
(
x
,
x
,
OutSize
=
None
,
OutSize
=
None
,
...
@@ -208,9 +276,10 @@ class TestNearestInterpOp(OpTest):
...
@@ -208,9 +276,10 @@ class TestNearestInterpOp(OpTest):
self
.
out_size
=
None
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCHW'
self
.
data_layout
=
'NCHW'
self
.
dtype
=
np
.
float64
self
.
init_test_case
()
self
.
init_test_case
()
self
.
op_type
=
"nearest_interp_v2"
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
:
if
self
.
data_layout
==
"NCHW"
and
len
(
self
.
input_shape
)
==
4
:
in_d
=
1
in_d
=
1
...
@@ -320,77 +389,37 @@ class TestNearestInterpOp(OpTest):
...
@@ -320,77 +389,37 @@ class TestNearestInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
create_test_case0
(
self
)
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
class
TestNearestNeighborInterpCase1
(
TestNearestInterpOp
):
class
TestNearestNeighborInterpCase1
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
create_test_case1
(
self
)
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
class
TestNearestNeighborInterpCase2
(
TestNearestInterpOp
):
class
TestNearestNeighborInterpCase2
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
create_test_case2
(
self
)
self
.
input_shape
=
[
3
,
3
,
9
,
6
]
self
.
out_h
=
12
self
.
out_w
=
12
self
.
scale
=
[]
self
.
align_corners
=
True
class
TestNearestNeighborInterpCase3
(
TestNearestInterpOp
):
class
TestNearestNeighborInterpCase3
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
create_test_case3
(
self
)
self
.
input_shape
=
[
1
,
1
,
32
,
64
]
self
.
out_h
=
64
self
.
out_w
=
32
self
.
scale
=
[]
self
.
align_corners
=
True
class
TestNearestNeighborInterpCase4
(
TestNearestInterpOp
):
class
TestNearestNeighborInterpCase4
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
create_test_case4
(
self
)
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
class
TestNearestNeighborInterpCase5
(
TestNearestInterpOp
):
class
TestNearestNeighborInterpCase5
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
create_test_case5
(
self
)
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
class
TestNearestNeighborInterpCase6
(
TestNearestInterpOp
):
class
TestNearestNeighborInterpCase6
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
create_test_case6
(
self
)
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
class
TestNearestNeighborInterpSame
(
TestNearestInterpOp
):
class
TestNearestNeighborInterpSame
(
TestNearestInterpOp
):
...
@@ -414,6 +443,248 @@ class TestNearestNeighborInterpActualShape(TestNearestInterpOp):
...
@@ -414,6 +443,248 @@ class TestNearestNeighborInterpActualShape(TestNearestInterpOp):
self
.
align_corners
=
True
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
):
class
TestNearestNeighborInterpDataLayout
(
TestNearestInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'nearest'
self
.
interp_method
=
'nearest'
...
...
python/paddle/fluid/tests/unittests/test_trilinear_interp_v2_op.py
浏览文件 @
df423557
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
import
unittest
import
unittest
import
numpy
as
np
import
numpy
as
np
from
eager_op_test
import
OpTest
from
eager_op_test
import
OpTest
,
convert_float_to_uint16
import
paddle
import
paddle
from
paddle
import
fluid
from
paddle
import
fluid
...
@@ -25,6 +25,87 @@ from paddle.nn.functional import interpolate
...
@@ -25,6 +25,87 @@ from paddle.nn.functional import interpolate
np
.
random
.
seed
(
123
)
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
(
def
trilinear_interp_test
(
x
,
x
,
OutSize
=
None
,
OutSize
=
None
,
...
@@ -201,10 +282,13 @@ class TestTrilinearInterpOp(OpTest):
...
@@ -201,10 +282,13 @@ class TestTrilinearInterpOp(OpTest):
self
.
out_size
=
None
self
.
out_size
=
None
self
.
actual_shape
=
None
self
.
actual_shape
=
None
self
.
data_layout
=
'NCDHW'
self
.
data_layout
=
'NCDHW'
self
.
dtype
=
np
.
float32
self
.
init_test_case
()
self
.
init_test_case
()
self
.
op_type
=
"trilinear_interp_v2"
self
.
op_type
=
"trilinear_interp_v2"
# NOTE(dev): some AsDispensible input is not used under imperative mode.
# 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_w
=
0
scale_h
=
0
scale_h
=
0
...
@@ -285,90 +369,37 @@ class TestTrilinearInterpOp(OpTest):
...
@@ -285,90 +369,37 @@ class TestTrilinearInterpOp(OpTest):
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
self
.
check_grad
([
'X'
],
'Out'
,
in_place
=
True
)
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
create_test_case0
(
self
)
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
class
TestTrilinearInterpCase1
(
TestTrilinearInterpOp
):
class
TestTrilinearInterpCase1
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
create_test_case1
(
self
)
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
class
TestTrilinearInterpCase2
(
TestTrilinearInterpOp
):
class
TestTrilinearInterpCase2
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
create_test_case2
(
self
)
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
class
TestTrilinearInterpCase3
(
TestTrilinearInterpOp
):
class
TestTrilinearInterpCase3
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
create_test_case3
(
self
)
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
class
TestTrilinearInterpCase4
(
TestTrilinearInterpOp
):
class
TestTrilinearInterpCase4
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
create_test_case4
(
self
)
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
class
TestTrilinearInterpCase5
(
TestTrilinearInterpOp
):
class
TestTrilinearInterpCase5
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
create_test_case5
(
self
)
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
class
TestTrilinearInterpCase6
(
TestTrilinearInterpOp
):
class
TestTrilinearInterpCase6
(
TestTrilinearInterpOp
):
def
init_test_case
(
self
):
def
init_test_case
(
self
):
self
.
interp_method
=
'trilinear'
create_test_case6
(
self
)
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
class
TestTrilinearInterpSame
(
TestTrilinearInterpOp
):
class
TestTrilinearInterpSame
(
TestTrilinearInterpOp
):
...
@@ -422,6 +453,229 @@ class TestTrilinearInterpDatalayout(TestTrilinearInterpOp):
...
@@ -422,6 +453,229 @@ class TestTrilinearInterpDatalayout(TestTrilinearInterpOp):
self
.
data_layout
=
"NDHWC"
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
):
class
TestTrilinearInterpOpUint8
(
OpTest
):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
python_api
=
trilinear_interp_test
self
.
python_api
=
trilinear_interp_test
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录