Skip to content

Commit b05085e

Browse files
authored
adjust seg's demo. (PaddlePaddle#1105)
1 parent c3de12a commit b05085e

File tree

6 files changed

+104
-101
lines changed

6 files changed

+104
-101
lines changed

demo/auto_compression/semantic_segmentation/README.md

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,37 @@ tar -xzf ppseg_lite_portrait_398x224_with_softmax.tar.gz
8282

8383
#### 3.4 自动压缩并产出模型
8484

85-
自动压缩示例通过run.py脚本启动,会使用接口```paddleslim.auto_compression.AutoCompression```对模型进行自动压缩。配置config文件中模型路径、数据集路径、蒸馏、量化、稀疏化和训练等部分的参数,配置完成后便可对模型进行非结构化稀疏、蒸馏和量化、蒸馏。
85+
自动压缩示例通过run.py脚本启动,会使用接口```paddleslim.auto_compression.AutoCompression```对模型进行自动压缩。首先要配置config文件中模型路径、数据集路径、蒸馏、量化、稀疏化和训练等部分的参数,配置完成后便可对模型进行非结构化稀疏、蒸馏和量化、蒸馏。
8686

87+
当只设置训练参数,并传入``deploy_hardware``字段时,将自动搜索压缩策略进行压缩。以骁龙710(SD710)为部署硬件,进行自动压缩的运行命令如下:
88+
89+
```shell
90+
python run.py \
91+
--model_dir='./ppseg_lite_portrait_398x224_with_softmax' \
92+
--model_filename='model.pdmodel' \
93+
--params_filename='model.pdiparams' \
94+
--save_dir='./save_model' \
95+
--config_path='configs/pp_humanseg_auto.yaml'
96+
--deploy_hardware='SD710'
97+
```
98+
- 自行配置稀疏参数进行非结构化稀疏和蒸馏训练,配置参数含义详见[自动压缩超参文档](https://github.com/PaddlePaddle/PaddleSlim/blob/27dafe1c722476f1b16879f7045e9215b6f37559/demo/auto_compression/hyperparameter_tutorial.md)。具体命令如下所示:
99+
```shell
100+
python run.py \
101+
--model_dir='./ppseg_lite_portrait_398x224_with_softmax' \
102+
--model_filename='model.pdmodel' \
103+
--params_filename='model.pdiparams' \
104+
--save_dir='./save_model' \
105+
--config_path='configs/pp_humanseg_sparse_dis.yaml'
106+
```
107+
108+
- 自行配置量化参数进行量化和蒸馏训练,配置参数含义详见[自动压缩超参文档](https://github.com/PaddlePaddle/PaddleSlim/blob/27dafe1c722476f1b16879f7045e9215b6f37559/demo/auto_compression/hyperparameter_tutorial.md)。具体命令如下所示:
87109
```shell
88110
python run.py \
89-
--model_dir='inference_model' \
90-
--model_filename='inference.pdmodel' \
91-
--params_filename='./inference.pdiparams' \
111+
--model_dir='./ppseg_lite_portrait_398x224_with_softmax' \
112+
--model_filename='model.pdmodel' \
113+
--params_filename='model.pdiparams' \
92114
--save_dir='./save_model' \
93-
--config_path='configs/humanseg_sparse_dis.yaml'
115+
--config_path='configs/pp_humanseg_quant_dis.yaml'
94116
```
95117

96118
压缩完成后会在`save_dir`中产出压缩好的预测模型,可直接预测部署。
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Global:
2+
reader_config: configs/pp_humanseg_lite.yml
3+
4+
TrainConfig:
5+
epochs: 14
6+
eval_iter: 400
7+
learning_rate: 5.0e-03
8+
optim_args:
9+
weight_decay: 0.0005
10+
optimizer: SGD
11+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
batch_size: 128
2+
3+
train_dataset:
4+
type: Dataset
5+
dataset_root: data/humanseg
6+
train_path: data/humanseg/train.txt
7+
num_classes: 2
8+
transforms:
9+
- type: PaddingByAspectRatio
10+
aspect_ratio: 1.77777778
11+
- type: Resize
12+
target_size: [398, 224]
13+
- type: ResizeStepScaling
14+
scale_step_size: 0
15+
- type: RandomRotation
16+
- type: RandomPaddingCrop
17+
crop_size: [398, 224]
18+
- type: RandomHorizontalFlip
19+
- type: RandomDistort
20+
- type: RandomBlur
21+
prob: 0.3
22+
- type: Normalize
23+
mode: train
24+
25+
val_dataset:
26+
type: Dataset
27+
dataset_root: data/humanseg
28+
train_path: data/humanseg/val.txt
29+
num_classes: 2
30+
transforms:
31+
- type: PaddingByAspectRatio
32+
aspect_ratio: 1.77777778
33+
- type: Resize
34+
target_size: [398, 224]
35+
- type: Normalize
36+
mode: val

demo/auto_compression/semantic_segmentation/configs/pp_humanseg_quant_dis.yaml

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,16 @@
1+
Global:
2+
reader_config: configs/pp_humanseg_lite.yml
3+
14
Distillation:
25
distill_lambda: 1.0
36
distill_loss: l2_loss
47
distill_node_pair:
5-
- teacher_reshape2_1.tmp_0
6-
- reshape2_1.tmp_0
7-
- teacher_reshape2_3.tmp_0
8-
- reshape2_3.tmp_0
9-
- teacher_reshape2_5.tmp_0
10-
- reshape2_5.tmp_0
11-
- teacher_reshape2_7.tmp_0 #block1
12-
- reshape2_7.tmp_0
13-
- teacher_reshape2_9.tmp_0
14-
- reshape2_9.tmp_0
15-
- teacher_reshape2_11.tmp_0
16-
- reshape2_11.tmp_0
17-
- teacher_reshape2_13.tmp_0
18-
- reshape2_13.tmp_0
19-
- teacher_reshape2_15.tmp_0
20-
- reshape2_15.tmp_0
21-
- teacher_reshape2_17.tmp_0
22-
- reshape2_17.tmp_0
23-
- teacher_reshape2_19.tmp_0
24-
- reshape2_19.tmp_0
25-
- teacher_reshape2_21.tmp_0
26-
- reshape2_21.tmp_0
27-
- teacher_depthwise_conv2d_14.tmp_0 # block2
28-
- depthwise_conv2d_14.tmp_0
29-
- teacher_depthwise_conv2d_15.tmp_0
30-
- depthwise_conv2d_15.tmp_0
31-
- teacher_reshape2_23.tmp_0 #block3
32-
- reshape2_23.tmp_0
33-
- teacher_relu_30.tmp_0 # final_conv
34-
- relu_30.tmp_0
35-
- teacher_bilinear_interp_v2_1.tmp_0
36-
- bilinear_interp_v2_1.tmp_0
8+
- teacher_batch_norm_47.tmp_2
9+
- batch_norm_47.tmp_2
3710
merge_feed: true
38-
teacher_model_dir: ./inference_model
39-
teacher_model_filename: inference.pdmodel
40-
teacher_params_filename: inference.pdiparams
11+
teacher_model_dir: ./ppseg_lite_portrait_398x224_with_softmax
12+
teacher_model_filename: model.pdmodel
13+
teacher_params_filename: model.pdiparams
4114
Quantization:
4215
activation_bits: 8
4316
is_full_quantize: false

demo/auto_compression/semantic_segmentation/configs/pp_humanseg_sparse_dis.yaml

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,16 @@
1+
Global:
2+
reader_config: configs/pp_humanseg_lite.yml
3+
14
Distillation:
25
distill_lambda: 1.0
36
distill_loss: l2_loss
47
distill_node_pair:
5-
- teacher_reshape2_1.tmp_0
6-
- reshape2_1.tmp_0
7-
- teacher_reshape2_3.tmp_0
8-
- reshape2_3.tmp_0
9-
- teacher_reshape2_5.tmp_0
10-
- reshape2_5.tmp_0
11-
- teacher_reshape2_7.tmp_0 #block1
12-
- reshape2_7.tmp_0
13-
- teacher_reshape2_9.tmp_0
14-
- reshape2_9.tmp_0
15-
- teacher_reshape2_11.tmp_0
16-
- reshape2_11.tmp_0
17-
- teacher_reshape2_13.tmp_0
18-
- reshape2_13.tmp_0
19-
- teacher_reshape2_15.tmp_0
20-
- reshape2_15.tmp_0
21-
- teacher_reshape2_17.tmp_0
22-
- reshape2_17.tmp_0
23-
- teacher_reshape2_19.tmp_0
24-
- reshape2_19.tmp_0
25-
- teacher_reshape2_21.tmp_0
26-
- reshape2_21.tmp_0
27-
- teacher_depthwise_conv2d_14.tmp_0 # block2
28-
- depthwise_conv2d_14.tmp_0
29-
- teacher_depthwise_conv2d_15.tmp_0
30-
- depthwise_conv2d_15.tmp_0
31-
- teacher_reshape2_23.tmp_0 #block1
32-
- reshape2_23.tmp_0
33-
- teacher_relu_30.tmp_0 # final_conv
34-
- relu_30.tmp_0
35-
- teacher_bilinear_interp_v2_1.tmp_0
36-
- bilinear_interp_v2_1.tmp_0
8+
- teacher_batch_norm_47.tmp_2
9+
- batch_norm_47.tmp_2
3710
merge_feed: true
38-
teacher_model_dir: ./inference_model
39-
teacher_model_filename: inference.pdmodel
40-
teacher_params_filename: inference.pdiparams
11+
teacher_model_dir: ./ppseg_lite_portrait_398x224_with_softmax
12+
teacher_model_filename: model.pdmodel
13+
teacher_params_filename: model.pdiparams
4114
UnstructurePrune:
4215
prune_strategy: gmp
4316
prune_mode: ratio

demo/auto_compression/semantic_segmentation/run.py

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,12 @@
33
import random
44
import paddle
55
import numpy as np
6-
import paddleseg.transforms as T
7-
from paddleseg.datasets import Dataset
6+
from paddleseg.cvlibs import Config
87
from paddleseg.utils import worker_init_fn
98
from paddleslim.auto_compression.config_helpers import load_config
109
from paddleslim.auto_compression import AutoCompression
11-
1210
from paddleseg.core.infer import reverse_transform
1311
from paddleseg.utils import metrics
14-
import paddle.nn.functional as F
15-
import cv2
16-
import paddle.fluid as fluid
1712

1813

1914
def parse_args():
@@ -43,6 +38,11 @@ def parse_args():
4338
type=str,
4439
default=None,
4540
help="path of compression strategy config.")
41+
parser.add_argument(
42+
'--deploy_hardware',
43+
type=str,
44+
default=None,
45+
help="The hardware you want to deploy.")
4646
return parser.parse_args()
4747

4848

@@ -65,7 +65,6 @@ def eval_function(exe, compiled_test_program, test_feed_names, test_fetch_list):
6565

6666
print("Start evaluating (total_samples: {}, total_iters: {})...".format(
6767
len(eval_dataset), total_iters))
68-
print("nranks:", nranks)
6968

7069
for iter, (image, label) in enumerate(loader):
7170
paddle.enable_static()
@@ -149,34 +148,22 @@ def gen():
149148

150149
args = parse_args()
151150

152-
transforms = [T.RandomPaddingCrop(crop_size=(512, 512)), T.Normalize()]
153-
train_dataset = Dataset(
154-
transforms=transforms,
155-
dataset_root='dataset_root', # Need to fill in
156-
num_classes=2,
157-
train_path='train_path', # Need to fill in
158-
mode='train')
159-
eval_dataset = Dataset(
160-
transforms=transforms,
161-
dataset_root='dataset_root', # Need to fill in
162-
num_classes=2,
163-
train_path='val_path', # Need to fill in
164-
mode='val')
151+
compress_config, train_config = load_config(args.config_path)
152+
cfg = Config(compress_config['reader_config'])
165153

154+
train_dataset = cfg.train_dataset
155+
eval_dataset = cfg.val_dataset
166156
batch_sampler = paddle.io.DistributedBatchSampler(
167-
train_dataset, batch_size=128, shuffle=True, drop_last=True)
168-
157+
train_dataset, batch_size=cfg.batch_size, shuffle=True, drop_last=True)
169158
train_loader = paddle.io.DataLoader(
170159
train_dataset,
171160
batch_sampler=batch_sampler,
172161
num_workers=2,
173162
return_list=True,
174-
worker_init_fn=worker_init_fn, )
163+
worker_init_fn=worker_init_fn)
175164
train_dataloader = reader_wrapper(train_loader)
176165

177166
# set auto_compression
178-
compress_config, train_config = load_config(args.config_path)
179-
180167
ac = AutoCompression(
181168
model_dir=args.model_dir,
182169
model_filename=args.model_filename,
@@ -185,6 +172,7 @@ def gen():
185172
strategy_config=compress_config,
186173
train_config=train_config,
187174
train_dataloader=train_dataloader,
188-
eval_callback=eval_function)
175+
eval_callback=eval_function,
176+
deploy_hardware=args.deploy_hardware)
189177

190178
ac.compress()

0 commit comments

Comments
 (0)