Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleOCR
提交
0da240d0
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看板
未验证
提交
0da240d0
编写于
9月 23, 2021
作者:
D
Double_V
提交者:
GitHub
9月 23, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #4000 from LDOUBLEV/fix_nonfinite
fix nonfinite and add quant kl
上级
a370476a
edfbb24a
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
206 addition
and
7 deletion
+206
-7
deploy/slim/quantization/quant_kl.py
deploy/slim/quantization/quant_kl.py
+146
-0
tests/configs/det_mv3_db.yml
tests/configs/det_mv3_db.yml
+3
-3
tests/ocr_det_params.txt
tests/ocr_det_params.txt
+3
-3
tests/ocr_kl_quant_params.txt
tests/ocr_kl_quant_params.txt
+51
-0
tests/test.sh
tests/test.sh
+3
-1
未找到文件。
deploy/slim/quantization/quant_kl.py
0 → 100755
浏览文件 @
0da240d0
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
absolute_import
from
__future__
import
division
from
__future__
import
print_function
import
os
import
sys
__dir__
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
__file__
))
sys
.
path
.
append
(
__dir__
)
sys
.
path
.
append
(
os
.
path
.
abspath
(
os
.
path
.
join
(
__dir__
,
'..'
,
'..'
,
'..'
)))
sys
.
path
.
append
(
os
.
path
.
abspath
(
os
.
path
.
join
(
__dir__
,
'..'
,
'..'
,
'..'
,
'tools'
)))
import
yaml
import
paddle
import
paddle.distributed
as
dist
paddle
.
seed
(
2
)
from
ppocr.data
import
build_dataloader
from
ppocr.modeling.architectures
import
build_model
from
ppocr.losses
import
build_loss
from
ppocr.optimizer
import
build_optimizer
from
ppocr.postprocess
import
build_post_process
from
ppocr.metrics
import
build_metric
from
ppocr.utils.save_load
import
init_model
import
tools.program
as
program
import
paddleslim
from
paddleslim.dygraph.quant
import
QAT
import
numpy
as
np
dist
.
get_world_size
()
class
PACT
(
paddle
.
nn
.
Layer
):
def
__init__
(
self
):
super
(
PACT
,
self
).
__init__
()
alpha_attr
=
paddle
.
ParamAttr
(
name
=
self
.
full_name
()
+
".pact"
,
initializer
=
paddle
.
nn
.
initializer
.
Constant
(
value
=
20
),
learning_rate
=
1.0
,
regularizer
=
paddle
.
regularizer
.
L2Decay
(
2e-5
))
self
.
alpha
=
self
.
create_parameter
(
shape
=
[
1
],
attr
=
alpha_attr
,
dtype
=
'float32'
)
def
forward
(
self
,
x
):
out_left
=
paddle
.
nn
.
functional
.
relu
(
x
-
self
.
alpha
)
out_right
=
paddle
.
nn
.
functional
.
relu
(
-
self
.
alpha
-
x
)
x
=
x
-
out_left
+
out_right
return
x
quant_config
=
{
# weight preprocess type, default is None and no preprocessing is performed.
'weight_preprocess_type'
:
None
,
# activation preprocess type, default is None and no preprocessing is performed.
'activation_preprocess_type'
:
None
,
# weight quantize type, default is 'channel_wise_abs_max'
'weight_quantize_type'
:
'channel_wise_abs_max'
,
# activation quantize type, default is 'moving_average_abs_max'
'activation_quantize_type'
:
'moving_average_abs_max'
,
# weight quantize bit num, default is 8
'weight_bits'
:
8
,
# activation quantize bit num, default is 8
'activation_bits'
:
8
,
# data type after quantization, such as 'uint8', 'int8', etc. default is 'int8'
'dtype'
:
'int8'
,
# window size for 'range_abs_max' quantization. default is 10000
'window_size'
:
10000
,
# The decay coefficient of moving average, default is 0.9
'moving_rate'
:
0.9
,
# for dygraph quantization, layers of type in quantizable_layer_type will be quantized
'quantizable_layer_type'
:
[
'Conv2D'
,
'Linear'
],
}
def
sample_generator
(
loader
):
def
__reader__
():
for
indx
,
data
in
enumerate
(
loader
):
images
=
np
.
array
(
data
[
0
])
yield
images
return
__reader__
def
main
(
config
,
device
,
logger
,
vdl_writer
):
# init dist environment
if
config
[
'Global'
][
'distributed'
]:
dist
.
init_parallel_env
()
global_config
=
config
[
'Global'
]
# build dataloader
config
[
'Train'
][
'loader'
][
'num_workers'
]
=
0
train_dataloader
=
build_dataloader
(
config
,
'Train'
,
device
,
logger
)
if
config
[
'Eval'
]:
config
[
'Eval'
][
'loader'
][
'num_workers'
]
=
0
valid_dataloader
=
build_dataloader
(
config
,
'Eval'
,
device
,
logger
)
else
:
valid_dataloader
=
None
paddle
.
enable_static
()
place
=
paddle
.
CPUPlace
()
exe
=
paddle
.
static
.
Executor
(
place
)
if
'inference_model'
in
global_config
.
keys
():
# , 'inference_model'):
inference_model_dir
=
global_config
[
'inference_model'
]
else
:
inference_model_dir
=
os
.
path
.
dirname
(
global_config
[
'pretrained_model'
])
if
not
(
os
.
path
.
exists
(
os
.
path
.
join
(
inference_model_dir
,
"inference.pdmodel"
))
and
\
os
.
path
.
exists
(
os
.
path
.
join
(
inference_model_dir
,
"inference.pdiparams"
))
):
raise
ValueError
(
"Please set inference model dir in Global.inference_model or Global.pretrained_model for post-quantazition"
)
paddleslim
.
quant
.
quant_post_static
(
executor
=
exe
,
model_dir
=
inference_model_dir
,
model_filename
=
'inference.pdmodel'
,
params_filename
=
'inference.pdiparams'
,
quantize_model_path
=
global_config
[
'save_inference_dir'
],
sample_generator
=
sample_generator
(
train_dataloader
),
save_model_filename
=
'inference.pdmodel'
,
save_params_filename
=
'inference.pdiparams'
,
batch_size
=
1
,
batch_nums
=
None
)
if
__name__
==
'__main__'
:
config
,
device
,
logger
,
vdl_writer
=
program
.
preprocess
(
is_train
=
True
)
main
(
config
,
device
,
logger
,
vdl_writer
)
tests/configs/det_mv3_db.yml
浏览文件 @
0da240d0
...
...
@@ -23,10 +23,10 @@ Architecture:
name
:
MobileNetV3
scale
:
0.5
model_name
:
large
disable_se
:
Tru
e
disable_se
:
Fals
e
Neck
:
name
:
DBFPN
out_channels
:
9
6
out_channels
:
25
6
Head
:
name
:
DBHead
k
:
50
...
...
@@ -74,7 +74,7 @@ Train:
channel_first
:
False
-
DetLabelEncode
:
# Class handling label
-
Resize
:
#
size: [640, 640]
size
:
[
640
,
640
]
-
MakeBorderMap
:
shrink_ratio
:
0.4
thresh_min
:
0.3
...
...
tests/ocr_det_params.txt
浏览文件 @
0da240d0
...
...
@@ -12,7 +12,7 @@ train_model_name:latest
train_infer_img_dir:./train_data/icdar2015/text_localization/ch4_test_images/
null:null
##
trainer:norm_train|pact_train
trainer:norm_train|pact_train
|fpgm_train
norm_train:tools/train.py -c tests/configs/det_mv3_db.yml -o Global.pretrained_model=./pretrain_models/MobileNetV3_large_x0_5_pretrained
pact_train:deploy/slim/quantization/quant.py -c tests/configs/det_mv3_db.yml -o
fpgm_train:deploy/slim/prune/sensitivity_anal.py -c tests/configs/det_mv3_db.yml -o Global.pretrained_model=./pretrain_models/det_mv3_db_v2.0_train/best_accuracy
...
...
@@ -21,7 +21,7 @@ null:null
null:null
##
===========================eval_params===========================
eval:
tools/eval.py -c tests/configs/det_mv3_db.yml -o
eval:
null
null:null
##
===========================infer_params===========================
...
...
@@ -35,7 +35,7 @@ export1:null
export2:null
##
train_model:./inference/ch_ppocr_mobile_v2.0_det_train/best_accuracy
infer_export:tools/export_model.py -c configs/det/
det_mv3_db
.yml -o
infer_export:tools/export_model.py -c configs/det/
ch_ppocr_v2.0/ch_det_mv3_db_v2.0
.yml -o
infer_quant:False
inference:tools/infer/predict_det.py
--use_gpu:True|False
...
...
tests/ocr_kl_quant_params.txt
0 → 100644
浏览文件 @
0da240d0
===========================train_params===========================
model_name:ocr_system
python:python3.7
gpu_list:null
Global.use_gpu:null
Global.auto_cast:null
Global.epoch_num:null
Global.save_model_dir:./output/
Train.loader.batch_size_per_card:null
Global.pretrained_model:null
train_model_name:null
train_infer_img_dir:null
null:null
##
trainer:
norm_train:null
pact_train:null
fpgm_train:null
distill_train:null
null:null
null:null
##
===========================eval_params===========================
eval:null
null:null
##
===========================infer_params===========================
Global.save_inference_dir:./output/
Global.pretrained_model:
norm_export:null
quant_export:null
fpgm_export:null
distill_export:null
export1:null
export2:null
##
infer_model:./inference/ch_ppocr_mobile_v2.0_det_infer/
kl_quant:deploy/slim/quantization/quant_kl.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml -o
infer_quant:True
inference:tools/infer/predict_det.py
--use_gpu:TrueFalse
--enable_mkldnn:True|False
--cpu_threads:1|6
--rec_batch_num:1
--use_tensorrt:False|True
--precision:fp32|fp16|int8
--det_model_dir:
--image_dir:./inference/ch_det_data_50/all-sum-510/
--save_log_path:null
--benchmark:True
null:null
tests/test.sh
浏览文件 @
0da240d0
...
...
@@ -433,7 +433,9 @@ if [ ${MODE} = "infer" ]; then
save_infer_dir
=
$(
dirname
$infer_model
)
set_export_weight
=
$(
func_set_params
"
${
export_weight
}
"
"
${
infer_model
}
"
)
set_save_infer_key
=
$(
func_set_params
"
${
save_infer_key
}
"
"
${
save_infer_dir
}
"
)
export_cmd
=
"
${
python
}
${
norm_export
}
${
set_export_weight
}
${
set_save_infer_key
}
"
export_cmd
=
"
${
python
}
${
infer_run_exports
[Count]
}
${
set_export_weight
}
${
set_save_infer_key
}
"
echo
${
infer_run_exports
[Count]
}
echo
$export_cmd
eval
$export_cmd
status_export
=
$?
status_check
$status_export
"
${
export_cmd
}
"
"
${
status_log
}
"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录