Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
4465d27a
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
大约 2 年 前同步成功
通知
118
Star
4999
Fork
1114
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
19
列表
看板
标记
里程碑
合并请求
6
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleClas
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
19
Issue
19
列表
看板
标记
里程碑
合并请求
6
合并请求
6
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
4465d27a
编写于
5月 31, 2022
作者:
C
cuicheng01
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update resnet&pp-lcnet
上级
5d9d2395
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
39 addition
and
27 deletion
+39
-27
ppcls/arch/backbone/legendary_models/pp_lcnet.py
ppcls/arch/backbone/legendary_models/pp_lcnet.py
+29
-18
ppcls/arch/backbone/legendary_models/resnet.py
ppcls/arch/backbone/legendary_models/resnet.py
+10
-9
未找到文件。
ppcls/arch/backbone/legendary_models/pp_lcnet.py
浏览文件 @
4465d27a
...
@@ -94,13 +94,16 @@ class ConvBNLayer(TheseusLayer):
...
@@ -94,13 +94,16 @@ class ConvBNLayer(TheseusLayer):
stride
=
stride
,
stride
=
stride
,
padding
=
(
filter_size
-
1
)
//
2
,
padding
=
(
filter_size
-
1
)
//
2
,
groups
=
num_groups
,
groups
=
num_groups
,
weight_attr
=
ParamAttr
(
initializer
=
KaimingNormal
(),
learning_rate
=
lr_mult
),
weight_attr
=
ParamAttr
(
initializer
=
KaimingNormal
(),
learning_rate
=
lr_mult
),
bias_attr
=
False
)
bias_attr
=
False
)
self
.
bn
=
BatchNorm2D
(
self
.
bn
=
BatchNorm2D
(
num_filters
,
num_filters
,
weight_attr
=
ParamAttr
(
regularizer
=
L2Decay
(
0.0
),
learning_rate
=
lr_mult
),
weight_attr
=
ParamAttr
(
bias_attr
=
ParamAttr
(
regularizer
=
L2Decay
(
0.0
),
learning_rate
=
lr_mult
))
regularizer
=
L2Decay
(
0.0
),
learning_rate
=
lr_mult
),
bias_attr
=
ParamAttr
(
regularizer
=
L2Decay
(
0.0
),
learning_rate
=
lr_mult
))
self
.
hardswish
=
nn
.
Hardswish
()
self
.
hardswish
=
nn
.
Hardswish
()
def
forward
(
self
,
x
):
def
forward
(
self
,
x
):
...
@@ -128,8 +131,7 @@ class DepthwiseSeparable(TheseusLayer):
...
@@ -128,8 +131,7 @@ class DepthwiseSeparable(TheseusLayer):
num_groups
=
num_channels
,
num_groups
=
num_channels
,
lr_mult
=
lr_mult
)
lr_mult
=
lr_mult
)
if
use_se
:
if
use_se
:
self
.
se
=
SEModule
(
num_channels
,
self
.
se
=
SEModule
(
num_channels
,
lr_mult
=
lr_mult
)
lr_mult
=
lr_mult
)
self
.
pw_conv
=
ConvBNLayer
(
self
.
pw_conv
=
ConvBNLayer
(
num_channels
=
num_channels
,
num_channels
=
num_channels
,
filter_size
=
1
,
filter_size
=
1
,
...
@@ -216,8 +218,9 @@ class PPLCNet(TheseusLayer):
...
@@ -216,8 +218,9 @@ class PPLCNet(TheseusLayer):
assert
len
(
self
.
stride_list
assert
len
(
self
.
stride_list
)
==
5
,
"stride_list length should be 5 but got {}"
.
format
(
)
==
5
,
"stride_list length should be 5 but got {}"
.
format
(
len
(
self
.
stride_list
))
len
(
self
.
stride_list
))
for
i
,
stride
in
enumerate
(
stride_list
[
1
:]):
for
i
,
stride
in
enumerate
(
stride_list
[
1
:]):
self
.
net_config
[
"blocks{}"
.
format
(
i
+
3
)][
0
][
3
]
=
stride
self
.
net_config
[
"blocks{}"
.
format
(
i
+
3
)][
0
][
3
]
=
stride
self
.
conv1
=
ConvBNLayer
(
self
.
conv1
=
ConvBNLayer
(
num_channels
=
3
,
num_channels
=
3
,
filter_size
=
3
,
filter_size
=
3
,
...
@@ -225,7 +228,7 @@ class PPLCNet(TheseusLayer):
...
@@ -225,7 +228,7 @@ class PPLCNet(TheseusLayer):
stride
=
stride_list
[
0
],
stride
=
stride_list
[
0
],
lr_mult
=
self
.
lr_mult_list
[
0
])
lr_mult
=
self
.
lr_mult_list
[
0
])
self
.
blocks2
=
nn
.
Sequential
(
*
[
self
.
blocks2
=
nn
.
Sequential
(
*
[
DepthwiseSeparable
(
DepthwiseSeparable
(
num_channels
=
make_divisible
(
in_c
*
scale
),
num_channels
=
make_divisible
(
in_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
...
@@ -233,10 +236,11 @@ class PPLCNet(TheseusLayer):
...
@@ -233,10 +236,11 @@ class PPLCNet(TheseusLayer):
stride
=
s
,
stride
=
s
,
use_se
=
se
,
use_se
=
se
,
lr_mult
=
self
.
lr_mult_list
[
1
])
lr_mult
=
self
.
lr_mult_list
[
1
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks2"
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks2"
])
])
])
self
.
blocks3
=
nn
.
Sequential
(
*
[
self
.
blocks3
=
nn
.
Sequential
(
*
[
DepthwiseSeparable
(
DepthwiseSeparable
(
num_channels
=
make_divisible
(
in_c
*
scale
),
num_channels
=
make_divisible
(
in_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
...
@@ -244,10 +248,11 @@ class PPLCNet(TheseusLayer):
...
@@ -244,10 +248,11 @@ class PPLCNet(TheseusLayer):
stride
=
s
,
stride
=
s
,
use_se
=
se
,
use_se
=
se
,
lr_mult
=
self
.
lr_mult_list
[
2
])
lr_mult
=
self
.
lr_mult_list
[
2
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks3"
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks3"
])
])
])
self
.
blocks4
=
nn
.
Sequential
(
*
[
self
.
blocks4
=
nn
.
Sequential
(
*
[
DepthwiseSeparable
(
DepthwiseSeparable
(
num_channels
=
make_divisible
(
in_c
*
scale
),
num_channels
=
make_divisible
(
in_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
...
@@ -255,10 +260,11 @@ class PPLCNet(TheseusLayer):
...
@@ -255,10 +260,11 @@ class PPLCNet(TheseusLayer):
stride
=
s
,
stride
=
s
,
use_se
=
se
,
use_se
=
se
,
lr_mult
=
self
.
lr_mult_list
[
3
])
lr_mult
=
self
.
lr_mult_list
[
3
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks4"
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks4"
])
])
])
self
.
blocks5
=
nn
.
Sequential
(
*
[
self
.
blocks5
=
nn
.
Sequential
(
*
[
DepthwiseSeparable
(
DepthwiseSeparable
(
num_channels
=
make_divisible
(
in_c
*
scale
),
num_channels
=
make_divisible
(
in_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
...
@@ -266,10 +272,11 @@ class PPLCNet(TheseusLayer):
...
@@ -266,10 +272,11 @@ class PPLCNet(TheseusLayer):
stride
=
s
,
stride
=
s
,
use_se
=
se
,
use_se
=
se
,
lr_mult
=
self
.
lr_mult_list
[
4
])
lr_mult
=
self
.
lr_mult_list
[
4
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks5"
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks5"
])
])
])
self
.
blocks6
=
nn
.
Sequential
(
*
[
self
.
blocks6
=
nn
.
Sequential
(
*
[
DepthwiseSeparable
(
DepthwiseSeparable
(
num_channels
=
make_divisible
(
in_c
*
scale
),
num_channels
=
make_divisible
(
in_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
num_filters
=
make_divisible
(
out_c
*
scale
),
...
@@ -277,13 +284,15 @@ class PPLCNet(TheseusLayer):
...
@@ -277,13 +284,15 @@ class PPLCNet(TheseusLayer):
stride
=
s
,
stride
=
s
,
use_se
=
se
,
use_se
=
se
,
lr_mult
=
self
.
lr_mult_list
[
5
])
lr_mult
=
self
.
lr_mult_list
[
5
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks6"
])
for
i
,
(
k
,
in_c
,
out_c
,
s
,
se
)
in
enumerate
(
self
.
net_config
[
"blocks6"
])
])
])
self
.
avg_pool
=
AdaptiveAvgPool2D
(
1
)
self
.
avg_pool
=
AdaptiveAvgPool2D
(
1
)
if
self
.
use_last_conv
:
if
self
.
use_last_conv
:
self
.
last_conv
=
Conv2D
(
self
.
last_conv
=
Conv2D
(
in_channels
=
make_divisible
(
self
.
net_config
[
"blocks6"
][
-
1
][
2
]
*
scale
),
in_channels
=
make_divisible
(
self
.
net_config
[
"blocks6"
][
-
1
][
2
]
*
scale
),
out_channels
=
self
.
class_expand
,
out_channels
=
self
.
class_expand
,
kernel_size
=
1
,
kernel_size
=
1
,
stride
=
1
,
stride
=
1
,
...
@@ -294,7 +303,9 @@ class PPLCNet(TheseusLayer):
...
@@ -294,7 +303,9 @@ class PPLCNet(TheseusLayer):
else
:
else
:
self
.
last_conv
=
None
self
.
last_conv
=
None
self
.
flatten
=
nn
.
Flatten
(
start_axis
=
1
,
stop_axis
=-
1
)
self
.
flatten
=
nn
.
Flatten
(
start_axis
=
1
,
stop_axis
=-
1
)
self
.
fc
=
Linear
(
self
.
class_expand
if
self
.
use_last_conv
else
make_divisible
(
self
.
net_config
[
"blocks6"
][
-
1
][
2
]),
class_num
)
self
.
fc
=
Linear
(
self
.
class_expand
if
self
.
use_last_conv
else
make_divisible
(
self
.
net_config
[
"blocks6"
][
-
1
][
2
]),
class_num
)
super
().
init_res
(
super
().
init_res
(
stages_pattern
,
stages_pattern
,
...
...
ppcls/arch/backbone/legendary_models/resnet.py
浏览文件 @
4465d27a
...
@@ -20,7 +20,7 @@ import numpy as np
...
@@ -20,7 +20,7 @@ import numpy as np
import
paddle
import
paddle
from
paddle
import
ParamAttr
from
paddle
import
ParamAttr
import
paddle.nn
as
nn
import
paddle.nn
as
nn
from
paddle.nn
import
Conv2D
,
BatchNorm
,
Linear
,
BatchNorm2D
from
paddle.nn
import
Conv2D
,
BatchNorm
,
Linear
from
paddle.nn
import
AdaptiveAvgPool2D
,
MaxPool2D
,
AvgPool2D
from
paddle.nn
import
AdaptiveAvgPool2D
,
MaxPool2D
,
AvgPool2D
from
paddle.nn.initializer
import
Uniform
from
paddle.nn.initializer
import
Uniform
from
paddle.regularizer
import
L2Decay
from
paddle.regularizer
import
L2Decay
...
@@ -134,9 +134,6 @@ class ConvBNLayer(TheseusLayer):
...
@@ -134,9 +134,6 @@ class ConvBNLayer(TheseusLayer):
bias_attr
=
False
,
bias_attr
=
False
,
data_format
=
data_format
)
data_format
=
data_format
)
weight_attr
=
ParamAttr
(
learning_rate
=
lr_mult
,
trainable
=
True
)
bias_attr
=
ParamAttr
(
learning_rate
=
lr_mult
,
trainable
=
True
)
self
.
bn
=
BatchNorm
(
self
.
bn
=
BatchNorm
(
num_filters
,
num_filters
,
param_attr
=
ParamAttr
(
learning_rate
=
lr_mult
),
param_attr
=
ParamAttr
(
learning_rate
=
lr_mult
),
...
@@ -324,11 +321,11 @@ class ResNet(TheseusLayer):
...
@@ -324,11 +321,11 @@ class ResNet(TheseusLayer):
self
.
stem_cfg
=
{
self
.
stem_cfg
=
{
#num_channels, num_filters, filter_size, stride
#num_channels, num_filters, filter_size, stride
"vb"
:
[[
input_image_channel
,
64
,
7
,
self
.
stride_list
[
0
]]],
"vb"
:
[[
input_image_channel
,
64
,
7
,
self
.
stride_list
[
0
]]],
"vd"
:
"vd"
:
[[
input_image_channel
,
32
,
3
,
self
.
stride_list
[
0
]],
[[
input_image_channel
,
32
,
3
,
self
.
stride_list
[
0
]],
[
32
,
32
,
3
,
1
],
[
32
,
64
,
3
,
1
]]
[
32
,
32
,
3
,
1
],
[
32
,
64
,
3
,
1
]]
}
}
self
.
stem
=
nn
.
Sequential
(
*
[
self
.
stem
=
nn
.
Sequential
(
*
[
ConvBNLayer
(
ConvBNLayer
(
num_channels
=
in_c
,
num_channels
=
in_c
,
num_filters
=
out_c
,
num_filters
=
out_c
,
...
@@ -341,7 +338,10 @@ class ResNet(TheseusLayer):
...
@@ -341,7 +338,10 @@ class ResNet(TheseusLayer):
])
])
self
.
max_pool
=
MaxPool2D
(
self
.
max_pool
=
MaxPool2D
(
kernel_size
=
3
,
stride
=
stride_list
[
1
],
padding
=
1
,
data_format
=
data_format
)
kernel_size
=
3
,
stride
=
stride_list
[
1
],
padding
=
1
,
data_format
=
data_format
)
block_list
=
[]
block_list
=
[]
for
block_idx
in
range
(
len
(
self
.
block_depth
)):
for
block_idx
in
range
(
len
(
self
.
block_depth
)):
shortcut
=
False
shortcut
=
False
...
@@ -350,7 +350,8 @@ class ResNet(TheseusLayer):
...
@@ -350,7 +350,8 @@ class ResNet(TheseusLayer):
num_channels
=
self
.
num_channels
[
block_idx
]
if
i
==
0
else
num_channels
=
self
.
num_channels
[
block_idx
]
if
i
==
0
else
self
.
num_filters
[
block_idx
]
*
self
.
channels_mult
,
self
.
num_filters
[
block_idx
]
*
self
.
channels_mult
,
num_filters
=
self
.
num_filters
[
block_idx
],
num_filters
=
self
.
num_filters
[
block_idx
],
stride
=
self
.
stride_list
[
block_idx
+
1
]
if
i
==
0
and
block_idx
!=
0
else
1
,
stride
=
self
.
stride_list
[
block_idx
+
1
]
if
i
==
0
and
block_idx
!=
0
else
1
,
shortcut
=
shortcut
,
shortcut
=
shortcut
,
if_first
=
block_idx
==
i
==
0
if
version
==
"vd"
else
True
,
if_first
=
block_idx
==
i
==
0
if
version
==
"vd"
else
True
,
lr_mult
=
self
.
lr_mult_list
[
block_idx
+
1
],
lr_mult
=
self
.
lr_mult_list
[
block_idx
+
1
],
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录