Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
192e08cb
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
192e08cb
编写于
10月 13, 2021
作者:
W
wenbin
提交者:
GitHub
10月 13, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
pool fix (#36388)
* pool fix * comments
上级
bf748f24
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
33 addition
and
15 deletion
+33
-15
paddle/fluid/inference/tensorrt/convert/pool2d_op.cc
paddle/fluid/inference/tensorrt/convert/pool2d_op.cc
+33
-15
未找到文件。
paddle/fluid/inference/tensorrt/convert/pool2d_op.cc
浏览文件 @
192e08cb
...
@@ -115,6 +115,18 @@ class Pool2dOpConverter : public OpConverter {
...
@@ -115,6 +115,18 @@ class Pool2dOpConverter : public OpConverter {
nvinfer1
::
DimsHW
nv_paddings
(
paddings
[
0
],
paddings
[
1
]);
nvinfer1
::
DimsHW
nv_paddings
(
paddings
[
0
],
paddings
[
1
]);
nvinfer1
::
ILayer
*
layer
=
nullptr
;
nvinfer1
::
ILayer
*
layer
=
nullptr
;
nvinfer1
::
DimsHW
pre_pad
(
0
,
0
);
nvinfer1
::
DimsHW
post_pad
(
0
,
0
);
// paddle Non ceil_mode : Output size = (input size - filter size + 2 *
// padding) / stride (stride size) + 1
// tensorrt EXPLICIT_ROUND_DOWN: O = floor((M - DK) / S) + 1
// so if M - DK < 0 we need extra padding
if
(
input_shape
.
d
[
input_dims
-
2
]
-
ksize
[
0
]
+
2
*
paddings
[
0
]
<
0
)
{
post_pad
.
h
()
=
strides
[
0
]
-
1
;
}
if
(
input_shape
.
d
[
input_dims
-
1
]
-
ksize
[
1
]
+
2
*
paddings
[
1
]
<
0
)
{
post_pad
.
w
()
=
strides
[
1
]
-
1
;
}
if
(
op_desc
.
HasAttr
(
"enable_int8"
))
{
if
(
op_desc
.
HasAttr
(
"enable_int8"
))
{
#if IS_TRT_VERSION_GE(5000)
#if IS_TRT_VERSION_GE(5000)
...
@@ -126,6 +138,16 @@ class Pool2dOpConverter : public OpConverter {
...
@@ -126,6 +138,16 @@ class Pool2dOpConverter : public OpConverter {
if
(
engine_
->
with_dynamic_shape
())
{
if
(
engine_
->
with_dynamic_shape
())
{
if
(
!
adaptive
&&
!
global_pooling
&&
!
ceil_mode
)
{
if
(
!
adaptive
&&
!
global_pooling
&&
!
ceil_mode
)
{
if
((
post_pad
.
w
()
>
0
||
post_pad
.
h
()
>
0
)
&&
(
padding_algorithm
!=
"SAME"
))
{
auto
*
pad_layer
=
TRT_ENGINE_ADD_LAYER
(
engine_
,
Padding
,
*
input1
,
pre_pad
,
post_pad
);
PADDLE_ENFORCE_NOT_NULL
(
pad_layer
,
platform
::
errors
::
Fatal
(
"Pad layer in poolOp converter could not be "
"created. The pointer to pad layer is `NULL`."
));
input1
=
pad_layer
->
getOutput
(
0
);
}
auto
*
pool_layer
=
TRT_ENGINE_ADD_LAYER
(
engine_
,
Pooling
,
*
input1
,
auto
*
pool_layer
=
TRT_ENGINE_ADD_LAYER
(
engine_
,
Pooling
,
*
input1
,
nv_pool_type
,
nv_ksize
);
nv_pool_type
,
nv_ksize
);
pool_layer
->
setStride
(
nv_strides
);
pool_layer
->
setStride
(
nv_strides
);
...
@@ -184,9 +206,8 @@ class Pool2dOpConverter : public OpConverter {
...
@@ -184,9 +206,8 @@ class Pool2dOpConverter : public OpConverter {
if
(
global_pooling
==
true
)
{
if
(
global_pooling
==
true
)
{
nv_ksize
.
d
[
0
]
=
input_shape
.
d
[
input_dims
-
2
];
nv_ksize
.
d
[
0
]
=
input_shape
.
d
[
input_dims
-
2
];
nv_ksize
.
d
[
1
]
=
input_shape
.
d
[
input_dims
-
1
];
nv_ksize
.
d
[
1
]
=
input_shape
.
d
[
input_dims
-
1
];
auto
*
pool_layer
=
TRT_ENGINE_ADD_LAYER
(
auto
*
pool_layer
=
TRT_ENGINE_ADD_LAYER
(
engine_
,
Pooling
,
*
input1
,
engine_
,
Pooling
,
*
const_cast
<
nvinfer1
::
ITensor
*>
(
input1
),
nv_pool_type
,
nv_ksize
);
nv_pool_type
,
nv_ksize
);
PADDLE_ENFORCE_NOT_NULL
(
PADDLE_ENFORCE_NOT_NULL
(
pool_layer
,
platform
::
errors
::
Fatal
(
pool_layer
,
platform
::
errors
::
Fatal
(
"trt pool layer in converter could not be created."
));
"trt pool layer in converter could not be created."
));
...
@@ -208,28 +229,25 @@ class Pool2dOpConverter : public OpConverter {
...
@@ -208,28 +229,25 @@ class Pool2dOpConverter : public OpConverter {
}
}
if
(
!
adaptive
)
{
if
(
!
adaptive
)
{
// Under ceil mode, the pre_pad and post_pad are used to
// record the the padding size. In some ceil mode cases,
// we do not need padding, so we initialize the two vars to 0.
nvinfer1
::
DimsHW
pre_pad
(
0
,
0
);
nvinfer1
::
DimsHW
post_pad
(
0
,
0
);
if
(
ceil_mode
)
{
if
(
ceil_mode
)
{
// If ceil mode is true, we will pad the appropriate size to the input.
// If ceil mode is true, we will pad the appropriate size to the input.
DealCeilMode
(
input_shape
,
ksize
,
strides
,
paddings
,
&
pre_pad
,
&
post_pad
,
DealCeilMode
(
input_shape
,
ksize
,
strides
,
paddings
,
&
pre_pad
,
&
post_pad
,
input_dims
);
input_dims
);
auto
*
pad_layer
=
TRT_ENGINE_ADD_LAYER
(
}
engine_
,
Padding
,
*
const_cast
<
nvinfer1
::
ITensor
*>
(
input1
),
pre_pad
,
post_pad
);
if
((
post_pad
.
w
()
>
0
||
post_pad
.
h
()
>
0
)
&&
(
padding_algorithm
!=
"SAME"
))
{
auto
*
pad_layer
=
TRT_ENGINE_ADD_LAYER
(
engine_
,
Padding
,
*
input1
,
pre_pad
,
post_pad
);
PADDLE_ENFORCE_NOT_NULL
(
PADDLE_ENFORCE_NOT_NULL
(
pad_layer
,
platform
::
errors
::
Fatal
(
pad_layer
,
platform
::
errors
::
Fatal
(
"Pad layer in poolOp converter could not be "
"Pad layer in poolOp converter could not be "
"created. The pointer to pad layer is `NULL`."
));
"created. The pointer to pad layer is `NULL`."
));
input1
=
pad_layer
->
getOutput
(
0
);
input1
=
pad_layer
->
getOutput
(
0
);
}
}
auto
*
pool_layer
=
TRT_ENGINE_ADD_LAYER
(
engine_
,
Pooling
,
*
const_cast
<
nvinfer1
::
ITensor
*>
(
input1
)
,
auto
*
pool_layer
=
TRT_ENGINE_ADD_LAYER
(
engine_
,
Pooling
,
*
input1
,
nv_pool_type
,
nv_ksize
);
nv_pool_type
,
nv_ksize
);
PADDLE_ENFORCE_NOT_NULL
(
PADDLE_ENFORCE_NOT_NULL
(
pool_layer
,
platform
::
errors
::
Fatal
(
pool_layer
,
platform
::
errors
::
Fatal
(
"trt pool layer in converter could not be created."
));
"trt pool layer in converter could not be created."
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录