Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleOCR
提交
02ae18ab
P
PaddleOCR
项目概览
PaddlePaddle
/
PaddleOCR
大约 1 年 前同步成功
通知
1528
Star
32962
Fork
6643
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
108
列表
看板
标记
里程碑
合并请求
7
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleOCR
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
108
Issue
108
列表
看板
标记
里程碑
合并请求
7
合并请求
7
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
02ae18ab
编写于
9月 24, 2020
作者:
B
baiyfbupt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix quant module
上级
764d8f5f
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
104 addition
and
32 deletion
+104
-32
deploy/slim/prune/pruning_and_finetune.py
deploy/slim/prune/pruning_and_finetune.py
+1
-1
deploy/slim/quantization/quant.py
deploy/slim/quantization/quant.py
+6
-5
tools/program.py
tools/program.py
+97
-26
未找到文件。
deploy/slim/prune/pruning_and_finetune.py
浏览文件 @
02ae18ab
...
@@ -135,7 +135,7 @@ def main():
...
@@ -135,7 +135,7 @@ def main():
if
alg
in
[
'EAST'
,
'DB'
]:
if
alg
in
[
'EAST'
,
'DB'
]:
program
.
train_eval_det_run
(
program
.
train_eval_det_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
,
is_
pruning
=
True
)
config
,
exe
,
train_info_dict
,
eval_info_dict
,
is_
slim
=
"prune"
)
else
:
else
:
program
.
train_eval_rec_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
)
program
.
train_eval_rec_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
)
...
...
deploy/slim/quantization/quant.py
浏览文件 @
02ae18ab
...
@@ -155,14 +155,13 @@ def main():
...
@@ -155,14 +155,13 @@ def main():
act_preprocess_func
=
act_preprocess_func
,
act_preprocess_func
=
act_preprocess_func
,
optimizer_func
=
optimizer_func
,
optimizer_func
=
optimizer_func
,
executor
=
executor
,
executor
=
executor
,
for_test
=
False
,
for_test
=
False
)
return_program
=
True
)
# compile program for multi-devices
# compile program for multi-devices
train_compile_program
=
program
.
create_multi_devices_program
(
train_compile_program
=
program
.
create_multi_devices_program
(
quant_train_program
,
train_opt_loss_name
,
for_quant
=
True
)
quant_train_program
,
train_opt_loss_name
,
for_quant
=
True
)
init_model
(
config
,
quant_
train_program
,
exe
)
init_model
(
config
,
train_program
,
exe
)
train_info_dict
=
{
'compile_program'
:
train_compile_program
,
\
train_info_dict
=
{
'compile_program'
:
train_compile_program
,
\
'train_program'
:
quant_train_program
,
\
'train_program'
:
quant_train_program
,
\
...
@@ -177,9 +176,11 @@ def main():
...
@@ -177,9 +176,11 @@ def main():
'fetch_varname_list'
:
eval_fetch_varname_list
}
'fetch_varname_list'
:
eval_fetch_varname_list
}
if
train_alg_type
==
'det'
:
if
train_alg_type
==
'det'
:
program
.
train_eval_det_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
)
program
.
train_eval_det_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
,
is_slim
=
"quant"
)
else
:
else
:
program
.
train_eval_rec_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
)
program
.
train_eval_rec_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
,
is_slim
=
"quant"
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
...
...
tools/program.py
浏览文件 @
02ae18ab
...
@@ -241,9 +241,11 @@ def create_multi_devices_program(program, loss_var_name, for_quant=False):
...
@@ -241,9 +241,11 @@ def create_multi_devices_program(program, loss_var_name, for_quant=False):
build_strategy
.
enable_inplace
=
True
build_strategy
.
enable_inplace
=
True
if
for_quant
:
if
for_quant
:
build_strategy
.
fuse_all_reduce_ops
=
False
build_strategy
.
fuse_all_reduce_ops
=
False
else
:
program
=
fluid
.
CompiledProgram
(
program
)
exec_strategy
=
fluid
.
ExecutionStrategy
()
exec_strategy
=
fluid
.
ExecutionStrategy
()
exec_strategy
.
num_iteration_per_drop_scope
=
1
exec_strategy
.
num_iteration_per_drop_scope
=
1
compile_program
=
fluid
.
CompiledProgram
(
program
)
.
with_data_parallel
(
compile_program
=
program
.
with_data_parallel
(
loss_name
=
loss_var_name
,
loss_name
=
loss_var_name
,
build_strategy
=
build_strategy
,
build_strategy
=
build_strategy
,
exec_strategy
=
exec_strategy
)
exec_strategy
=
exec_strategy
)
...
@@ -254,7 +256,7 @@ def train_eval_det_run(config,
...
@@ -254,7 +256,7 @@ def train_eval_det_run(config,
exe
,
exe
,
train_info_dict
,
train_info_dict
,
eval_info_dict
,
eval_info_dict
,
is_
pruning
=
Fals
e
):
is_
slim
=
Non
e
):
'''
'''
main program of evaluation for detection
main program of evaluation for detection
'''
'''
...
@@ -313,14 +315,17 @@ def train_eval_det_run(config,
...
@@ -313,14 +315,17 @@ def train_eval_det_run(config,
best_batch_id
=
train_batch_id
best_batch_id
=
train_batch_id
best_epoch
=
epoch
best_epoch
=
epoch
save_path
=
save_model_dir
+
"/best_accuracy"
save_path
=
save_model_dir
+
"/best_accuracy"
if
is_pruning
:
if
is_slim
is
None
:
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
else
:
import
paddleslim
as
slim
import
paddleslim
as
slim
if
is_slim
==
"prune"
:
slim
.
prune
.
save_model
(
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
exe
,
train_info_dict
[
'train_program'
],
save_path
)
save_path
)
else
:
elif
is_slim
==
"quant"
:
save_model
(
train_info_dict
[
'train_program'
],
save_model
(
eval_info_dict
[
'program'
],
save_path
)
save_path
)
strs
=
'Test iter: {}, metrics:{}, best_hmean:{:.6f}, best_epoch:{}, best_batch_id:{}'
.
format
(
strs
=
'Test iter: {}, metrics:{}, best_hmean:{:.6f}, best_epoch:{}, best_batch_id:{}'
.
format
(
train_batch_id
,
metrics
,
best_eval_hmean
,
best_epoch
,
train_batch_id
,
metrics
,
best_eval_hmean
,
best_epoch
,
best_batch_id
)
best_batch_id
)
...
@@ -331,24 +336,34 @@ def train_eval_det_run(config,
...
@@ -331,24 +336,34 @@ def train_eval_det_run(config,
train_loader
.
reset
()
train_loader
.
reset
()
if
epoch
==
0
and
save_epoch_step
==
1
:
if
epoch
==
0
and
save_epoch_step
==
1
:
save_path
=
save_model_dir
+
"/iter_epoch_0"
save_path
=
save_model_dir
+
"/iter_epoch_0"
if
is_pruning
:
if
is_slim
is
None
:
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
else
:
import
paddleslim
as
slim
import
paddleslim
as
slim
if
is_slim
==
"prune"
:
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
save_path
)
save_path
)
else
:
elif
is_slim
==
"quant"
:
save_model
(
train_info_dict
[
'train_
program'
],
save_path
)
save_model
(
eval_info_dict
[
'
program'
],
save_path
)
if
epoch
>
0
and
epoch
%
save_epoch_step
==
0
:
if
epoch
>
0
and
epoch
%
save_epoch_step
==
0
:
save_path
=
save_model_dir
+
"/iter_epoch_%d"
%
(
epoch
)
save_path
=
save_model_dir
+
"/iter_epoch_%d"
%
(
epoch
)
if
is_pruning
:
if
is_slim
is
None
:
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
else
:
import
paddleslim
as
slim
import
paddleslim
as
slim
if
is_slim
==
"prune"
:
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
save_path
)
save_path
)
else
:
elif
is_slim
==
"quant"
:
save_model
(
train_info_dict
[
'train_
program'
],
save_path
)
save_model
(
eval_info_dict
[
'
program'
],
save_path
)
return
return
def
train_eval_rec_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
):
def
train_eval_rec_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
,
is_slim
=
None
):
'''
'''
main program of evaluation for recognition
main program of evaluation for recognition
'''
'''
...
@@ -428,7 +443,17 @@ def train_eval_rec_run(config, exe, train_info_dict, eval_info_dict):
...
@@ -428,7 +443,17 @@ def train_eval_rec_run(config, exe, train_info_dict, eval_info_dict):
best_batch_id
=
train_batch_id
best_batch_id
=
train_batch_id
best_epoch
=
epoch
best_epoch
=
epoch
save_path
=
save_model_dir
+
"/best_accuracy"
save_path
=
save_model_dir
+
"/best_accuracy"
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
if
is_slim
is
None
:
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
else
:
import
paddleslim
as
slim
if
is_slim
==
"prune"
:
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
save_path
)
elif
is_slim
==
"quant"
:
save_model
(
eval_info_dict
[
'program'
],
save_path
)
strs
=
'Test iter: {}, acc:{:.6f}, best_acc:{:.6f}, best_epoch:{}, best_batch_id:{}, eval_sample_num:{}'
.
format
(
strs
=
'Test iter: {}, acc:{:.6f}, best_acc:{:.6f}, best_epoch:{}, best_batch_id:{}, eval_sample_num:{}'
.
format
(
train_batch_id
,
eval_acc
,
best_eval_acc
,
best_epoch
,
train_batch_id
,
eval_acc
,
best_eval_acc
,
best_epoch
,
best_batch_id
,
eval_sample_num
)
best_batch_id
,
eval_sample_num
)
...
@@ -439,14 +464,34 @@ def train_eval_rec_run(config, exe, train_info_dict, eval_info_dict):
...
@@ -439,14 +464,34 @@ def train_eval_rec_run(config, exe, train_info_dict, eval_info_dict):
train_loader
.
reset
()
train_loader
.
reset
()
if
epoch
==
0
and
save_epoch_step
==
1
:
if
epoch
==
0
and
save_epoch_step
==
1
:
save_path
=
save_model_dir
+
"/iter_epoch_0"
save_path
=
save_model_dir
+
"/iter_epoch_0"
if
is_slim
is
None
:
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
else
:
import
paddleslim
as
slim
if
is_slim
==
"prune"
:
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
save_path
)
elif
is_slim
==
"quant"
:
save_model
(
eval_info_dict
[
'program'
],
save_path
)
if
epoch
>
0
and
epoch
%
save_epoch_step
==
0
:
if
epoch
>
0
and
epoch
%
save_epoch_step
==
0
:
save_path
=
save_model_dir
+
"/iter_epoch_%d"
%
(
epoch
)
save_path
=
save_model_dir
+
"/iter_epoch_%d"
%
(
epoch
)
if
is_slim
is
None
:
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
else
:
import
paddleslim
as
slim
if
is_slim
==
"prune"
:
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
save_path
)
elif
is_slim
==
"quant"
:
save_model
(
eval_info_dict
[
'program'
],
save_path
)
return
return
def
train_eval_cls_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
):
def
train_eval_cls_run
(
config
,
exe
,
train_info_dict
,
eval_info_dict
,
is_slim
=
None
):
train_batch_id
=
0
train_batch_id
=
0
log_smooth_window
=
config
[
'Global'
][
'log_smooth_window'
]
log_smooth_window
=
config
[
'Global'
][
'log_smooth_window'
]
epoch_num
=
config
[
'Global'
][
'epoch_num'
]
epoch_num
=
config
[
'Global'
][
'epoch_num'
]
...
@@ -509,7 +554,17 @@ def train_eval_cls_run(config, exe, train_info_dict, eval_info_dict):
...
@@ -509,7 +554,17 @@ def train_eval_cls_run(config, exe, train_info_dict, eval_info_dict):
best_batch_id
=
train_batch_id
best_batch_id
=
train_batch_id
best_epoch
=
epoch
best_epoch
=
epoch
save_path
=
save_model_dir
+
"/best_accuracy"
save_path
=
save_model_dir
+
"/best_accuracy"
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
if
is_slim
is
None
:
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
else
:
import
paddleslim
as
slim
if
is_slim
==
"prune"
:
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
save_path
)
elif
is_slim
==
"quant"
:
save_model
(
eval_info_dict
[
'program'
],
save_path
)
strs
=
'Test iter: {}, acc:{:.6f}, best_acc:{:.6f}, best_epoch:{}, best_batch_id:{}, eval_sample_num:{}'
.
format
(
strs
=
'Test iter: {}, acc:{:.6f}, best_acc:{:.6f}, best_epoch:{}, best_batch_id:{}, eval_sample_num:{}'
.
format
(
train_batch_id
,
eval_acc
,
best_eval_acc
,
best_epoch
,
train_batch_id
,
eval_acc
,
best_eval_acc
,
best_epoch
,
best_batch_id
,
eval_sample_num
)
best_batch_id
,
eval_sample_num
)
...
@@ -520,10 +575,26 @@ def train_eval_cls_run(config, exe, train_info_dict, eval_info_dict):
...
@@ -520,10 +575,26 @@ def train_eval_cls_run(config, exe, train_info_dict, eval_info_dict):
train_loader
.
reset
()
train_loader
.
reset
()
if
epoch
==
0
and
save_epoch_step
==
1
:
if
epoch
==
0
and
save_epoch_step
==
1
:
save_path
=
save_model_dir
+
"/iter_epoch_0"
save_path
=
save_model_dir
+
"/iter_epoch_0"
if
is_slim
is
None
:
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
else
:
import
paddleslim
as
slim
if
is_slim
==
"prune"
:
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
save_path
)
elif
is_slim
==
"quant"
:
save_model
(
eval_info_dict
[
'program'
],
save_path
)
if
epoch
>
0
and
epoch
%
save_epoch_step
==
0
:
if
epoch
>
0
and
epoch
%
save_epoch_step
==
0
:
save_path
=
save_model_dir
+
"/iter_epoch_%d"
%
(
epoch
)
save_path
=
save_model_dir
+
"/iter_epoch_%d"
%
(
epoch
)
if
is_slim
is
None
:
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
save_model
(
train_info_dict
[
'train_program'
],
save_path
)
else
:
import
paddleslim
as
slim
if
is_slim
==
"prune"
:
slim
.
prune
.
save_model
(
exe
,
train_info_dict
[
'train_program'
],
save_path
)
elif
is_slim
==
"quant"
:
save_model
(
eval_info_dict
[
'program'
],
save_path
)
return
return
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录