Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleDetection
提交
9da6f332
P
PaddleDetection
项目概览
PaddlePaddle
/
PaddleDetection
1 年多 前同步成功
通知
696
Star
11112
Fork
2696
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
184
列表
看板
标记
里程碑
合并请求
40
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleDetection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
184
Issue
184
列表
看板
标记
里程碑
合并请求
40
合并请求
40
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
9da6f332
编写于
5月 27, 2020
作者:
W
wangguanzhong
提交者:
GitHub
5月 27, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[cherry-pick] add version check (#750)
* cherry-pick add_version_check * add python version for cornerpool
上级
5a44480f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
114 addition
and
45 deletion
+114
-45
configs/anchor_free/README.md
configs/anchor_free/README.md
+1
-0
ppdet/ext_op/cornerpool_lib.py
ppdet/ext_op/cornerpool_lib.py
+107
-41
ppdet/modeling/architectures/cornernet_squeeze.py
ppdet/modeling/architectures/cornernet_squeeze.py
+2
-0
ppdet/utils/check.py
ppdet/utils/check.py
+4
-4
未找到文件。
configs/anchor_free/README.md
浏览文件 @
9da6f332
...
...
@@ -35,6 +35,7 @@
**注意:**
-
模型FPS在Tesla V100单卡环境中通过tools/eval.py进行测试
-
CornerNet-Squeeze要求使用PaddlePaddle1.8及以上版本或适当的develop版本
-
CornerNet-Squeeze中使用ResNet结构的骨干网络时,加入了FPN结构,骨干网络的输出feature map采用FPN中的P3层输出。
-
\*
CornerNet-Squeeze-dcn-mixup-cosine是基于原版CornerNet-Squeeze优化效果最好的模型,在ResNet的骨干网络基础上增加mixup预处理和使用cosine_decay
-
FCOS使用GIoU loss、用location分支预测centerness、左上右下角点偏移量归一化和ground truth中心匹配策略
...
...
ppdet/ext_op/cornerpool_lib.py
浏览文件 @
9da6f332
import
os
import
paddle.fluid
as
fluid
use_cpp
=
False
file_dir
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
__file__
))
fluid
.
load_op_library
(
os
.
path
.
join
(
file_dir
,
'src/cornerpool_lib.so'
))
try
:
fluid
.
load_op_library
(
os
.
path
.
join
(
file_dir
,
'src/cornerpool_lib.so'
))
use_cpp
=
True
except
:
print
(
'Warning: cornerpool_lib.so not found, use python version instead which may drop the inference speed. Compile in ppdet/ext_op at first if you need cpp version.'
)
from
paddle.fluid.layer_helper
import
LayerHelper
...
...
@@ -14,6 +22,19 @@ __all__ = [
]
def
cornerpool_op
(
layer_type
,
input
,
name
):
helper
=
LayerHelper
(
layer_type
,
input
=
input
,
name
=
name
)
dtype
=
helper
.
input_dtype
()
output
=
helper
.
create_variable_for_type_inference
(
dtype
)
max_map
=
helper
.
create_variable_for_type_inference
(
dtype
)
helper
.
append_op
(
type
=
layer_type
,
inputs
=
{
"X"
:
input
},
outputs
=
{
"Output"
:
output
,
"MaxMap"
:
max_map
})
return
output
def
bottom_pool
(
input
,
is_test
=
False
,
name
=
None
):
"""
This layer calculates the bottom pooling output based on the input.
...
...
@@ -34,16 +55,28 @@ def bottom_pool(input, is_test=False, name=None):
output = corner_pool.bottom_pool(input)
"""
if
is_test
:
helper
=
LayerHelper
(
'bottom_pool'
,
**
locals
())
dtype
=
helper
.
input_dtype
()
output
=
helper
.
create_variable_for_type_inference
(
dtype
)
max_map
=
helper
.
create_variable_for_type_inference
(
dtype
)
helper
.
append_op
(
type
=
"bottom_pool"
,
inputs
=
{
"X"
:
input
},
outputs
=
{
"Output"
:
output
,
"MaxMap"
:
max_map
})
return
output
if
use_cpp
:
output
=
cornerpool_op
(
"bottom_pool"
,
input
,
name
)
return
output
def
cond
(
i
,
output
):
return
i
<
H
def
body
(
i
,
output
):
cur
=
fluid
.
layers
.
slice
(
output
,
[
2
],
[
i
],
[
H
])
next
=
fluid
.
layers
.
slice
(
output
,
[
2
],
[
0
],
[
H
-
i
])
max_v
=
fluid
.
layers
.
elementwise_max
(
cur
,
next
)
orig
=
fluid
.
layers
.
slice
(
output
,
[
2
],
[
0
],
[
i
])
output
=
fluid
.
layers
.
concat
([
orig
,
max_v
],
axis
=
2
)
i
=
i
*
2
return
[
i
,
output
]
H
=
fluid
.
layers
.
shape
(
input
)[
2
]
i
=
fluid
.
layers
.
fill_constant
(
shape
=
[
1
],
dtype
=
'int32'
,
value
=
1
)
output
=
input
output
=
fluid
.
layers
.
while_loop
(
cond
,
body
,
[
i
,
output
])
return
output
[
-
1
]
H
=
input
.
shape
[
2
]
i
=
1
output
=
input
...
...
@@ -77,16 +110,27 @@ def top_pool(input, is_test=False, name=None):
output = corner_pool.top_pool(input)
"""
if
is_test
:
helper
=
LayerHelper
(
'top_pool'
,
**
locals
())
dtype
=
helper
.
input_dtype
()
output
=
helper
.
create_variable_for_type_inference
(
dtype
)
max_map
=
helper
.
create_variable_for_type_inference
(
dtype
)
helper
.
append_op
(
type
=
"top_pool"
,
inputs
=
{
"X"
:
input
},
outputs
=
{
"Output"
:
output
,
"MaxMap"
:
max_map
})
return
output
if
use_cpp
:
output
=
cornerpool_op
(
"top_pool"
,
input
,
name
)
return
output
def
cond
(
i
,
output
):
return
i
<
H
def
body
(
i
,
output
):
cur
=
fluid
.
layers
.
slice
(
output
,
[
2
],
[
0
],
[
H
-
i
])
next
=
fluid
.
layers
.
slice
(
output
,
[
2
],
[
i
],
[
H
])
max_v
=
fluid
.
layers
.
elementwise_max
(
cur
,
next
)
orig
=
fluid
.
layers
.
slice
(
output
,
[
2
],
[
H
-
i
],
[
H
])
output
=
fluid
.
layers
.
concat
([
max_v
,
orig
],
axis
=
2
)
i
=
i
*
2
return
[
i
,
output
]
H
=
fluid
.
layers
.
shape
(
input
)[
2
]
i
=
fluid
.
layers
.
fill_constant
(
shape
=
[
1
],
dtype
=
'int32'
,
value
=
1
)
output
=
input
output
=
fluid
.
layers
.
while_loop
(
cond
,
body
,
[
i
,
output
])
return
output
[
-
1
]
H
=
input
.
shape
[
2
]
i
=
1
...
...
@@ -121,16 +165,27 @@ def right_pool(input, is_test=False, name=None):
output = corner_pool.right_pool(input)
"""
if
is_test
:
helper
=
LayerHelper
(
'right_pool'
,
**
locals
())
dtype
=
helper
.
input_dtype
()
output
=
helper
.
create_variable_for_type_inference
(
dtype
)
max_map
=
helper
.
create_variable_for_type_inference
(
dtype
)
helper
.
append_op
(
type
=
"right_pool"
,
inputs
=
{
"X"
:
input
},
outputs
=
{
"Output"
:
output
,
"MaxMap"
:
max_map
})
return
output
if
use_cpp
:
output
=
cornerpool_op
(
"right_pool"
,
input
,
name
)
return
output
def
cond
(
i
,
output
):
return
i
<
W
def
body
(
i
,
output
):
cur
=
fluid
.
layers
.
slice
(
output
,
[
3
],
[
i
],
[
W
])
next
=
fluid
.
layers
.
slice
(
output
,
[
3
],
[
0
],
[
W
-
i
])
max_v
=
fluid
.
layers
.
elementwise_max
(
cur
,
next
)
orig
=
fluid
.
layers
.
slice
(
output
,
[
3
],
[
0
],
[
i
])
output
=
fluid
.
layers
.
concat
([
orig
,
max_v
],
axis
=-
1
)
i
=
i
*
2
return
[
i
,
output
]
W
=
fluid
.
layers
.
shape
(
input
)[
3
]
i
=
fluid
.
layers
.
fill_constant
(
shape
=
[
1
],
dtype
=
'int32'
,
value
=
1
)
output
=
input
output
=
fluid
.
layers
.
while_loop
(
cond
,
body
,
[
i
,
output
])
return
output
[
-
1
]
W
=
input
.
shape
[
3
]
i
=
1
...
...
@@ -165,16 +220,27 @@ def left_pool(input, is_test=False, name=None):
output = corner_pool.left_pool(input)
"""
if
is_test
:
helper
=
LayerHelper
(
'left_pool'
,
**
locals
())
dtype
=
helper
.
input_dtype
()
output
=
helper
.
create_variable_for_type_inference
(
dtype
)
max_map
=
helper
.
create_variable_for_type_inference
(
dtype
)
helper
.
append_op
(
type
=
"left_pool"
,
inputs
=
{
"X"
:
input
},
outputs
=
{
"Output"
:
output
,
"MaxMap"
:
max_map
})
return
output
if
use_cpp
:
output
=
cornerpool_op
(
"left_pool"
,
input
,
name
)
return
output
def
cond
(
i
,
output
):
return
i
<
W
def
body
(
i
,
output
):
cur
=
fluid
.
layers
.
slice
(
output
,
[
3
],
[
0
],
[
W
-
i
])
next
=
fluid
.
layers
.
slice
(
output
,
[
3
],
[
i
],
[
W
])
max_v
=
fluid
.
layers
.
elementwise_max
(
cur
,
next
)
orig
=
fluid
.
layers
.
slice
(
output
,
[
3
],
[
W
-
i
],
[
W
])
output
=
fluid
.
layers
.
concat
([
max_v
,
orig
],
axis
=-
1
)
i
=
i
*
2
return
[
i
,
output
]
W
=
fluid
.
layers
.
shape
(
input
)[
3
]
i
=
fluid
.
layers
.
fill_constant
(
shape
=
[
1
],
dtype
=
'int32'
,
value
=
1
)
output
=
input
output
=
fluid
.
layers
.
while_loop
(
cond
,
body
,
[
i
,
output
])
return
output
[
-
1
]
W
=
input
.
shape
[
3
]
i
=
1
...
...
ppdet/modeling/architectures/cornernet_squeeze.py
浏览文件 @
9da6f332
...
...
@@ -22,6 +22,7 @@ from paddle import fluid
from
ppdet.core.workspace
import
register
import
numpy
as
np
from
ppdet.utils.check
import
check_version
__all__
=
[
'CornerNetSqueeze'
]
...
...
@@ -48,6 +49,7 @@ class CornerNetSqueeze(object):
corner_head
=
'CornerHead'
,
num_classes
=
80
,
fpn
=
None
):
check_version
(
'1.8.0'
)
super
(
CornerNetSqueeze
,
self
).
__init__
()
self
.
backbone
=
backbone
self
.
corner_head
=
corner_head
...
...
ppdet/utils/check.py
浏览文件 @
9da6f332
...
...
@@ -45,17 +45,17 @@ def check_gpu(use_gpu):
pass
def
check_version
():
def
check_version
(
version
=
'1.7.0'
):
"""
Log error and exit when the installed version of paddlepaddle is
not satisfied.
"""
err
=
"PaddlePaddle version
1.6
or higher is required, "
\
err
=
"PaddlePaddle version
{}
or higher is required, "
\
"or a suitable develop version is satisfied as well.
\n
"
\
"Please make sure the version is good with your code."
\
"Please make sure the version is good with your code."
.
format
(
version
)
try
:
fluid
.
require_version
(
'1.7.0'
)
fluid
.
require_version
(
version
)
except
Exception
as
e
:
logger
.
error
(
err
)
sys
.
exit
(
1
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录