Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
a4ee2f2c
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
1 年多 前同步成功
通知
116
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看板
提交
a4ee2f2c
编写于
6月 29, 2020
作者:
W
wqz960
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix format
上级
f85ced36
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
304 addition
and
621 deletion
+304
-621
ppcls/modeling/architectures/alexnet.py
ppcls/modeling/architectures/alexnet.py
+86
-343
ppcls/modeling/architectures/darknet.py
ppcls/modeling/architectures/darknet.py
+27
-34
ppcls/modeling/architectures/efficientnet.py
ppcls/modeling/architectures/efficientnet.py
+43
-34
ppcls/modeling/architectures/googlenet.py
ppcls/modeling/architectures/googlenet.py
+5
-12
ppcls/modeling/architectures/inception_v4.py
ppcls/modeling/architectures/inception_v4.py
+6
-13
ppcls/modeling/architectures/resnext101_wsl.py
ppcls/modeling/architectures/resnext101_wsl.py
+46
-56
ppcls/modeling/architectures/squeezenet.py
ppcls/modeling/architectures/squeezenet.py
+4
-14
ppcls/modeling/architectures/vgg.py
ppcls/modeling/architectures/vgg.py
+20
-31
ppcls/modeling/architectures/xception.py
ppcls/modeling/architectures/xception.py
+58
-66
ppcls/modeling/architectures/xception_deeplab.py
ppcls/modeling/architectures/xception_deeplab.py
+9
-18
未找到文件。
ppcls/modeling/architectures/alexnet.py
浏览文件 @
a4ee2f2c
import
numpy
as
np
import
argparse
import
paddle
import
paddle.fluid
as
fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
,
Dropout
import
math
import
sys
import
time
__all__
=
[
'Xception41'
,
'Xception65'
,
'Xception71'
]
class
ConvBNLayer
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
num_channels
,
num_filters
,
filter_size
,
stride
=
1
,
groups
=
1
,
act
=
None
,
name
=
None
):
super
(
ConvBNLayer
,
self
).
__init__
()
self
.
_conv
=
Conv2D
(
num_channels
=
num_channels
,
num_filters
=
num_filters
,
filter_size
=
filter_size
,
stride
=
stride
,
padding
=
(
filter_size
-
1
)
//
2
,
groups
=
groups
,
act
=
None
,
param_attr
=
ParamAttr
(
name
=
name
+
"_weights"
),
bias_attr
=
False
)
bn_name
=
"bn_"
+
name
self
.
_batch_norm
=
BatchNorm
(
num_filters
,
act
=
act
,
param_attr
=
ParamAttr
(
name
=
bn_name
+
"_scale"
),
bias_attr
=
ParamAttr
(
name
=
bn_name
+
"_offset"
),
moving_mean_name
=
bn_name
+
'_mean'
,
moving_variance_name
=
bn_name
+
'_variance'
)
__all__
=
[
"AlexNet"
]
class
ConvPoolLayer
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
inputc_channels
,
output_channels
,
filter_size
,
stride
,
padding
,
stdv
,
groups
=
1
,
act
=
None
,
name
=
None
):
super
(
ConvPoolLayer
,
self
).
__init__
()
self
.
_conv
=
Conv2D
(
num_channels
=
inputc_channels
,
num_filters
=
output_channels
,
filter_size
=
filter_size
,
stride
=
stride
,
padding
=
padding
,
groups
=
groups
,
param_attr
=
ParamAttr
(
name
=
name
+
"_weights"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
bias_attr
=
ParamAttr
(
name
=
name
+
"_offset"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
act
=
act
)
self
.
_pool
=
Pool2D
(
pool_size
=
3
,
pool_stride
=
2
,
pool_padding
=
0
,
pool_type
=
"max"
)
def
forward
(
self
,
inputs
):
y
=
self
.
_conv
(
inputs
)
y
=
self
.
_batch_norm
(
y
)
return
y
class
Separable_Conv
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
stride
=
1
,
name
=
None
):
super
(
Separable_Conv
,
self
).
__init__
()
self
.
_pointwise_conv
=
ConvBNLayer
(
input_channels
,
output_channels
,
1
,
name
=
name
+
"_sep"
)
self
.
_depthwise_conv
=
ConvBNLayer
(
output_channels
,
output_channels
,
3
,
stride
=
stride
,
groups
=
output_channels
,
name
=
name
+
"_dw"
)
def
forward
(
self
,
inputs
):
x
=
self
.
_pointwise_conv
(
inputs
)
x
=
self
.
_depthwise_conv
(
x
)
x
=
self
.
_conv
(
inputs
)
x
=
self
.
_pool
(
x
)
return
x
class
Entry_Flow_Bottleneck_Block
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
stride
=
2
,
name
=
None
,
relu_first
=
False
):
super
(
Entry_Flow_Bottleneck_Block
,
self
).
__init__
()
self
.
relu_first
=
relu_first
self
.
_short
=
Conv2D
(
num_channels
=
input_channels
,
num_filters
=
output_channels
,
filter_size
=
1
,
stride
=
stride
,
padding
=
0
,
act
=
None
,
param_attr
=
ParamAttr
(
name
+
"_branch1_weights"
),
bias_attr
=
False
)
self
.
_conv1
=
Separable_Conv
(
input_channels
,
output_channels
,
stride
=
1
,
name
=
name
+
"_branch2a_weights"
)
self
.
_conv2
=
Separable_Conv
(
output_channels
,
output_channels
,
stride
=
1
,
name
=
name
+
"_branch2b_weights"
)
self
.
_pool
=
Pool2D
(
pool_size
=
3
,
pool_stride
=
stride
,
pool_padding
=
1
,
pool_type
=
"max"
)
def
forward
(
self
,
inputs
):
conv0
=
inputs
short
=
self
.
_short
(
inputs
)
layer_helper
=
LayerHelper
(
self
.
full_name
(),
act
=
"relu"
)
if
self
.
relu_first
:
conv0
=
layer_helper
.
append_activation
(
conv0
)
conv1
=
self
.
_conv1
(
conv0
)
conv2
=
layer_helper
.
append_activation
(
conv1
)
conv2
=
self
.
_conv2
(
conv2
)
pool
=
self
.
_pool
(
conv2
)
return
fluid
.
layers
.
elementwise_add
(
x
=
short
,
y
=
pool
)
class
Entry_Flow
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
block_num
=
3
):
super
(
Entry_Flow
,
self
).
__init__
()
name
=
"entry_flow"
self
.
block_num
=
block_num
self
.
_conv1
=
ConvBNLayer
(
3
,
32
,
3
,
stride
=
2
,
act
=
"relu"
,
name
=
name
+
"_conv1"
)
self
.
_conv2
=
ConvBNLayer
(
32
,
64
,
3
,
act
=
"relu"
,
name
=
name
+
"_conv2"
)
if
block_num
==
3
:
self
.
_conv_0
=
Entry_Flow_Bottleneck_Block
(
64
,
128
,
stride
=
2
,
name
=
name
+
"_0"
,
relu_first
=
False
)
self
.
_conv_1
=
Entry_Flow_Bottleneck_Block
(
128
,
256
,
stride
=
2
,
name
=
name
+
"_1"
,
relu_first
=
True
)
self
.
_conv_2
=
Entry_Flow_Bottleneck_Block
(
256
,
728
,
stride
=
2
,
name
=
name
+
"_2"
,
relu_first
=
True
)
elif
block_num
==
5
:
self
.
_conv_0
=
Entry_Flow_Bottleneck_Block
(
64
,
128
,
stride
=
2
,
name
=
name
+
"_0"
,
relu_first
=
False
)
self
.
_conv_1
=
Entry_Flow_Bottleneck_Block
(
128
,
256
,
stride
=
1
,
name
=
name
+
"_1"
,
relu_first
=
True
)
self
.
_conv_2
=
Entry_Flow_Bottleneck_Block
(
256
,
256
,
stride
=
2
,
name
=
name
+
"_2"
,
relu_first
=
True
)
self
.
_conv_3
=
Entry_Flow_Bottleneck_Block
(
256
,
728
,
stride
=
1
,
name
=
name
+
"_3"
,
relu_first
=
True
)
self
.
_conv_4
=
Entry_Flow_Bottleneck_Block
(
728
,
728
,
stride
=
2
,
name
=
name
+
"_4"
,
relu_first
=
True
)
else
:
sys
.
exit
(
-
1
)
class
AlexNetDY
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
class_dim
=
1000
):
super
(
AlexNetDY
,
self
).
__init__
()
stdv
=
1.0
/
math
.
sqrt
(
3
*
11
*
11
)
self
.
_conv1
=
ConvPoolLayer
(
3
,
64
,
11
,
4
,
2
,
stdv
,
act
=
"relu"
,
name
=
"conv1"
)
stdv
=
1.0
/
math
.
sqrt
(
64
*
5
*
5
)
self
.
_conv2
=
ConvPoolLayer
(
64
,
192
,
5
,
1
,
2
,
stdv
,
act
=
"relu"
,
name
=
"conv2"
)
stdv
=
1.0
/
math
.
sqrt
(
192
*
3
*
3
)
self
.
_conv3
=
Conv2D
(
192
,
384
,
3
,
stride
=
1
,
padding
=
1
,
param_attr
=
ParamAttr
(
name
=
"conv3_weights"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
bias_attr
=
ParamAttr
(
name
=
"conv3_offset"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
act
=
"relu"
)
stdv
=
1.0
/
math
.
sqrt
(
384
*
3
*
3
)
self
.
_conv4
=
Conv2D
(
384
,
256
,
3
,
stride
=
1
,
padding
=
1
,
param_attr
=
ParamAttr
(
name
=
"conv4_weights"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
bias_attr
=
ParamAttr
(
name
=
"conv4_offset"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
act
=
"relu"
)
stdv
=
1.0
/
math
.
sqrt
(
256
*
3
*
3
)
self
.
_conv5
=
ConvPoolLayer
(
256
,
256
,
3
,
1
,
1
,
stdv
,
act
=
"relu"
,
name
=
"conv5"
)
stdv
=
1.0
/
math
.
sqrt
(
256
*
6
*
6
)
self
.
_drop1
=
Dropout
(
p
=
0.5
)
self
.
_fc6
=
Linear
(
input_dim
=
256
*
6
*
6
,
output_dim
=
4096
,
param_attr
=
ParamAttr
(
name
=
"fc6_weights"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
bias_attr
=
ParamAttr
(
name
=
"fc6_offset"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
act
=
"relu"
)
self
.
_drop2
=
Dropout
(
p
=
0.5
)
self
.
_fc7
=
Linear
(
input_dim
=
4096
,
output_dim
=
4096
,
param_attr
=
ParamAttr
(
name
=
"fc7_weights"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
bias_attr
=
ParamAttr
(
name
=
"fc7_offset"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
act
=
"relu"
)
self
.
_fc8
=
Linear
(
input_dim
=
4096
,
output_dim
=
class_dim
,
param_attr
=
ParamAttr
(
name
=
"fc8_weights"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
bias_attr
=
ParamAttr
(
name
=
"fc8_offset"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)))
def
forward
(
self
,
inputs
):
x
=
self
.
_conv1
(
inputs
)
x
=
self
.
_conv2
(
x
)
if
self
.
block_num
==
3
:
x
=
self
.
_conv_0
(
x
)
x
=
self
.
_conv_1
(
x
)
x
=
self
.
_conv_2
(
x
)
elif
self
.
block_num
==
5
:
x
=
self
.
_conv_0
(
x
)
x
=
self
.
_conv_1
(
x
)
x
=
self
.
_conv_2
(
x
)
x
=
self
.
_conv_3
(
x
)
x
=
self
.
_conv_4
(
x
)
x
=
self
.
_conv3
(
x
)
x
=
self
.
_conv4
(
x
)
x
=
self
.
_conv5
(
x
)
x
=
fluid
.
layers
.
flatten
(
x
,
axis
=
0
)
x
=
self
.
_drop1
(
x
)
x
=
self
.
_fc6
(
x
)
x
=
self
.
_drop2
(
x
)
x
=
self
.
_fc7
(
x
)
x
=
self
.
_fc8
(
x
)
return
x
class
Middle_Flow_Bottleneck_Block
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
name
):
super
(
Middle_Flow_Bottleneck_Block
,
self
).
__init__
()
self
.
_conv_0
=
Separable_Conv
(
input_channels
,
output_channels
,
stride
=
1
,
name
=
name
+
"_branch2a_weights"
)
self
.
_conv_1
=
Separable_Conv
(
output_channels
,
output_channels
,
stride
=
1
,
name
=
name
+
"_branch2b_weights"
)
self
.
_conv_2
=
Separable_Conv
(
output_channels
,
output_channels
,
stride
=
1
,
name
=
name
+
"_branch2c_weights"
)
def
forward
(
self
,
inputs
):
layer_helper
=
LayerHelper
(
self
.
full_name
(),
act
=
"relu"
)
conv0
=
layer_helper
.
append_activation
(
inputs
)
conv0
=
self
.
_conv_0
(
conv0
)
conv1
=
layer_helper
.
append_activation
(
conv0
)
conv1
=
self
.
_conv_1
(
conv1
)
conv2
=
layer_helper
.
append_activation
(
conv1
)
conv2
=
self
.
_conv_2
(
conv2
)
return
fluid
.
layers
.
elementwise_add
(
x
=
inputs
,
y
=
conv2
)
class
Middle_Flow
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
block_num
=
8
):
super
(
Middle_Flow
,
self
).
__init__
()
self
.
block_num
=
block_num
self
.
_conv_0
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_0"
)
self
.
_conv_1
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_1"
)
self
.
_conv_2
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_2"
)
self
.
_conv_3
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_3"
)
self
.
_conv_4
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_4"
)
self
.
_conv_5
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_5"
)
self
.
_conv_6
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_6"
)
self
.
_conv_7
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_7"
)
if
block_num
==
16
:
self
.
_conv_8
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_8"
)
self
.
_conv_9
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_9"
)
self
.
_conv_10
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_10"
)
self
.
_conv_11
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_11"
)
self
.
_conv_12
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_12"
)
self
.
_conv_13
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_13"
)
self
.
_conv_14
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_14"
)
self
.
_conv_15
=
Middle_Flow_Bottleneck_Block
(
728
,
728
,
name
=
"middle_flow_15"
)
def
forward
(
self
,
inputs
):
x
=
self
.
_conv_0
(
inputs
)
x
=
self
.
_conv_1
(
x
)
x
=
self
.
_conv_2
(
x
)
x
=
self
.
_conv_3
(
x
)
x
=
self
.
_conv_4
(
x
)
x
=
self
.
_conv_5
(
x
)
x
=
self
.
_conv_6
(
x
)
x
=
self
.
_conv_7
(
x
)
if
self
.
block_num
==
16
:
x
=
self
.
_conv_8
(
x
)
x
=
self
.
_conv_9
(
x
)
x
=
self
.
_conv_10
(
x
)
x
=
self
.
_conv_11
(
x
)
x
=
self
.
_conv_12
(
x
)
x
=
self
.
_conv_13
(
x
)
x
=
self
.
_conv_14
(
x
)
x
=
self
.
_conv_15
(
x
)
return
x
class
Exit_Flow_Bottleneck_Block
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels1
,
output_channels2
,
name
):
super
(
Exit_Flow_Bottleneck_Block
,
self
).
__init__
()
self
.
_short
=
Conv2D
(
num_channels
=
input_channels
,
num_filters
=
output_channels2
,
filter_size
=
1
,
stride
=
2
,
padding
=
0
,
act
=
None
,
param_attr
=
ParamAttr
(
name
+
"_branch1_weights"
),
bias_attr
=
False
)
self
.
_conv_1
=
Separable_Conv
(
input_channels
,
output_channels1
,
stride
=
1
,
name
=
name
+
"_branch2a_weights"
)
self
.
_conv_2
=
Separable_Conv
(
output_channels1
,
output_channels2
,
stride
=
1
,
name
=
name
+
"_branch2b_weights"
)
self
.
_pool
=
Pool2D
(
pool_size
=
3
,
pool_stride
=
2
,
pool_padding
=
1
,
pool_type
=
"max"
)
def
forward
(
self
,
inputs
):
short
=
self
.
_short
(
inputs
)
layer_helper
=
LayerHelper
(
self
.
full_name
(),
act
=
"relu"
)
conv0
=
layer_helper
.
append_activation
(
inputs
)
conv1
=
self
.
_conv_1
(
conv0
)
conv2
=
layer_helper
.
append_activation
(
conv1
)
conv2
=
self
.
_conv_2
(
conv2
)
pool
=
self
.
_pool
(
conv2
)
return
fluid
.
layers
.
elementwise_add
(
x
=
short
,
y
=
pool
)
class
Exit_Flow
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
class_dim
):
super
(
Exit_Flow
,
self
).
__init__
()
name
=
"exit_flow"
self
.
_conv_0
=
Exit_Flow_Bottleneck_Block
(
728
,
728
,
1024
,
name
=
name
+
"_1"
)
self
.
_conv_1
=
Separable_Conv
(
1024
,
1536
,
stride
=
1
,
name
=
name
+
"_2"
)
self
.
_conv_2
=
Separable_Conv
(
1536
,
2048
,
stride
=
1
,
name
=
name
+
"_3"
)
self
.
_pool
=
Pool2D
(
pool_type
=
"avg"
,
global_pooling
=
True
)
stdv
=
1.0
/
math
.
sqrt
(
2048
*
1.0
)
self
.
_out
=
Linear
(
2048
,
class_dim
,
param_attr
=
ParamAttr
(
name
=
"fc_weights"
,
initializer
=
fluid
.
initializer
.
Uniform
(
-
stdv
,
stdv
)),
bias_attr
=
ParamAttr
(
name
=
"fc_offset"
))
def
forward
(
self
,
inputs
):
layer_helper
=
LayerHelper
(
self
.
full_name
(),
act
=
"relu"
)
conv0
=
self
.
_conv_0
(
inputs
)
conv1
=
self
.
_conv_1
(
conv0
)
conv1
=
layer_helper
.
append_activation
(
conv1
)
conv2
=
self
.
_conv_2
(
conv1
)
conv2
=
layer_helper
.
append_activation
(
conv2
)
pool
=
self
.
_pool
(
conv2
)
pool
=
fluid
.
layers
.
reshape
(
pool
,
[
0
,
-
1
])
out
=
self
.
_out
(
pool
)
return
out
class
Xception
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
entry_flow_block_num
=
3
,
middle_flow_block_num
=
8
,
class_dim
=
1000
):
super
(
Xception
,
self
).
__init__
()
self
.
entry_flow_block_num
=
entry_flow_block_num
self
.
middle_flow_block_num
=
middle_flow_block_num
self
.
_entry_flow
=
Entry_Flow
(
entry_flow_block_num
)
self
.
_middle_flow
=
Middle_Flow
(
middle_flow_block_num
)
self
.
_exit_flow
=
Exit_Flow
(
class_dim
)
def
forward
(
self
,
inputs
):
x
=
self
.
_entry_flow
(
inputs
)
x
=
self
.
_middle_flow
(
x
)
x
=
self
.
_exit_flow
(
x
)
return
x
def
Xception41
():
model
=
Xception
(
entry_flow_block_num
=
3
,
middle_flow_block_num
=
8
)
return
model
def
Xception65
():
model
=
Xception
(
entry_flow_block_num
=
3
,
middle_flow_block_num
=
16
)
return
model
def
Xception71
():
model
=
Xception
(
entry_flow_block_num
=
5
,
middle_flow_block_num
=
16
)
def
AlexNet
(
**
args
):
model
=
AlexNetDY
(
**
args
)
return
model
ppcls/modeling/architectures/darknet.py
浏览文件 @
a4ee2f2c
import
numpy
as
np
import
argparse
import
paddle
import
paddle.fluid
as
fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
import
math
__all__
=
[
"DarkNet53"
]
...
...
@@ -49,9 +42,9 @@ class ConvBNLayer(fluid.dygraph.Layer):
return
x
class
Basic
_
Block
(
fluid
.
dygraph
.
Layer
):
class
BasicBlock
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
name
=
None
):
super
(
Basic
_
Block
,
self
).
__init__
()
super
(
BasicBlock
,
self
).
__init__
()
self
.
_conv1
=
ConvBNLayer
(
input_channels
,
output_channels
,
1
,
1
,
0
,
name
=
name
+
".0"
)
...
...
@@ -66,48 +59,48 @@ class Basic_Block(fluid.dygraph.Layer):
class
DarkNet
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
class_dim
=
1000
):
super
(
DarkNet
53
,
self
).
__init__
()
super
(
DarkNet
,
self
).
__init__
()
self
.
stages
=
[
1
,
2
,
8
,
8
,
4
]
self
.
_conv1
=
ConvBNLayer
(
3
,
32
,
3
,
1
,
1
,
name
=
"yolo_input"
)
self
.
_conv2
=
ConvBNLayer
(
32
,
64
,
3
,
2
,
1
,
name
=
"yolo_input.downsample"
)
self
.
_basic_block_01
=
Basic
_
Block
(
64
,
32
,
name
=
"stage.0.0"
)
self
.
_basic_block_01
=
BasicBlock
(
64
,
32
,
name
=
"stage.0.0"
)
self
.
_downsample_0
=
ConvBNLayer
(
64
,
128
,
3
,
2
,
1
,
name
=
"stage.0.downsample"
)
self
.
_basic_block_11
=
Basic
_
Block
(
128
,
64
,
name
=
"stage.1.0"
)
self
.
_basic_block_12
=
Basic
_
Block
(
128
,
64
,
name
=
"stage.1.1"
)
self
.
_basic_block_11
=
BasicBlock
(
128
,
64
,
name
=
"stage.1.0"
)
self
.
_basic_block_12
=
BasicBlock
(
128
,
64
,
name
=
"stage.1.1"
)
self
.
_downsample_1
=
ConvBNLayer
(
128
,
256
,
3
,
2
,
1
,
name
=
"stage.1.downsample"
)
self
.
_basic_block_21
=
Basic
_
Block
(
256
,
128
,
name
=
"stage.2.0"
)
self
.
_basic_block_22
=
Basic
_
Block
(
256
,
128
,
name
=
"stage.2.1"
)
self
.
_basic_block_23
=
Basic
_
Block
(
256
,
128
,
name
=
"stage.2.2"
)
self
.
_basic_block_24
=
Basic
_
Block
(
256
,
128
,
name
=
"stage.2.3"
)
self
.
_basic_block_25
=
Basic
_
Block
(
256
,
128
,
name
=
"stage.2.4"
)
self
.
_basic_block_26
=
Basic
_
Block
(
256
,
128
,
name
=
"stage.2.5"
)
self
.
_basic_block_27
=
Basic
_
Block
(
256
,
128
,
name
=
"stage.2.6"
)
self
.
_basic_block_28
=
Basic
_
Block
(
256
,
128
,
name
=
"stage.2.7"
)
self
.
_basic_block_21
=
BasicBlock
(
256
,
128
,
name
=
"stage.2.0"
)
self
.
_basic_block_22
=
BasicBlock
(
256
,
128
,
name
=
"stage.2.1"
)
self
.
_basic_block_23
=
BasicBlock
(
256
,
128
,
name
=
"stage.2.2"
)
self
.
_basic_block_24
=
BasicBlock
(
256
,
128
,
name
=
"stage.2.3"
)
self
.
_basic_block_25
=
BasicBlock
(
256
,
128
,
name
=
"stage.2.4"
)
self
.
_basic_block_26
=
BasicBlock
(
256
,
128
,
name
=
"stage.2.5"
)
self
.
_basic_block_27
=
BasicBlock
(
256
,
128
,
name
=
"stage.2.6"
)
self
.
_basic_block_28
=
BasicBlock
(
256
,
128
,
name
=
"stage.2.7"
)
self
.
_downsample_2
=
ConvBNLayer
(
256
,
512
,
3
,
2
,
1
,
name
=
"stage.2.downsample"
)
self
.
_basic_block_31
=
Basic
_
Block
(
512
,
256
,
name
=
"stage.3.0"
)
self
.
_basic_block_32
=
Basic
_
Block
(
512
,
256
,
name
=
"stage.3.1"
)
self
.
_basic_block_33
=
Basic
_
Block
(
512
,
256
,
name
=
"stage.3.2"
)
self
.
_basic_block_34
=
Basic
_
Block
(
512
,
256
,
name
=
"stage.3.3"
)
self
.
_basic_block_35
=
Basic
_
Block
(
512
,
256
,
name
=
"stage.3.4"
)
self
.
_basic_block_36
=
Basic
_
Block
(
512
,
256
,
name
=
"stage.3.5"
)
self
.
_basic_block_37
=
Basic
_
Block
(
512
,
256
,
name
=
"stage.3.6"
)
self
.
_basic_block_38
=
Basic
_
Block
(
512
,
256
,
name
=
"stage.3.7"
)
self
.
_basic_block_31
=
BasicBlock
(
512
,
256
,
name
=
"stage.3.0"
)
self
.
_basic_block_32
=
BasicBlock
(
512
,
256
,
name
=
"stage.3.1"
)
self
.
_basic_block_33
=
BasicBlock
(
512
,
256
,
name
=
"stage.3.2"
)
self
.
_basic_block_34
=
BasicBlock
(
512
,
256
,
name
=
"stage.3.3"
)
self
.
_basic_block_35
=
BasicBlock
(
512
,
256
,
name
=
"stage.3.4"
)
self
.
_basic_block_36
=
BasicBlock
(
512
,
256
,
name
=
"stage.3.5"
)
self
.
_basic_block_37
=
BasicBlock
(
512
,
256
,
name
=
"stage.3.6"
)
self
.
_basic_block_38
=
BasicBlock
(
512
,
256
,
name
=
"stage.3.7"
)
self
.
_downsample_3
=
ConvBNLayer
(
512
,
1024
,
3
,
2
,
1
,
name
=
"stage.3.downsample"
)
self
.
_basic_block_41
=
Basic
_
Block
(
1024
,
512
,
name
=
"stage.4.0"
)
self
.
_basic_block_42
=
Basic
_
Block
(
1024
,
512
,
name
=
"stage.4.1"
)
self
.
_basic_block_43
=
Basic
_
Block
(
1024
,
512
,
name
=
"stage.4.2"
)
self
.
_basic_block_44
=
Basic
_
Block
(
1024
,
512
,
name
=
"stage.4.3"
)
self
.
_basic_block_41
=
BasicBlock
(
1024
,
512
,
name
=
"stage.4.0"
)
self
.
_basic_block_42
=
BasicBlock
(
1024
,
512
,
name
=
"stage.4.1"
)
self
.
_basic_block_43
=
BasicBlock
(
1024
,
512
,
name
=
"stage.4.2"
)
self
.
_basic_block_44
=
BasicBlock
(
1024
,
512
,
name
=
"stage.4.3"
)
self
.
_pool
=
Pool2D
(
pool_type
=
"avg"
,
global_pooling
=
True
)
...
...
@@ -164,4 +157,4 @@ class DarkNet(fluid.dygraph.Layer):
def
DarkNet53
(
**
args
):
model
=
DarkNet
(
**
args
)
return
model
return
model
\ No newline at end of file
ppcls/modeling/architectures/efficientnet.py
浏览文件 @
a4ee2f2c
# coding:utf-8
import
numpy
as
np
import
argparse
import
paddle
import
paddle.fluid
as
fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
,
Dropout
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
import
math
import
collections
import
re
...
...
@@ -410,7 +403,7 @@ class ExpandConvNorm(fluid.dygraph.Layer):
return
inputs
class
Depthwise
_Conv_
Norm
(
fluid
.
dygraph
.
Layer
):
class
Depthwise
Conv
Norm
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
block_args
,
...
...
@@ -418,7 +411,7 @@ class Depthwise_Conv_Norm(fluid.dygraph.Layer):
name
=
None
,
model_name
=
None
,
cur_stage
=
None
):
super
(
Depthwise
_Conv_
Norm
,
self
).
__init__
()
super
(
Depthwise
Conv
Norm
,
self
).
__init__
()
self
.
k
=
block_args
.
kernel_size
self
.
s
=
block_args
.
stride
...
...
@@ -444,7 +437,7 @@ class Depthwise_Conv_Norm(fluid.dygraph.Layer):
return
self
.
_conv
(
inputs
)
class
Project
_Conv_
Norm
(
fluid
.
dygraph
.
Layer
):
class
Project
Conv
Norm
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
block_args
,
...
...
@@ -452,7 +445,7 @@ class Project_Conv_Norm(fluid.dygraph.Layer):
name
=
None
,
model_name
=
None
,
cur_stage
=
None
):
super
(
Project
_Conv_
Norm
,
self
).
__init__
()
super
(
Project
Conv
Norm
,
self
).
__init__
()
final_oup
=
block_args
.
output_filters
...
...
@@ -542,7 +535,7 @@ class MbConvBlock(fluid.dygraph.Layer):
model_name
=
model_name
,
cur_stage
=
cur_stage
)
self
.
_dcn
=
Depthwise
_Conv_
Norm
(
self
.
_dcn
=
Depthwise
Conv
Norm
(
input_channels
*
block_args
.
expand_ratio
,
block_args
,
padding_type
=
padding_type
,
...
...
@@ -562,7 +555,7 @@ class MbConvBlock(fluid.dygraph.Layer):
model_name
=
model_name
,
cur_stage
=
cur_stage
)
self
.
_pcn
=
Project
_Conv_
Norm
(
self
.
_pcn
=
Project
Conv
Norm
(
input_channels
*
block_args
.
expand_ratio
,
block_args
,
padding_type
=
padding_type
,
...
...
@@ -792,117 +785,133 @@ class EfficientNet(fluid.dygraph.Layer):
def
EfficientNetB0_small
(
is_test
=
True
,
padding_type
=
'DYNAMIC'
,
override_params
=
None
,
use_se
=
False
):
use_se
=
False
,
**
args
):
model
=
EfficientNet
(
name
=
'b0'
,
is_test
=
is_test
,
padding_type
=
padding_type
,
override_params
=
override_params
,
use_se
=
use_se
)
use_se
=
use_se
,
**
args
)
return
model
def
EfficientNetB0
(
is_test
=
False
,
padding_type
=
'SAME'
,
override_params
=
None
,
use_se
=
True
):
use_se
=
True
,
**
args
):
model
=
EfficientNet
(
name
=
'b0'
,
is_test
=
is_test
,
padding_type
=
padding_type
,
override_params
=
override_params
,
use_se
=
use_se
)
use_se
=
use_se
,
**
args
)
return
model
def
EfficientNetB1
(
is_test
=
False
,
padding_type
=
'SAME'
,
override_params
=
None
,
use_se
=
True
):
use_se
=
True
,
**
args
):
model
=
EfficientNet
(
name
=
'b1'
,
is_test
=
is_test
,
padding_type
=
padding_type
,
override_params
=
override_params
,
use_se
=
use_se
)
use_se
=
use_se
,
**
args
)
return
model
def
EfficientNetB2
(
is_test
=
False
,
padding_type
=
'SAME'
,
override_params
=
None
,
use_se
=
True
):
use_se
=
True
,
**
args
):
model
=
EfficientNet
(
name
=
'b2'
,
is_test
=
is_test
,
padding_type
=
padding_type
,
override_params
=
override_params
,
use_se
=
use_se
)
use_se
=
use_se
,
**
args
)
return
model
def
EfficientNetB3
(
is_test
=
False
,
padding_type
=
'SAME'
,
override_params
=
None
,
use_se
=
True
):
use_se
=
True
,
**
args
):
model
=
EfficientNet
(
name
=
'b3'
,
is_test
=
is_test
,
padding_type
=
padding_type
,
override_params
=
override_params
,
use_se
=
use_se
)
use_se
=
use_se
,
**
args
)
return
model
def
EfficientNetB4
(
is_test
=
False
,
padding_type
=
'SAME'
,
override_params
=
None
,
use_se
=
True
):
use_se
=
True
,
**
args
):
model
=
EfficientNet
(
name
=
'b4'
,
is_test
=
is_test
,
padding_type
=
padding_type
,
override_params
=
override_params
,
use_se
=
use_se
)
use_se
=
use_se
,
**
args
)
return
model
def
EfficientNetB5
(
is_test
=
False
,
padding_type
=
'SAME'
,
override_params
=
None
,
use_se
=
True
):
use_se
=
True
,
**
args
):
model
=
EfficientNet
(
name
=
'b5'
,
is_test
=
is_test
,
padding_type
=
padding_type
,
override_params
=
override_params
,
use_se
=
use_se
)
use_se
=
use_se
,
**
args
)
return
model
def
EfficientNetB6
(
is_test
=
False
,
padding_type
=
'SAME'
,
override_params
=
None
,
use_se
=
True
):
use_se
=
True
,
**
args
):
model
=
EfficientNet
(
name
=
'b6'
,
is_test
=
is_test
,
padding_type
=
padding_type
,
override_params
=
override_params
,
use_se
=
use_se
)
use_se
=
use_se
,
**
args
)
return
model
def
EfficientNetB7
(
is_test
=
False
,
padding_type
=
'SAME'
,
override_params
=
None
,
use_se
=
True
):
use_se
=
True
,
**
args
):
model
=
EfficientNet
(
name
=
'b7'
,
is_test
=
is_test
,
padding_type
=
padding_type
,
override_params
=
override_params
,
use_se
=
use_se
)
return
model
\ No newline at end of file
use_se
=
use_se
,
**
args
)
return
model
\ No newline at end of file
ppcls/modeling/architectures/googlenet.py
浏览文件 @
a4ee2f2c
...
...
@@ -3,17 +3,10 @@ import paddle.fluid as fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
import
math
import
sys
import
time
__all__
=
[
'GoogLeNet_DY'
]
def
xavier
(
channels
,
filter_size
,
name
):
stdv
=
(
3.0
/
(
filter_size
**
2
*
channels
))
**
0.5
param_attr
=
ParamAttr
(
...
...
@@ -101,9 +94,9 @@ class Inception(fluid.dygraph.Layer):
return
layer_helper
.
append_activation
(
cat
)
class
GoogleNet
_
DY
(
fluid
.
dygraph
.
Layer
):
class
GoogleNetDY
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
class_dim
=
1000
):
super
(
GoogleNet
_
DY
,
self
).
__init__
()
super
(
GoogleNetDY
,
self
).
__init__
()
self
.
_conv
=
ConvLayer
(
3
,
64
,
7
,
2
,
name
=
"conv1"
)
self
.
_pool
=
Pool2D
(
pool_size
=
3
,
pool_type
=
"max"
,
pool_stride
=
2
)
self
.
_conv_1
=
ConvLayer
(
64
,
64
,
1
,
name
=
"conv2_1x1"
)
...
...
@@ -210,6 +203,6 @@ class GoogleNet_DY(fluid.dygraph.Layer):
return
[
out
,
out1
,
out2
]
def
GoogLeNet
():
model
=
GoogleNet
_DY
(
)
return
model
def
GoogLeNet
(
**
args
):
model
=
GoogleNet
DY
(
**
args
)
return
model
\ No newline at end of file
ppcls/modeling/architectures/inception_v4.py
浏览文件 @
a4ee2f2c
import
numpy
as
np
import
argparse
import
paddle
import
paddle.fluid
as
fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
,
Dropout
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
import
math
__all__
=
[
"InceptionV4"
]
class
ConvBNLayer
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
num_channels
,
...
...
@@ -50,9 +43,9 @@ class ConvBNLayer(fluid.dygraph.Layer):
return
y
class
Inception
_
Stem
(
fluid
.
dygraph
.
Layer
):
class
InceptionStem
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
):
super
(
Inception
_
Stem
,
self
).
__init__
()
super
(
InceptionStem
,
self
).
__init__
()
self
.
_conv_1
=
ConvBNLayer
(
3
,
32
,
3
,
stride
=
2
,
act
=
"relu"
,
name
=
"conv1_3x3_s2"
)
self
.
_conv_2
=
ConvBNLayer
(
32
,
32
,
3
,
act
=
"relu"
,
name
=
"conv2_3x3_s1"
)
...
...
@@ -380,7 +373,7 @@ class InceptionC(fluid.dygraph.Layer):
class
InceptionV4DY
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
class_dim
=
1000
):
super
(
InceptionV4DY
,
self
).
__init__
()
self
.
_inception_stem
=
Inception
_
Stem
()
self
.
_inception_stem
=
InceptionStem
()
self
.
_inceptionA_1
=
InceptionA
(
name
=
"1"
)
self
.
_inceptionA_2
=
InceptionA
(
name
=
"2"
)
...
...
@@ -441,6 +434,6 @@ class InceptionV4DY(fluid.dygraph.Layer):
return
x
def
InceptionV4
():
model
=
InceptionV4DY
()
return
model
def
InceptionV4
(
**
args
):
model
=
InceptionV4DY
(
**
args
)
return
model
\ No newline at end of file
ppcls/modeling/architectures/resnext101_wsl.py
浏览文件 @
a4ee2f2c
import
numpy
as
np
import
argparse
import
paddle
import
paddle.fluid
as
fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
import
math
import
sys
import
time
__all__
=
[
"ResNeXt101_32x8d_wsl"
,
"ResNeXt101_wsl_32x16d_wsl"
,
...
...
@@ -60,9 +50,9 @@ class ConvBNLayer(fluid.dygraph.Layer):
x
=
self
.
_bn
(
x
)
return
x
class
Short
_
Cut
(
fluid
.
dygraph
.
Layer
):
class
ShortCut
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
stride
,
name
=
None
):
super
(
Short
_
Cut
,
self
).
__init__
()
super
(
ShortCut
,
self
).
__init__
()
self
.
input_channels
=
input_channels
self
.
output_channels
=
output_channels
...
...
@@ -76,9 +66,9 @@ class Short_Cut(fluid.dygraph.Layer):
return
self
.
_conv
(
inputs
)
return
inputs
class
Bottleneck
_
Block
(
fluid
.
dygraph
.
Layer
):
class
BottleneckBlock
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
stride
,
cardinality
,
width
,
name
):
super
(
Bottleneck
_
Block
,
self
).
__init__
()
super
(
BottleneckBlock
,
self
).
__init__
()
self
.
_conv0
=
ConvBNLayer
(
input_channels
,
output_channels
,
filter_size
=
1
,
act
=
"relu"
,
name
=
name
+
".conv1"
)
...
...
@@ -86,7 +76,7 @@ class Bottleneck_Block(fluid.dygraph.Layer):
output_channels
,
output_channels
,
filter_size
=
3
,
act
=
"relu"
,
stride
=
stride
,
groups
=
cardinality
,
name
=
name
+
".conv2"
)
self
.
_conv2
=
ConvBNLayer
(
output_channels
,
output_channels
//
(
width
//
8
),
filter_size
=
1
,
act
=
None
,
name
=
name
+
".conv3"
)
self
.
_short
=
Short
_
Cut
(
self
.
_short
=
ShortCut
(
input_channels
,
output_channels
//
(
width
//
8
),
stride
=
stride
,
name
=
name
+
".downsample"
)
def
forward
(
self
,
inputs
):
...
...
@@ -117,74 +107,74 @@ class ResNeXt101WSL(fluid.dygraph.Layer):
pool_padding
=
1
,
pool_type
=
"max"
)
self
.
_conv1_0
=
Bottleneck
_
Block
(
self
.
_conv1_0
=
BottleneckBlock
(
64
,
num_filters
[
0
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer1.0"
)
self
.
_conv1_1
=
Bottleneck
_
Block
(
self
.
_conv1_1
=
BottleneckBlock
(
num_filters
[
0
]
//
(
width
//
8
),
num_filters
[
0
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer1.1"
)
self
.
_conv1_2
=
Bottleneck
_
Block
(
self
.
_conv1_2
=
BottleneckBlock
(
num_filters
[
0
]
//
(
width
//
8
),
num_filters
[
0
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer1.2"
)
self
.
_conv2_0
=
Bottleneck
_
Block
(
self
.
_conv2_0
=
BottleneckBlock
(
num_filters
[
0
]
//
(
width
//
8
),
num_filters
[
1
],
stride
=
2
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer2.0"
)
self
.
_conv2_1
=
Bottleneck
_
Block
(
self
.
_conv2_1
=
BottleneckBlock
(
num_filters
[
1
]
//
(
width
//
8
),
num_filters
[
1
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer2.1"
)
self
.
_conv2_2
=
Bottleneck
_
Block
(
self
.
_conv2_2
=
BottleneckBlock
(
num_filters
[
1
]
//
(
width
//
8
),
num_filters
[
1
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer2.2"
)
self
.
_conv2_3
=
Bottleneck
_
Block
(
self
.
_conv2_3
=
BottleneckBlock
(
num_filters
[
1
]
//
(
width
//
8
),
num_filters
[
1
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer2.3"
)
self
.
_conv3_0
=
Bottleneck
_
Block
(
self
.
_conv3_0
=
BottleneckBlock
(
num_filters
[
1
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
2
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.0"
)
self
.
_conv3_1
=
Bottleneck
_
Block
(
self
.
_conv3_1
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.1"
)
self
.
_conv3_2
=
Bottleneck
_
Block
(
self
.
_conv3_2
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.2"
)
self
.
_conv3_3
=
Bottleneck
_
Block
(
self
.
_conv3_3
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.3"
)
self
.
_conv3_4
=
Bottleneck
_
Block
(
self
.
_conv3_4
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.4"
)
self
.
_conv3_5
=
Bottleneck
_
Block
(
self
.
_conv3_5
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.5"
)
self
.
_conv3_6
=
Bottleneck
_
Block
(
self
.
_conv3_6
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.6"
)
self
.
_conv3_7
=
Bottleneck
_
Block
(
self
.
_conv3_7
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.7"
)
self
.
_conv3_8
=
Bottleneck
_
Block
(
self
.
_conv3_8
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.8"
)
self
.
_conv3_9
=
Bottleneck
_
Block
(
self
.
_conv3_9
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.9"
)
self
.
_conv3_10
=
Bottleneck
_
Block
(
self
.
_conv3_10
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.10"
)
self
.
_conv3_11
=
Bottleneck
_
Block
(
self
.
_conv3_11
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.11"
)
self
.
_conv3_12
=
Bottleneck
_
Block
(
self
.
_conv3_12
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.12"
)
self
.
_conv3_13
=
Bottleneck
_
Block
(
self
.
_conv3_13
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.13"
)
self
.
_conv3_14
=
Bottleneck
_
Block
(
self
.
_conv3_14
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.14"
)
self
.
_conv3_15
=
Bottleneck
_
Block
(
self
.
_conv3_15
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.15"
)
self
.
_conv3_16
=
Bottleneck
_
Block
(
self
.
_conv3_16
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.16"
)
self
.
_conv3_17
=
Bottleneck
_
Block
(
self
.
_conv3_17
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.17"
)
self
.
_conv3_18
=
Bottleneck
_
Block
(
self
.
_conv3_18
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.18"
)
self
.
_conv3_19
=
Bottleneck
_
Block
(
self
.
_conv3_19
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.19"
)
self
.
_conv3_20
=
Bottleneck
_
Block
(
self
.
_conv3_20
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.20"
)
self
.
_conv3_21
=
Bottleneck
_
Block
(
self
.
_conv3_21
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.21"
)
self
.
_conv3_22
=
Bottleneck
_
Block
(
self
.
_conv3_22
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
2
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer3.22"
)
self
.
_conv4_0
=
Bottleneck
_
Block
(
self
.
_conv4_0
=
BottleneckBlock
(
num_filters
[
2
]
//
(
width
//
8
),
num_filters
[
3
],
stride
=
2
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer4.0"
)
self
.
_conv4_1
=
Bottleneck
_
Block
(
self
.
_conv4_1
=
BottleneckBlock
(
num_filters
[
3
]
//
(
width
//
8
),
num_filters
[
3
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer4.1"
)
self
.
_conv4_2
=
Bottleneck
_
Block
(
self
.
_conv4_2
=
BottleneckBlock
(
num_filters
[
3
]
//
(
width
//
8
),
num_filters
[
3
],
stride
=
1
,
cardinality
=
self
.
cardinality
,
width
=
self
.
width
,
name
=
"layer4.2"
)
self
.
_avg_pool
=
Pool2D
(
pool_type
=
"avg"
,
global_pooling
=
True
)
...
...
@@ -239,18 +229,18 @@ class ResNeXt101WSL(fluid.dygraph.Layer):
x
=
self
.
_out
(
x
)
return
x
def
ResNeXt101_32x8d_wsl
():
model
=
ResNeXt101WSL
(
cardinality
=
32
,
width
=
8
)
def
ResNeXt101_32x8d_wsl
(
**
args
):
model
=
ResNeXt101WSL
(
cardinality
=
32
,
width
=
8
,
**
args
)
return
model
def
ResNeXt101_32x16d_wsl
():
model
=
ResNeXt101WSL
(
cardinality
=
32
,
width
=
16
)
def
ResNeXt101_32x16d_wsl
(
**
args
):
model
=
ResNeXt101WSL
(
cardinality
=
32
,
width
=
16
,
**
args
)
return
model
def
ResNeXt101_32x32d_wsl
():
model
=
ResNeXt101WSL
(
cardinality
=
32
,
width
=
32
)
def
ResNeXt101_32x32d_wsl
(
**
args
):
model
=
ResNeXt101WSL
(
cardinality
=
32
,
width
=
32
,
**
args
)
return
model
def
ResNeXt101_32x48d_wsl
():
model
=
ResNeXt101WSL
(
cardinality
=
32
,
width
=
48
)
def
ResNeXt101_32x48d_wsl
(
**
args
):
model
=
ResNeXt101WSL
(
cardinality
=
32
,
width
=
48
,
**
args
)
return
model
\ No newline at end of file
ppcls/modeling/architectures/squeezenet.py
浏览文件 @
a4ee2f2c
import
numpy
as
np
import
argparse
import
paddle
import
paddle.fluid
as
fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
,
Dropout
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
import
math
import
sys
import
time
__all__
=
[
"SqueezeNet1_0"
,
"SqueezeNet1_1"
]
...
...
@@ -152,10 +142,10 @@ class SqueezeNet(fluid.dygraph.Layer):
x
=
fluid
.
layers
.
squeeze
(
x
,
axes
=
[
2
,
3
])
return
x
def
SqueezeNet1_0
():
model
=
SqueezeNet
(
version
=
"1.0"
)
def
SqueezeNet1_0
(
**
args
):
model
=
SqueezeNet
(
version
=
"1.0"
,
**
args
)
return
model
def
SqueezeNet1_1
():
model
=
SqueezeNet
(
version
=
"1.1"
)
def
SqueezeNet1_1
(
**
args
):
model
=
SqueezeNet
(
version
=
"1.1"
,
**
args
)
return
model
\ No newline at end of file
ppcls/modeling/architectures/vgg.py
浏览文件 @
a4ee2f2c
#coding:utf-8
import
numpy
as
np
import
argparse
import
paddle
import
paddle.fluid
as
fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
import
math
import
sys
import
time
__all__
=
[
"VGG11"
,
"VGG13"
,
"VGG16"
,
"VGG19"
]
class
Conv
_
Block
(
fluid
.
dygraph
.
Layer
):
class
ConvBlock
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
groups
,
name
=
None
):
super
(
Conv
_
Block
,
self
).
__init__
()
super
(
ConvBlock
,
self
).
__init__
()
self
.
groups
=
groups
self
.
_conv_1
=
Conv2D
(
num_channels
=
input_channels
,
...
...
@@ -52,8 +41,8 @@ class Conv_Block(fluid.dygraph.Layer):
param_attr
=
ParamAttr
(
name
=
name
+
"3_weights"
),
bias_attr
=
False
)
if
groups
==
4
:
self
.
_conv_4
=
Conv2D
(
num
ber
_channels
=
output_channels
,
num
ber
_filters
=
output_channels
,
self
.
_conv_4
=
Conv2D
(
num_channels
=
output_channels
,
num_filters
=
output_channels
,
filter_size
=
3
,
stride
=
1
,
padding
=
1
,
...
...
@@ -88,13 +77,13 @@ class VGGNet(fluid.dygraph.Layer):
"supported layers are {} but input layer is {}"
.
format
(
vgg_configure
.
keys
(),
layers
)
self
.
groups
=
self
.
vgg_configure
[
self
.
layers
]
self
.
_conv_block_1
=
Conv
_
Block
(
3
,
64
,
self
.
groups
[
0
],
name
=
"conv1_"
)
self
.
_conv_block_2
=
Conv
_
Block
(
64
,
128
,
self
.
groups
[
1
],
name
=
"conv2_"
)
self
.
_conv_block_3
=
Conv
_
Block
(
128
,
256
,
self
.
groups
[
2
],
name
=
"conv3_"
)
self
.
_conv_block_4
=
Conv
_
Block
(
256
,
512
,
self
.
groups
[
3
],
name
=
"conv4_"
)
self
.
_conv_block_5
=
Conv
_
Block
(
512
,
512
,
self
.
groups
[
4
],
name
=
"conv5_"
)
self
.
_conv_block_1
=
ConvBlock
(
3
,
64
,
self
.
groups
[
0
],
name
=
"conv1_"
)
self
.
_conv_block_2
=
ConvBlock
(
64
,
128
,
self
.
groups
[
1
],
name
=
"conv2_"
)
self
.
_conv_block_3
=
ConvBlock
(
128
,
256
,
self
.
groups
[
2
],
name
=
"conv3_"
)
self
.
_conv_block_4
=
ConvBlock
(
256
,
512
,
self
.
groups
[
3
],
name
=
"conv4_"
)
self
.
_conv_block_5
=
ConvBlock
(
512
,
512
,
self
.
groups
[
4
],
name
=
"conv5_"
)
#self._drop = fluid.dygraph.nn
.Dropout(p=0.5)
self
.
_drop
=
fluid
.
dygraph
.
Dropout
(
p
=
0.5
)
self
.
_fc1
=
Linear
(
input_dim
=
7
*
7
*
512
,
output_dim
=
4096
,
act
=
"relu"
,
...
...
@@ -119,24 +108,24 @@ class VGGNet(fluid.dygraph.Layer):
x
=
fluid
.
layers
.
flatten
(
x
,
axis
=
0
)
x
=
self
.
_fc1
(
x
)
#
x = self._drop(x)
x
=
self
.
_drop
(
x
)
x
=
self
.
_fc2
(
x
)
#
x = self._drop(x)
x
=
self
.
_drop
(
x
)
x
=
self
.
_out
(
x
)
return
x
def
VGG11
():
model
=
VGGNet
(
layers
=
11
)
def
VGG11
(
**
args
):
model
=
VGGNet
(
layers
=
11
,
**
args
)
return
model
def
VGG13
():
model
=
VGGNet
(
layers
=
13
)
def
VGG13
(
**
args
):
model
=
VGGNet
(
layers
=
13
,
**
args
)
return
model
def
VGG16
():
model
=
VGGNet
(
layers
=
16
)
def
VGG16
(
**
args
):
model
=
VGGNet
(
layers
=
16
,
**
args
)
return
model
def
VGG19
():
model
=
VGGNet
(
layers
=
19
)
def
VGG19
(
**
args
):
model
=
VGGNet
(
layers
=
19
,
**
args
)
return
model
\ No newline at end of file
ppcls/modeling/architectures/xception.py
浏览文件 @
a4ee2f2c
import
numpy
as
np
import
argparse
import
paddle
import
paddle.fluid
as
fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
import
math
import
sys
import
time
__all__
=
[
'Xception41'
,
'Xception65'
,
'Xception71'
]
...
...
@@ -52,9 +44,9 @@ class ConvBNLayer(fluid.dygraph.Layer):
return
y
class
Separable
_
Conv
(
fluid
.
dygraph
.
Layer
):
class
SeparableConv
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
stride
=
1
,
name
=
None
):
super
(
Separable
_
Conv
,
self
).
__init__
()
super
(
SeparableConv
,
self
).
__init__
()
self
.
_pointwise_conv
=
ConvBNLayer
(
input_channels
,
output_channels
,
1
,
name
=
name
+
"_sep"
)
...
...
@@ -72,14 +64,14 @@ class Separable_Conv(fluid.dygraph.Layer):
return
x
class
Entry
_Flow_Bottleneck_
Block
(
fluid
.
dygraph
.
Layer
):
class
Entry
FlowBottleneck
Block
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
stride
=
2
,
name
=
None
,
relu_first
=
False
):
super
(
Entry
_Flow_Bottleneck_
Block
,
self
).
__init__
()
super
(
Entry
FlowBottleneck
Block
,
self
).
__init__
()
self
.
relu_first
=
relu_first
self
.
_short
=
Conv2D
(
...
...
@@ -91,12 +83,12 @@ class Entry_Flow_Bottleneck_Block(fluid.dygraph.Layer):
act
=
None
,
param_attr
=
ParamAttr
(
name
+
"_branch1_weights"
),
bias_attr
=
False
)
self
.
_conv1
=
Separable
_
Conv
(
self
.
_conv1
=
SeparableConv
(
input_channels
,
output_channels
,
stride
=
1
,
name
=
name
+
"_branch2a_weights"
)
self
.
_conv2
=
Separable
_
Conv
(
self
.
_conv2
=
SeparableConv
(
output_channels
,
output_channels
,
stride
=
1
,
...
...
@@ -117,9 +109,9 @@ class Entry_Flow_Bottleneck_Block(fluid.dygraph.Layer):
return
fluid
.
layers
.
elementwise_add
(
x
=
short
,
y
=
pool
)
class
Entry
_
Flow
(
fluid
.
dygraph
.
Layer
):
class
EntryFlow
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
block_num
=
3
):
super
(
Entry
_
Flow
,
self
).
__init__
()
super
(
EntryFlow
,
self
).
__init__
()
name
=
"entry_flow"
self
.
block_num
=
block_num
...
...
@@ -127,22 +119,22 @@ class Entry_Flow(fluid.dygraph.Layer):
3
,
32
,
3
,
stride
=
2
,
act
=
"relu"
,
name
=
name
+
"_conv1"
)
self
.
_conv2
=
ConvBNLayer
(
32
,
64
,
3
,
act
=
"relu"
,
name
=
name
+
"_conv2"
)
if
block_num
==
3
:
self
.
_conv_0
=
Entry
_Flow_Bottleneck_
Block
(
self
.
_conv_0
=
Entry
FlowBottleneck
Block
(
64
,
128
,
stride
=
2
,
name
=
name
+
"_0"
,
relu_first
=
False
)
self
.
_conv_1
=
Entry
_Flow_Bottleneck_
Block
(
self
.
_conv_1
=
Entry
FlowBottleneck
Block
(
128
,
256
,
stride
=
2
,
name
=
name
+
"_1"
,
relu_first
=
True
)
self
.
_conv_2
=
Entry
_Flow_Bottleneck_
Block
(
self
.
_conv_2
=
Entry
FlowBottleneck
Block
(
256
,
728
,
stride
=
2
,
name
=
name
+
"_2"
,
relu_first
=
True
)
elif
block_num
==
5
:
self
.
_conv_0
=
Entry
_Flow_Bottleneck_
Block
(
self
.
_conv_0
=
Entry
FlowBottleneck
Block
(
64
,
128
,
stride
=
2
,
name
=
name
+
"_0"
,
relu_first
=
False
)
self
.
_conv_1
=
Entry
_Flow_Bottleneck_
Block
(
self
.
_conv_1
=
Entry
FlowBottleneck
Block
(
128
,
256
,
stride
=
1
,
name
=
name
+
"_1"
,
relu_first
=
True
)
self
.
_conv_2
=
Entry
_Flow_Bottleneck_
Block
(
self
.
_conv_2
=
Entry
FlowBottleneck
Block
(
256
,
256
,
stride
=
2
,
name
=
name
+
"_2"
,
relu_first
=
True
)
self
.
_conv_3
=
Entry
_Flow_Bottleneck_
Block
(
self
.
_conv_3
=
Entry
FlowBottleneck
Block
(
256
,
728
,
stride
=
1
,
name
=
name
+
"_3"
,
relu_first
=
True
)
self
.
_conv_4
=
Entry
_Flow_Bottleneck_
Block
(
self
.
_conv_4
=
Entry
FlowBottleneck
Block
(
728
,
728
,
stride
=
2
,
name
=
name
+
"_4"
,
relu_first
=
True
)
else
:
sys
.
exit
(
-
1
)
...
...
@@ -164,21 +156,21 @@ class Entry_Flow(fluid.dygraph.Layer):
return
x
class
Middle
_Flow_Bottleneck_
Block
(
fluid
.
dygraph
.
Layer
):
class
Middle
FlowBottleneck
Block
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels
,
name
):
super
(
Middle
_Flow_Bottleneck_
Block
,
self
).
__init__
()
super
(
Middle
FlowBottleneck
Block
,
self
).
__init__
()
self
.
_conv_0
=
Separable
_
Conv
(
self
.
_conv_0
=
SeparableConv
(
input_channels
,
output_channels
,
stride
=
1
,
name
=
name
+
"_branch2a_weights"
)
self
.
_conv_1
=
Separable
_
Conv
(
self
.
_conv_1
=
SeparableConv
(
output_channels
,
output_channels
,
stride
=
1
,
name
=
name
+
"_branch2b_weights"
)
self
.
_conv_2
=
Separable
_
Conv
(
self
.
_conv_2
=
SeparableConv
(
output_channels
,
output_channels
,
stride
=
1
,
...
...
@@ -195,43 +187,43 @@ class Middle_Flow_Bottleneck_Block(fluid.dygraph.Layer):
return
fluid
.
layers
.
elementwise_add
(
x
=
inputs
,
y
=
conv2
)
class
Middle
_
Flow
(
fluid
.
dygraph
.
Layer
):
class
MiddleFlow
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
block_num
=
8
):
super
(
Middle
_
Flow
,
self
).
__init__
()
super
(
MiddleFlow
,
self
).
__init__
()
self
.
block_num
=
block_num
self
.
_conv_0
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_0
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_0"
)
self
.
_conv_1
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_1
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_1"
)
self
.
_conv_2
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_2
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_2"
)
self
.
_conv_3
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_3
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_3"
)
self
.
_conv_4
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_4
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_4"
)
self
.
_conv_5
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_5
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_5"
)
self
.
_conv_6
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_6
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_6"
)
self
.
_conv_7
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_7
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_7"
)
if
block_num
==
16
:
self
.
_conv_8
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_8
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_8"
)
self
.
_conv_9
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_9
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_9"
)
self
.
_conv_10
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_10
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_10"
)
self
.
_conv_11
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_11
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_11"
)
self
.
_conv_12
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_12
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_12"
)
self
.
_conv_13
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_13
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_13"
)
self
.
_conv_14
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_14
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_14"
)
self
.
_conv_15
=
Middle
_Flow_Bottleneck_
Block
(
self
.
_conv_15
=
Middle
FlowBottleneck
Block
(
728
,
728
,
name
=
"middle_flow_15"
)
def
forward
(
self
,
inputs
):
...
...
@@ -255,10 +247,10 @@ class Middle_Flow(fluid.dygraph.Layer):
return
x
class
Exit
_Flow_Bottleneck_
Block
(
fluid
.
dygraph
.
Layer
):
class
Exit
FlowBottleneck
Block
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
input_channels
,
output_channels1
,
output_channels2
,
name
):
super
(
Exit
_Flow_Bottleneck_
Block
,
self
).
__init__
()
super
(
Exit
FlowBottleneck
Block
,
self
).
__init__
()
self
.
_short
=
Conv2D
(
num_channels
=
input_channels
,
...
...
@@ -269,12 +261,12 @@ class Exit_Flow_Bottleneck_Block(fluid.dygraph.Layer):
act
=
None
,
param_attr
=
ParamAttr
(
name
+
"_branch1_weights"
),
bias_attr
=
False
)
self
.
_conv_1
=
Separable
_
Conv
(
self
.
_conv_1
=
SeparableConv
(
input_channels
,
output_channels1
,
stride
=
1
,
name
=
name
+
"_branch2a_weights"
)
self
.
_conv_2
=
Separable
_
Conv
(
self
.
_conv_2
=
SeparableConv
(
output_channels1
,
output_channels2
,
stride
=
1
,
...
...
@@ -293,16 +285,16 @@ class Exit_Flow_Bottleneck_Block(fluid.dygraph.Layer):
return
fluid
.
layers
.
elementwise_add
(
x
=
short
,
y
=
pool
)
class
Exit
_
Flow
(
fluid
.
dygraph
.
Layer
):
class
ExitFlow
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
class_dim
):
super
(
Exit
_
Flow
,
self
).
__init__
()
super
(
ExitFlow
,
self
).
__init__
()
name
=
"exit_flow"
self
.
_conv_0
=
Exit
_Flow_Bottleneck_
Block
(
self
.
_conv_0
=
Exit
FlowBottleneck
Block
(
728
,
728
,
1024
,
name
=
name
+
"_1"
)
self
.
_conv_1
=
Separable
_
Conv
(
1024
,
1536
,
stride
=
1
,
name
=
name
+
"_2"
)
self
.
_conv_2
=
Separable
_
Conv
(
1536
,
2048
,
stride
=
1
,
name
=
name
+
"_3"
)
self
.
_conv_1
=
SeparableConv
(
1024
,
1536
,
stride
=
1
,
name
=
name
+
"_2"
)
self
.
_conv_2
=
SeparableConv
(
1536
,
2048
,
stride
=
1
,
name
=
name
+
"_3"
)
self
.
_pool
=
Pool2D
(
pool_type
=
"avg"
,
global_pooling
=
True
)
stdv
=
1.0
/
math
.
sqrt
(
2048
*
1.0
)
self
.
_out
=
Linear
(
...
...
@@ -334,9 +326,9 @@ class Xception(fluid.dygraph.Layer):
super
(
Xception
,
self
).
__init__
()
self
.
entry_flow_block_num
=
entry_flow_block_num
self
.
middle_flow_block_num
=
middle_flow_block_num
self
.
_entry_flow
=
Entry
_
Flow
(
entry_flow_block_num
)
self
.
_middle_flow
=
Middle
_
Flow
(
middle_flow_block_num
)
self
.
_exit_flow
=
Exit
_
Flow
(
class_dim
)
self
.
_entry_flow
=
EntryFlow
(
entry_flow_block_num
)
self
.
_middle_flow
=
MiddleFlow
(
middle_flow_block_num
)
self
.
_exit_flow
=
ExitFlow
(
class_dim
)
def
forward
(
self
,
inputs
):
x
=
self
.
_entry_flow
(
inputs
)
...
...
@@ -345,16 +337,16 @@ class Xception(fluid.dygraph.Layer):
return
x
def
Xception41
():
model
=
Xception
(
entry_flow_block_num
=
3
,
middle_flow_block_num
=
8
)
def
Xception41
(
**
args
):
model
=
Xception
(
entry_flow_block_num
=
3
,
middle_flow_block_num
=
8
,
**
args
)
return
model
def
Xception65
():
model
=
Xception
(
entry_flow_block_num
=
3
,
middle_flow_block_num
=
16
)
def
Xception65
(
**
args
):
model
=
Xception
(
entry_flow_block_num
=
3
,
middle_flow_block_num
=
16
,
**
args
)
return
model
def
Xception71
():
model
=
Xception
(
entry_flow_block_num
=
5
,
middle_flow_block_num
=
16
)
return
model
def
Xception71
(
**
args
):
model
=
Xception
(
entry_flow_block_num
=
5
,
middle_flow_block_num
=
16
,
**
args
)
return
model
\ No newline at end of file
ppcls/modeling/architectures/xception_deeplab.py
浏览文件 @
a4ee2f2c
import
numpy
as
np
import
argparse
import
paddle
import
paddle.fluid
as
fluid
from
paddle.fluid.param_attr
import
ParamAttr
from
paddle.fluid.layer_helper
import
LayerHelper
from
paddle.fluid.dygraph.nn
import
Conv2D
,
Pool2D
,
BatchNorm
,
Linear
,
Dropout
from
paddle.fluid.dygraph.base
import
to_variable
from
paddle.fluid
import
framework
import
math
import
sys
import
time
__all__
=
[
"Xception41_deeplab"
,
"Xception65_deeplab"
,
"Xception71_deeplab"
]
...
...
@@ -256,9 +247,9 @@ class Xception_Block(fluid.dygraph.Layer):
return
fluid
.
layers
.
elementwise_add
(
x
,
skip
)
class
Xception
_d
eeplab
(
fluid
.
dygraph
.
Layer
):
class
Xception
D
eeplab
(
fluid
.
dygraph
.
Layer
):
def
__init__
(
self
,
backbone
,
class_dim
=
1000
):
super
(
Xception
_d
eeplab
,
self
).
__init__
()
super
(
Xception
D
eeplab
,
self
).
__init__
()
bottleneck_params
=
gen_bottleneck_params
(
backbone
)
self
.
backbone
=
backbone
...
...
@@ -379,16 +370,16 @@ class Xception_deeplab(fluid.dygraph.Layer):
return
x
def
Xception41_deeplab
():
model
=
Xception
_deeplab
(
'xception_41'
)
def
Xception41_deeplab
(
**
args
):
model
=
Xception
Deeplab
(
'xception_41'
,
**
args
)
return
model
def
Xception65_deeplab
():
model
=
Xception
_deeplab
(
"xception_65"
)
def
Xception65_deeplab
(
**
args
):
model
=
Xception
Deeplab
(
"xception_65"
,
**
args
)
return
model
def
Xception71_deeplab
():
model
=
Xception
_deeplab
(
"xception_71"
)
return
model
def
Xception71_deeplab
(
**
args
):
model
=
Xception
Deeplab
(
"xception_71"
,
**
args
)
return
model
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录