Skip to content
This repository was archived by the owner on Jan 24, 2024. It is now read-only.

Commit 9523df2

Browse files
authored
Merge pull request #14 from NHZlX/unify_config
unify the model config
2 parents 07e6850 + 91c61ae commit 9523df2

File tree

13 files changed

+340
-205
lines changed

13 files changed

+340
-205
lines changed
Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# edit-mode: -*- python -*-
22
import paddle.v2 as paddle
33

4-
54
def conv_bn_layer(input, filter_size, num_filters,
65
stride, padding, channels=None, num_groups=1,
7-
active_type=paddle.activation.Relu()):
6+
active_type=paddle.activation.Relu(),
7+
layer_type=None):
88
"""
99
A wrapper for conv layer with batch normalization layers.
1010
Note:
@@ -18,43 +18,42 @@ def conv_bn_layer(input, filter_size, num_filters,
1818
stride=stride,
1919
padding=padding,
2020
groups=num_groups,
21-
#act=active_type,
2221
act=paddle.activation.Linear(),
23-
bias_attr=False)
24-
#act=active_type,
25-
#bias_attr=True)
22+
bias_attr=False,
23+
layer_type=layer_type)
2624
return paddle.layer.batch_norm(
2725
input=tmp,
2826
act=active_type)
29-
#use_global_stats=False,
30-
def depthwise_separable(input, num_filters1, num_filters2, num_groups, stride):
27+
28+
def depthwise_separable(input, num_filters1, num_filters2, num_groups, stride, scale):
3129
"""
3230
"""
3331
tmp = conv_bn_layer(
3432
input=input,
3533
filter_size=3,
36-
num_filters=num_filters1,
34+
num_filters=int(num_filters1*scale),
3735
stride=stride,
3836
padding=1,
39-
num_groups=num_groups)
37+
num_groups=int(num_groups*scale), layer_type='exconv')
4038

4139
tmp = conv_bn_layer(
4240
input=tmp,
4341
filter_size=1,
44-
num_filters=num_filters2,
42+
num_filters=int(num_filters2*scale),
4543
stride=1,
4644
padding=0)
4745
return tmp
4846

49-
def mobile_net(img):
50-
# For ImageNet
51-
# image_data_layers(224, 1000, True)
47+
def mobile_net(img_size, class_num, scale = 1.0):
48+
49+
img = paddle.layer.data(
50+
name="image", type=paddle.data_type.dense_vector(img_size))
5251

5352
# conv1: 112x112
5453
tmp = conv_bn_layer(img,
5554
filter_size=3,
5655
channels=3,
57-
num_filters=32,
56+
num_filters=int(32*scale),
5857
stride=2,
5958
padding=1)
6059

@@ -63,57 +62,64 @@ def mobile_net(img):
6362
num_filters1=32,
6463
num_filters2=64,
6564
num_groups=32,
66-
stride=1)
65+
stride=1, scale = scale)
6766
tmp = depthwise_separable(tmp,
6867
num_filters1=64,
6968
num_filters2=128,
7069
num_groups=64,
71-
stride=2)
70+
stride=2, scale = scale)
7271
# 28x28
7372
tmp = depthwise_separable(tmp,
7473
num_filters1=128,
7574
num_filters2=128,
7675
num_groups=128,
77-
stride=1)
76+
stride=1, scale = scale)
7877
tmp = depthwise_separable(tmp,
7978
num_filters1=128,
8079
num_filters2=256,
8180
num_groups=128,
82-
stride=2)
81+
stride=2, scale = scale)
8382
# 14x14
8483
tmp = depthwise_separable(tmp,
8584
num_filters1=256,
8685
num_filters2=256,
8786
num_groups=256,
88-
stride=1)
87+
stride=1, scale = scale)
8988
tmp = depthwise_separable(tmp,
9089
num_filters1=256,
9190
num_filters2=512,
9291
num_groups=256,
93-
stride=2)
92+
stride=2, scale = scale)
9493
# 14x14
9594
for i in range(5):
9695
tmp = depthwise_separable(tmp,
9796
num_filters1=512,
9897
num_filters2=512,
9998
num_groups=512,
100-
stride=1)
99+
stride=1, scale = scale)
101100
# 7x7
102101
tmp = depthwise_separable(tmp,
103102
num_filters1=512,
104103
num_filters2=1024,
105104
num_groups=512,
106-
stride=2)
105+
stride=2, scale = scale)
107106
tmp = depthwise_separable(tmp,
108107
num_filters1=1024,
109108
num_filters2=1024,
110109
num_groups=1024,
111-
stride=1)
110+
stride=1, scale = scale)
112111

113112
tmp = paddle.layer.img_pool(
114113
input=tmp,
115114
pool_size=7,
116115
stride=1,
117116
pool_type=paddle.pooling.Avg())
117+
out = paddle.layer.fc(
118+
input=tmp, size=class_num, act=paddle.activation.Softmax())
118119

119-
return tmp
120+
return out
121+
122+
if __name__ == '__main__':
123+
img_size = 3 * 224 * 224
124+
data_dim = 102
125+
out = mobile_net(img_size, data_dim, 1.0)

model_compression/flowers102/mobilenet/train.py

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,16 @@
1414

1515
import sys
1616
import gzip
17-
from paddle.trainer_config_helpers import *
1817

18+
from paddle.trainer_config_helpers import *
1919
import paddle.v2 as paddle
20-
21-
#from mobilenet_new import mobile_net
2220
from mobilenet import mobile_net
2321

2422

2523
BATCH = 40
2624
def main():
2725
datadim = 3 * 224 * 224
2826
classdim = 102
29-
3027

3128
# PaddlePaddle init
3229
paddle.init(use_gpu=True, trainer_count=1, gpu_id = 1)
@@ -35,28 +32,9 @@ def main():
3532
momentum=0.9,
3633
regularization=paddle.optimizer.L2Regularization(rate=0.0005 * BATCH),
3734
learning_rate=0.005/ BATCH,
38-
#learning_rate_decay_a=0.1,
39-
#learning_rate_decay_b=50000 * 50,
4035
learning_rate_schedule='constant')
4136

42-
image = paddle.layer.data(
43-
name="image", type=paddle.data_type.dense_vector(datadim))
44-
45-
net = mobile_net(image)
46-
# option 2. vgg
47-
#net = vgg_bn_drop(image)
48-
49-
50-
out = paddle.layer.fc(
51-
input=net, size=classdim, act=paddle.activation.Softmax())
52-
'''
53-
out = paddle.layer.img_conv(
54-
input=net,
55-
filter_size=1,
56-
num_filters=classdim,
57-
stride=1,
58-
act=paddle.activation.Linear())
59-
'''
37+
out = mobile_net(datadim, classdim, 1.0)
6038

6139
lbl = paddle.layer.data(
6240
name="label", type=paddle.data_type.integer_value(classdim))
@@ -104,6 +82,5 @@ def event_handler(event):
10482
feeding={'image': 0,
10583
'label': 1})
10684

107-
10885
if __name__ == '__main__':
10986
main()

model_compression/flowers102/mobilenet_pruning/mobilenet_pruning.py

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66

77
def conv_bn_layer(input, filter_size, num_filters,
88
stride, padding, channels=None, num_groups=1,
9-
active_type=paddle.activation.Relu(), param_attr=None):
9+
active_type=paddle.activation.Relu(), param_attr=None,
10+
layer_type=None):
1011
"""
1112
A wrapper for conv layer with batch normalization layers.
1213
Note:
@@ -22,43 +23,45 @@ def conv_bn_layer(input, filter_size, num_filters,
2223
groups=num_groups,
2324
param_attr=param_attr,
2425
act=paddle.activation.Linear(),
25-
bias_attr=False)
26-
#act=active_type,
27-
#bias_attr=True)
26+
bias_attr=False,
27+
layer_type=layer_type)
28+
2829
return paddle.layer.batch_norm(
2930
input=tmp,
3031
act=active_type)
31-
#use_global_stats=False,
32-
def depthwise_separable(input, num_filters1, num_filters2, num_groups, stride):
32+
33+
def depthwise_separable(input, num_filters1, num_filters2, num_groups, stride, scale):
3334
"""
3435
"""
3536
tmp = conv_bn_layer(
3637
input=input,
3738
filter_size=3,
38-
num_filters=num_filters1,
39+
num_filters=int(num_filters1*scale),
3940
stride=stride,
4041
padding=1,
41-
num_groups=num_groups)
42+
num_groups=int(num_groups*scale),
43+
layer_type='exconv')
4244

4345
pa0 = ParamAttr(update_hooks = Hook('dynamic_pruning', sparsity_upper_bound=0.75))
4446
tmp = conv_bn_layer(
4547
input=tmp,
4648
filter_size=1,
47-
num_filters=num_filters2,
49+
num_filters=int(num_filters2*scale),
4850
stride=1,
4951
padding=0,
5052
param_attr = pa0)
5153
return tmp
5254

53-
def mobile_net(img):
54-
# For ImageNet
55-
# image_data_layers(224, 1000, True)
55+
def mobile_net(img_size, class_num, scale = 1.0):
56+
57+
img = paddle.layer.data(
58+
name="image", type=paddle.data_type.dense_vector(img_size))
5659

5760
# conv1: 112x112
5861
tmp = conv_bn_layer(img,
5962
filter_size=3,
6063
channels=3,
61-
num_filters=32,
64+
num_filters=int(32*scale),
6265
stride=2,
6366
padding=1)
6467

@@ -67,57 +70,66 @@ def mobile_net(img):
6770
num_filters1=32,
6871
num_filters2=64,
6972
num_groups=32,
70-
stride=1)
73+
stride=1, scale = scale)
7174
tmp = depthwise_separable(tmp,
7275
num_filters1=64,
7376
num_filters2=128,
7477
num_groups=64,
75-
stride=2)
78+
stride=2, scale = scale)
7679
# 28x28
7780
tmp = depthwise_separable(tmp,
7881
num_filters1=128,
7982
num_filters2=128,
8083
num_groups=128,
81-
stride=1)
84+
stride=1, scale = scale)
8285
tmp = depthwise_separable(tmp,
8386
num_filters1=128,
8487
num_filters2=256,
8588
num_groups=128,
86-
stride=2)
89+
stride=2, scale = scale)
8790
# 14x14
8891
tmp = depthwise_separable(tmp,
8992
num_filters1=256,
9093
num_filters2=256,
9194
num_groups=256,
92-
stride=1)
95+
stride=1, scale = scale)
9396
tmp = depthwise_separable(tmp,
9497
num_filters1=256,
9598
num_filters2=512,
9699
num_groups=256,
97-
stride=2)
100+
stride=2, scale = scale)
98101
# 14x14
99102
for i in range(5):
100103
tmp = depthwise_separable(tmp,
101104
num_filters1=512,
102105
num_filters2=512,
103106
num_groups=512,
104-
stride=1)
107+
stride=1, scale = scale)
105108
# 7x7
106109
tmp = depthwise_separable(tmp,
107110
num_filters1=512,
108111
num_filters2=1024,
109112
num_groups=512,
110-
stride=2)
113+
stride=2, scale = scale)
111114
tmp = depthwise_separable(tmp,
112115
num_filters1=1024,
113116
num_filters2=1024,
114117
num_groups=1024,
115-
stride=1)
118+
stride=1, scale = scale)
116119

117120
tmp = paddle.layer.img_pool(
118121
input=tmp,
119122
pool_size=7,
120123
stride=1,
121124
pool_type=paddle.pooling.Avg())
122125

123-
return tmp
126+
out = paddle.layer.fc(
127+
input=tmp, size=class_num, act=paddle.activation.Softmax(),
128+
param_attr = ParamAttr(update_hooks=Hook('dynamic_pruning', sparsity_upper_bound=0.8)))
129+
130+
return out
131+
132+
if __name__ == '__main__':
133+
img_size = 3 * 224 * 224
134+
data_dim = 102
135+
out = mobile_net(img_size, data_dim, 1.0)

0 commit comments

Comments
 (0)