Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
wangsen
paddle_dbnet
Commits
03bb378f
Commit
03bb378f
authored
Nov 25, 2021
by
LDOUBLEV
Browse files
fix TRT8 core bug
parents
a2a12fe4
2e9abcb9
Changes
207
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
371 additions
and
147 deletions
+371
-147
deploy/paddle2onnx/readme.md
deploy/paddle2onnx/readme.md
+76
-0
deploy/pdserving/README.md
deploy/pdserving/README.md
+1
-1
deploy/pdserving/README_CN.md
deploy/pdserving/README_CN.md
+2
-2
deploy/pdserving/ocr_cpp_client.py
deploy/pdserving/ocr_cpp_client.py
+56
-0
deploy/pdserving/pipeline_http_client.py
deploy/pdserving/pipeline_http_client.py
+7
-2
deploy/pdserving/pipeline_rpc_client.py
deploy/pdserving/pipeline_rpc_client.py
+9
-4
deploy/slim/prune/export_prune_model.py
deploy/slim/prune/export_prune_model.py
+2
-2
deploy/slim/prune/sensitivity_anal.py
deploy/slim/prune/sensitivity_anal.py
+2
-2
deploy/slim/quantization/export_model.py
deploy/slim/quantization/export_model.py
+2
-2
deploy/slim/quantization/quant.py
deploy/slim/quantization/quant.py
+2
-2
deploy/slim/quantization/quant_kl.py
deploy/slim/quantization/quant_kl.py
+1
-1
doc/banner.png
doc/banner.png
+0
-0
doc/doc_ch/algorithm_overview.md
doc/doc_ch/algorithm_overview.md
+59
-43
doc/doc_ch/angle_class.md
doc/doc_ch/angle_class.md
+1
-3
doc/doc_ch/config.md
doc/doc_ch/config.md
+9
-9
doc/doc_ch/detection.md
doc/doc_ch/detection.md
+51
-29
doc/doc_ch/inference_ppocr.md
doc/doc_ch/inference_ppocr.md
+20
-22
doc/doc_ch/models.md
doc/doc_ch/models.md
+47
-0
doc/doc_ch/models_list.md
doc/doc_ch/models_list.md
+20
-19
doc/doc_ch/pgnet.md
doc/doc_ch/pgnet.md
+4
-4
No files found.
deploy/paddle2onnx/readme.md
0 → 100644
View file @
03bb378f
# paddle2onnx 模型转化与预测
本章节介绍 PaddleOCR 模型如何转化为 ONNX 模型,并基于 ONNX 引擎预测。
## 1. 环境准备
需要准备 Paddle2ONNX 模型转化环境,和 ONNX 模型预测环境
### Paddle2ONNX
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式,算子目前稳定支持导出 ONNX Opset 9~11,部分Paddle算子支持更低的ONNX Opset转换。
更多细节可参考
[
Paddle2ONNX
](
https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/README_zh.md
)
-
安装 Paddle2ONNX
```
python3.7 -m pip install paddle2onnx
```
-
安装 ONNX
```
# 建议安装 1.4.0 版本,可根据环境更换版本号
python3.7 -m pip install onnxruntime==1.4.0
```
## 2. 模型转换
-
Paddle 模型下载
有两种方式获取Paddle静态图模型:在
[
model_list
](
../../doc/doc_ch/models_list.md
)
中下载PaddleOCR提供的预测模型;
参考
[
模型导出说明
](
../../doc/doc_ch/inference.md#训练模型转inference模型
)
把训练好的权重转为 inference_model。
以 ppocr 检测模型为例:
```
wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar
cd ./inference && tar xf ch_ppocr_mobile_v2.0_det_infer.tar && cd ..
```
-
模型转换
使用 Paddle2ONNX 将Paddle静态图模型转换为ONNX模型格式:
```
paddle2onnx --model_dir=./inference/ch_ppocr_mobile_v2.0_det_infer/ \
--model_filename=inference.pdmodel \
--params_filename=inference.pdiparams \
--save_file=./inference/det_mobile_onnx/model.onnx \
--opset_version=10 \
--enable_onnx_checker=True
```
执行完毕后,ONNX 模型会被保存在
`./inference/det_mobile_onnx/`
路径下
*
注意:以下几个模型暂不支持转换为 ONNX 模型:
NRTR、SAR、RARE、SRN
## 3. onnx 预测
以检测模型为例,使用 ONNX 预测可执行如下命令:
```
python3.7 ../../tools/infer/predict_det.py --use_gpu=False --use_onnx=True \
--det_model_dir=./inference/det_mobile_onnx/model.onnx \
--image_dir=../../doc/imgs/1.jpg
```
执行命令后在终端会打印出预测的检测框坐标,并在
`./inference_results/`
下保存可视化结果。
```
root INFO: 1.jpg [[[291, 295], [334, 292], [348, 844], [305, 847]], [[344, 296], [379, 294], [387, 669], [353, 671]]]
The predict time of ../../doc/imgs/1.jpg: 0.06162881851196289
The visualized image saved in ./inference_results/det_res_1.jpg
```
*
注意:ONNX暂时不支持变长预测,需要将输入resize到固定输入,预测结果可能与直接使用Paddle预测有细微不同。
deploy/pdserving/README.md
View file @
03bb378f
...
@@ -114,7 +114,7 @@ The recognition model is the same.
...
@@ -114,7 +114,7 @@ The recognition model is the same.
git clone https://github.com/PaddlePaddle/PaddleOCR
git clone https://github.com/PaddlePaddle/PaddleOCR
# Enter the working directory
# Enter the working directory
cd PaddleOCR/deploy/pdserv
er
/
cd PaddleOCR/deploy/pdserv
ing
/
```
```
The pdserver directory contains the code to start the pipeline service and send prediction requests, including:
The pdserver directory contains the code to start the pipeline service and send prediction requests, including:
...
...
deploy/pdserving/README_CN.md
View file @
03bb378f
...
@@ -112,7 +112,7 @@ python3 -m paddle_serving_client.convert --dirname ./ch_ppocr_mobile_v2.0_rec_in
...
@@ -112,7 +112,7 @@ python3 -m paddle_serving_client.convert --dirname ./ch_ppocr_mobile_v2.0_rec_in
git clone https://github.com/PaddlePaddle/PaddleOCR
git clone https://github.com/PaddlePaddle/PaddleOCR
# 进入到工作目录
# 进入到工作目录
cd PaddleOCR/deploy/pdserv
er
/
cd PaddleOCR/deploy/pdserv
ing
/
```
```
pdserver目录包含启动pipeline服务和发送预测请求的代码,包括:
pdserver目录包含启动pipeline服务和发送预测请求的代码,包括:
```
```
...
...
deploy/pdserving/ocr_cpp_client.py
0 → 100755
View file @
03bb378f
# 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.
# pylint: disable=doc-string-missing
from
paddle_serving_client
import
Client
import
sys
import
numpy
as
np
import
base64
import
os
import
cv2
from
paddle_serving_app.reader
import
Sequential
,
URL2Image
,
ResizeByFactor
from
paddle_serving_app.reader
import
Div
,
Normalize
,
Transpose
from
ocr_reader
import
OCRReader
client
=
Client
()
# TODO:load_client need to load more than one client model.
# this need to figure out some details.
client
.
load_client_config
(
sys
.
argv
[
1
:])
client
.
connect
([
"127.0.0.1:9293"
])
import
paddle
test_img_dir
=
"test_img/"
ocr_reader
=
OCRReader
(
char_dict_path
=
"../../ppocr/utils/ppocr_keys_v1.txt"
)
def
cv2_to_base64
(
image
):
return
base64
.
b64encode
(
image
).
decode
(
'utf8'
)
#data.tostring()).decode('utf8')
for
img_file
in
os
.
listdir
(
test_img_dir
):
with
open
(
os
.
path
.
join
(
test_img_dir
,
img_file
),
'rb'
)
as
file
:
image_data
=
file
.
read
()
image
=
cv2_to_base64
(
image_data
)
res_list
=
[]
#print(image)
fetch_map
=
client
.
predict
(
feed
=
{
"x"
:
image
},
fetch
=
[
"save_infer_model/scale_0.tmp_1"
],
batch
=
True
)
print
(
"fetrch map:"
,
fetch_map
)
one_batch_res
=
ocr_reader
.
postprocess
(
fetch_map
,
with_score
=
True
)
for
res
in
one_batch_res
:
res_list
.
append
(
res
[
0
])
res
=
{
"res"
:
str
(
res_list
)}
print
(
res
)
deploy/pdserving/pipeline_http_client.py
View file @
03bb378f
...
@@ -18,13 +18,19 @@ import json
...
@@ -18,13 +18,19 @@ import json
import
base64
import
base64
import
os
import
os
import
argparse
parser
=
argparse
.
ArgumentParser
(
description
=
"args for paddleserving"
)
parser
.
add_argument
(
"--image_dir"
,
type
=
str
,
default
=
"../../doc/imgs/"
)
args
=
parser
.
parse_args
()
def
cv2_to_base64
(
image
):
def
cv2_to_base64
(
image
):
return
base64
.
b64encode
(
image
).
decode
(
'utf8'
)
return
base64
.
b64encode
(
image
).
decode
(
'utf8'
)
url
=
"http://127.0.0.1:9998/ocr/prediction"
url
=
"http://127.0.0.1:9998/ocr/prediction"
test_img_dir
=
"../../doc/imgs/"
test_img_dir
=
args
.
image_dir
for
idx
,
img_file
in
enumerate
(
os
.
listdir
(
test_img_dir
)):
for
idx
,
img_file
in
enumerate
(
os
.
listdir
(
test_img_dir
)):
with
open
(
os
.
path
.
join
(
test_img_dir
,
img_file
),
'rb'
)
as
file
:
with
open
(
os
.
path
.
join
(
test_img_dir
,
img_file
),
'rb'
)
as
file
:
image_data1
=
file
.
read
()
image_data1
=
file
.
read
()
...
@@ -36,5 +42,4 @@ for idx, img_file in enumerate(os.listdir(test_img_dir)):
...
@@ -36,5 +42,4 @@ for idx, img_file in enumerate(os.listdir(test_img_dir)):
r
=
requests
.
post
(
url
=
url
,
data
=
json
.
dumps
(
data
))
r
=
requests
.
post
(
url
=
url
,
data
=
json
.
dumps
(
data
))
print
(
r
.
json
())
print
(
r
.
json
())
test_img_dir
=
"../../doc/imgs/"
print
(
"==> total number of test imgs: "
,
len
(
os
.
listdir
(
test_img_dir
)))
print
(
"==> total number of test imgs: "
,
len
(
os
.
listdir
(
test_img_dir
)))
deploy/pdserving/pipeline_rpc_client.py
View file @
03bb378f
...
@@ -30,12 +30,17 @@ def cv2_to_base64(image):
...
@@ -30,12 +30,17 @@ def cv2_to_base64(image):
return
base64
.
b64encode
(
image
).
decode
(
'utf8'
)
return
base64
.
b64encode
(
image
).
decode
(
'utf8'
)
test_img_dir
=
"imgs/"
import
argparse
parser
=
argparse
.
ArgumentParser
(
description
=
"args for paddleserving"
)
parser
.
add_argument
(
"--image_dir"
,
type
=
str
,
default
=
"../../doc/imgs/"
)
args
=
parser
.
parse_args
()
test_img_dir
=
args
.
image_dir
for
img_file
in
os
.
listdir
(
test_img_dir
):
for
img_file
in
os
.
listdir
(
test_img_dir
):
with
open
(
os
.
path
.
join
(
test_img_dir
,
img_file
),
'rb'
)
as
file
:
with
open
(
os
.
path
.
join
(
test_img_dir
,
img_file
),
'rb'
)
as
file
:
image_data
=
file
.
read
()
image_data
=
file
.
read
()
image
=
cv2_to_base64
(
image_data
)
image
=
cv2_to_base64
(
image_data
)
for
i
in
range
(
1
):
for
i
in
range
(
1
):
ret
=
client
.
predict
(
feed_dict
=
{
"image"
:
image
},
fetch
=
[
"res"
])
ret
=
client
.
predict
(
feed_dict
=
{
"image"
:
image
},
fetch
=
[
"res"
])
print
(
ret
)
print
(
ret
)
deploy/slim/prune/export_prune_model.py
View file @
03bb378f
...
@@ -30,7 +30,7 @@ from ppocr.modeling.architectures import build_model
...
@@ -30,7 +30,7 @@ from ppocr.modeling.architectures import build_model
from
ppocr.postprocess
import
build_post_process
from
ppocr.postprocess
import
build_post_process
from
ppocr.metrics
import
build_metric
from
ppocr.metrics
import
build_metric
from
ppocr.utils.save_load
import
init
_model
from
ppocr.utils.save_load
import
load
_model
import
tools.program
as
program
import
tools.program
as
program
...
@@ -89,7 +89,7 @@ def main(config, device, logger, vdl_writer):
...
@@ -89,7 +89,7 @@ def main(config, device, logger, vdl_writer):
logger
.
info
(
f
"FLOPs after pruning:
{
flops
}
"
)
logger
.
info
(
f
"FLOPs after pruning:
{
flops
}
"
)
# load pretrain model
# load pretrain model
pre_best_model_dict
=
init
_model
(
config
,
model
,
logger
,
None
)
load
_model
(
config
,
model
)
metric
=
program
.
eval
(
model
,
valid_dataloader
,
post_process_class
,
metric
=
program
.
eval
(
model
,
valid_dataloader
,
post_process_class
,
eval_class
)
eval_class
)
logger
.
info
(
f
"metric['hmean']:
{
metric
[
'hmean'
]
}
"
)
logger
.
info
(
f
"metric['hmean']:
{
metric
[
'hmean'
]
}
"
)
...
...
deploy/slim/prune/sensitivity_anal.py
View file @
03bb378f
...
@@ -32,7 +32,7 @@ from ppocr.losses import build_loss
...
@@ -32,7 +32,7 @@ from ppocr.losses import build_loss
from
ppocr.optimizer
import
build_optimizer
from
ppocr.optimizer
import
build_optimizer
from
ppocr.postprocess
import
build_post_process
from
ppocr.postprocess
import
build_post_process
from
ppocr.metrics
import
build_metric
from
ppocr.metrics
import
build_metric
from
ppocr.utils.save_load
import
init
_model
from
ppocr.utils.save_load
import
load
_model
import
tools.program
as
program
import
tools.program
as
program
dist
.
get_world_size
()
dist
.
get_world_size
()
...
@@ -94,7 +94,7 @@ def main(config, device, logger, vdl_writer):
...
@@ -94,7 +94,7 @@ def main(config, device, logger, vdl_writer):
# build metric
# build metric
eval_class
=
build_metric
(
config
[
'Metric'
])
eval_class
=
build_metric
(
config
[
'Metric'
])
# load pretrain model
# load pretrain model
pre_best_model_dict
=
init
_model
(
config
,
model
,
logger
,
optimizer
)
pre_best_model_dict
=
load
_model
(
config
,
model
,
optimizer
)
logger
.
info
(
'train dataloader has {} iters, valid dataloader has {} iters'
.
logger
.
info
(
'train dataloader has {} iters, valid dataloader has {} iters'
.
format
(
len
(
train_dataloader
),
len
(
valid_dataloader
)))
format
(
len
(
train_dataloader
),
len
(
valid_dataloader
)))
...
...
deploy/slim/quantization/export_model.py
View file @
03bb378f
...
@@ -28,7 +28,7 @@ from paddle.jit import to_static
...
@@ -28,7 +28,7 @@ from paddle.jit import to_static
from
ppocr.modeling.architectures
import
build_model
from
ppocr.modeling.architectures
import
build_model
from
ppocr.postprocess
import
build_post_process
from
ppocr.postprocess
import
build_post_process
from
ppocr.utils.save_load
import
init
_model
from
ppocr.utils.save_load
import
load
_model
from
ppocr.utils.logging
import
get_logger
from
ppocr.utils.logging
import
get_logger
from
tools.program
import
load_config
,
merge_config
,
ArgsParser
from
tools.program
import
load_config
,
merge_config
,
ArgsParser
from
ppocr.metrics
import
build_metric
from
ppocr.metrics
import
build_metric
...
@@ -101,7 +101,7 @@ def main():
...
@@ -101,7 +101,7 @@ def main():
quanter
=
QAT
(
config
=
quant_config
)
quanter
=
QAT
(
config
=
quant_config
)
quanter
.
quantize
(
model
)
quanter
.
quantize
(
model
)
init
_model
(
config
,
model
)
load
_model
(
config
,
model
)
model
.
eval
()
model
.
eval
()
# build metric
# build metric
...
...
deploy/slim/quantization/quant.py
View file @
03bb378f
...
@@ -37,7 +37,7 @@ from ppocr.losses import build_loss
...
@@ -37,7 +37,7 @@ from ppocr.losses import build_loss
from
ppocr.optimizer
import
build_optimizer
from
ppocr.optimizer
import
build_optimizer
from
ppocr.postprocess
import
build_post_process
from
ppocr.postprocess
import
build_post_process
from
ppocr.metrics
import
build_metric
from
ppocr.metrics
import
build_metric
from
ppocr.utils.save_load
import
init
_model
from
ppocr.utils.save_load
import
load
_model
import
tools.program
as
program
import
tools.program
as
program
from
paddleslim.dygraph.quant
import
QAT
from
paddleslim.dygraph.quant
import
QAT
...
@@ -137,7 +137,7 @@ def main(config, device, logger, vdl_writer):
...
@@ -137,7 +137,7 @@ def main(config, device, logger, vdl_writer):
# build metric
# build metric
eval_class
=
build_metric
(
config
[
'Metric'
])
eval_class
=
build_metric
(
config
[
'Metric'
])
# load pretrain model
# load pretrain model
pre_best_model_dict
=
init
_model
(
config
,
model
,
logger
,
optimizer
)
pre_best_model_dict
=
load
_model
(
config
,
model
,
optimizer
)
logger
.
info
(
'train dataloader has {} iters, valid dataloader has {} iters'
.
logger
.
info
(
'train dataloader has {} iters, valid dataloader has {} iters'
.
format
(
len
(
train_dataloader
),
len
(
valid_dataloader
)))
format
(
len
(
train_dataloader
),
len
(
valid_dataloader
)))
...
...
deploy/slim/quantization/quant_kl.py
View file @
03bb378f
...
@@ -37,7 +37,7 @@ from ppocr.losses import build_loss
...
@@ -37,7 +37,7 @@ from ppocr.losses import build_loss
from
ppocr.optimizer
import
build_optimizer
from
ppocr.optimizer
import
build_optimizer
from
ppocr.postprocess
import
build_post_process
from
ppocr.postprocess
import
build_post_process
from
ppocr.metrics
import
build_metric
from
ppocr.metrics
import
build_metric
from
ppocr.utils.save_load
import
init
_model
from
ppocr.utils.save_load
import
load
_model
import
tools.program
as
program
import
tools.program
as
program
import
paddleslim
import
paddleslim
from
paddleslim.dygraph.quant
import
QAT
from
paddleslim.dygraph.quant
import
QAT
...
...
doc/banner.png
0 → 100644
View file @
03bb378f
138 KB
doc/doc_ch/algorithm_overview.md
View file @
03bb378f
<a
name=
"算法介绍"
></a>
# 两阶段算法
## 算法介绍
-
[
两阶段算法
](
#-----
)
*
[
1. 算法介绍
](
#1
)
+
[
1.1 文本检测算法
](
#11
)
+
[
1.2 文本识别算法
](
#12
)
*
[
2. 模型训练
](
#2
)
*
[
3. 模型推理
](
#3
)
<a
name=
"1"
></a>
## 1. 算法介绍
本文给出了PaddleOCR已支持的文本检测算法和文本识别算法列表,以及每个算法在
**英文公开数据集**
上的模型和指标,主要用于算法简介和算法性能对比,更多包括中文在内的其他数据集上的模型请参考
[
PP-OCR v2.0 系列模型下载
](
./models_list.md
)
。
本文给出了PaddleOCR已支持的文本检测算法和文本识别算法列表,以及每个算法在
**英文公开数据集**
上的模型和指标,主要用于算法简介和算法性能对比,更多包括中文在内的其他数据集上的模型请参考
[
PP-OCR v2.0 系列模型下载
](
./models_list.md
)
。
-
[
1.文本检测算法
](
#文本检测算法
)
<a
name=
"11"
></a>
-
[
2.文本识别算法
](
#文本识别算法
)
<a
name=
"文本检测算法"
></a>
### 1.1 文本检测算法
### 1.文本检测算法
PaddleOCR开源的文本检测算法列表:
PaddleOCR开源的文本检测算法列表:
-
[
x] DB([paper
](
https://arxiv.org/abs/1911.08947
)
)(ppocr推荐)
-
[
x] DB([paper
](
https://arxiv.org/abs/1911.08947
)
)
[2]
(ppocr推荐)
-
[
x] EAST([paper
](
https://arxiv.org/abs/1704.03155
)
)
-
[
x] EAST([paper
](
https://arxiv.org/abs/1704.03155
)
)
[1]
-
[
x] SAST([paper
](
https://arxiv.org/abs/1908.05498
)
)
-
[
x] SAST([paper
](
https://arxiv.org/abs/1908.05498
)
)
[4]
-
[
x] PSENet([paper
](
https://arxiv.org/abs/1903.12473v2
)
)
-
[
x] PSENet([paper
](
https://arxiv.org/abs/1903.12473v2
)
)
在ICDAR2015文本检测公开数据集上,算法效果如下:
在ICDAR2015文本检测公开数据集上,算法效果如下:
|模型|骨干网络|precision|recall|Hmean|下载链接|
|模型|骨干网络|precision|recall|Hmean|下载链接|
| --- | --- | --- | --- | --- | --- |
| --- | --- | --- | --- | --- | --- |
|EAST|ResNet50_vd|85.80%|86.71%|86.25%|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_east_v2.0_train.tar
)
|
|EAST|ResNet50_vd|85.80%|86.71%|86.25%|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_east_v2.0_train.tar
)
|
|EAST|MobileNetV3|79.42%|80.64%|80.03%|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_mv3_east_v2.0_train.tar
)
|
|EAST|MobileNetV3|79.42%|80.64%|80.03%|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_mv3_east_v2.0_train.tar
)
|
|DB|ResNet50_vd|86.41%|78.72%|82.38%|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_db_v2.0_train.tar
)
|
|DB|ResNet50_vd|86.41%|78.72%|82.38%|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_db_v2.0_train.tar
)
|
|DB|MobileNetV3|77.29%|73.08%|75.12%|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_mv3_db_v2.0_train.tar
)
|
|DB|MobileNetV3|77.29%|73.08%|75.12%|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_mv3_db_v2.0_train.tar
)
|
|SAST|ResNet50_vd|91.39%|83.77%|87.42%|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_sast_icdar15_v2.0_train.tar
)
|
|SAST|ResNet50_vd|91.39%|83.77%|87.42%|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_sast_icdar15_v2.0_train.tar
)
|
|PSE|ResNet50_vd|85.81%|79.53%|82.55%|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.1/en_det/det_r50_vd_pse_v2.0_train.tar
)
|
|PSE|ResNet50_vd|85.81%|79.53%|82.55%|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.1/en_det/det_r50_vd_pse_v2.0_train.tar
)
|
|PSE|MobileNetV3|82.20%|70.48%|75.89%|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.1/en_det/det_mv3_pse_v2.0_train.tar
)
|
|PSE|MobileNetV3|82.20%|70.48%|75.89%|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.1/en_det/det_mv3_pse_v2.0_train.tar
)
|
在Total-text文本检测公开数据集上,算法效果如下:
在Total-text文本检测公开数据集上,算法效果如下:
|模型|骨干网络|precision|recall|Hmean|下载链接|
|模型|骨干网络|precision|recall|Hmean|下载链接|
| --- | --- | --- | --- | --- | --- |
| --- | --- | --- | --- | --- | --- |
|SAST|ResNet50_vd|89.63%|78.44%|83.66%|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_sast_totaltext_v2.0_train.tar
)
|
|SAST|ResNet50_vd|89.63%|78.44%|83.66%|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_sast_totaltext_v2.0_train.tar
)
|
**说明:**
SAST模型训练额外加入了icdar2013、icdar2017、COCO-Text、ArT等公开数据集进行调优。PaddleOCR用到的经过整理格式的英文公开数据集下载:
**说明:**
SAST模型训练额外加入了icdar2013、icdar2017、COCO-Text、ArT等公开数据集进行调优。PaddleOCR用到的经过整理格式的英文公开数据集下载:
*
[
百度云地址
](
https://pan.baidu.com/s/12cPnZcVuV1zn5DOd4mqjVw
)
(
提取码:
2bpi)
*
[
百度云地址
](
https://pan.baidu.com/s/12cPnZcVuV1zn5DOd4mqjVw
)
(
提取码:
2bpi)
*
[
Google Drive下载地址
](
https://drive.google.com/drive/folders/1ll2-XEVyCQLpJjawLDiRlvo_i4BqHCJe?usp=sharing
)
*
[
Google Drive下载地址
](
https://drive.google.com/drive/folders/1ll2-XEVyCQLpJjawLDiRlvo_i4BqHCJe?usp=sharing
)
PaddleOCR文本检测算法的训练和使用请参考文档教程中
[
模型训练/评估中的文本检测部分
](
./detection.md
)
。
<a
name=
"12"
></a>
<a
name=
"文本识别算法"
></a>
### 1.2 文本识别算法
### 2.文本识别算法
PaddleOCR基于动态图开源的文本识别算法列表:
PaddleOCR基于动态图开源的文本识别算法列表:
-
[
x] CRNN([paper
](
https://arxiv.org/abs/1507.05717
)
)(ppocr推荐)
-
[
x] CRNN([paper
](
https://arxiv.org/abs/1507.05717
)
)
[7]
(ppocr推荐)
-
[
x] Rosetta([paper
](
https://arxiv.org/abs/1910.05085
)
)
-
[
x] Rosetta([paper
](
https://arxiv.org/abs/1910.05085
)
)
[10]
-
[
x] STAR-Net([paper
](
http://www.bmva.org/bmvc/2016/papers/paper043/index.html
)
)
-
[
x] STAR-Net([paper
](
http://www.bmva.org/bmvc/2016/papers/paper043/index.html
)
)
[11]
-
[
x] RARE([paper
](
https://arxiv.org/abs/1603.03915v1
)
)
-
[
x] RARE([paper
](
https://arxiv.org/abs/1603.03915v1
)
)
[12]
-
[
x] SRN([paper
](
https://arxiv.org/abs/2003.12294
)
)
-
[
x] SRN([paper
](
https://arxiv.org/abs/2003.12294
)
)
[5]
-
[
x] NRTR([paper
](
https://arxiv.org/abs/1806.00926v2
)
)
-
[
x] NRTR([paper
](
https://arxiv.org/abs/1806.00926v2
)
)
[13]
-
[
x] SAR([paper
](
https://arxiv.org/abs/1811.00751v2
)
)
-
[
x] SAR([paper
](
https://arxiv.org/abs/1811.00751v2
)
)
-
[
x] SEED([paper
](
https://arxiv.org/pdf/2005.10977.pdf
)
)
-
[
x] SEED([paper
](
https://arxiv.org/pdf/2005.10977.pdf
)
)
参考
[
DTRB
](
https://arxiv.org/abs/1904.01906
)
文字识别训练和评估流程,使用MJSynth和SynthText两个文字识别数据集训练,在IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE数据集上进行评估,算法效果如下:
参考
[
DTRB
]
[
3
]
(https://arxiv.org/abs/1904.01906)文字识别训练和评估流程,使用MJSynth和SynthText两个文字识别数据集训练,在IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE数据集上进行评估,算法效果如下:
|模型|骨干网络|Avg Accuracy|模型存储命名|下载链接|
|模型|骨干网络|Avg Accuracy|模型存储命名|下载链接|
|---|---|---|---|---|
|---|---|---|---|---|
|Rosetta|Resnet34_vd|80.9%|rec_r34_vd_none_none_ctc|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_none_ctc_v2.0_train.tar
)
|
|Rosetta|Resnet34_vd|80.9%|rec_r34_vd_none_none_ctc|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_none_ctc_v2.0_train.tar
)
|
|Rosetta|MobileNetV3|78.05%|rec_mv3_none_none_ctc|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_none_ctc_v2.0_train.tar
)
|
|Rosetta|MobileNetV3|78.05%|rec_mv3_none_none_ctc|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_none_ctc_v2.0_train.tar
)
|
|CRNN|Resnet34_vd|82.76%|rec_r34_vd_none_bilstm_ctc|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_bilstm_ctc_v2.0_train.tar
)
|
|CRNN|Resnet34_vd|82.76%|rec_r34_vd_none_bilstm_ctc|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_bilstm_ctc_v2.0_train.tar
)
|
|CRNN|MobileNetV3|79.97%|rec_mv3_none_bilstm_ctc|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_train.tar
)
|
|CRNN|MobileNetV3|79.97%|rec_mv3_none_bilstm_ctc|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_train.tar
)
|
|StarNet|Resnet34_vd|84.44%|rec_r34_vd_tps_bilstm_ctc|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_tps_bilstm_ctc_v2.0_train.tar
)
|
|StarNet|Resnet34_vd|84.44%|rec_r34_vd_tps_bilstm_ctc|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_tps_bilstm_ctc_v2.0_train.tar
)
|
|StarNet|MobileNetV3|81.42%|rec_mv3_tps_bilstm_ctc|
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_tps_bilstm_ctc_v2.0_train.tar
)
|
|StarNet|MobileNetV3|81.42%|rec_mv3_tps_bilstm_ctc|
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_tps_bilstm_ctc_v2.0_train.tar
)
|
|RARE|MobileNetV3|82.5%|rec_mv3_tps_bilstm_att |
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_tps_bilstm_att_v2.0_train.tar
)
|
|RARE|MobileNetV3|82.5%|rec_mv3_tps_bilstm_att |
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_tps_bilstm_att_v2.0_train.tar
)
|
|RARE|Resnet34_vd|83.6%|rec_r34_vd_tps_bilstm_att |
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_tps_bilstm_att_v2.0_train.tar
)
|
|RARE|Resnet34_vd|83.6%|rec_r34_vd_tps_bilstm_att |
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_tps_bilstm_att_v2.0_train.tar
)
|
|SRN|Resnet50_vd_fpn| 88.52% | rec_r50fpn_vd_none_srn |
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r50_vd_srn_train.tar
)
|
|SRN|Resnet50_vd_fpn| 88.52% | rec_r50fpn_vd_none_srn |
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r50_vd_srn_train.tar
)
|
|NRTR|NRTR_MTB| 84.3% | rec_mtb_nrtr |
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mtb_nrtr_train.tar
)
|
|NRTR|NRTR_MTB| 84.3% | rec_mtb_nrtr |
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mtb_nrtr_train.tar
)
|
|SAR|Resnet31| 87.2% | rec_r31_sar |
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.1/rec/rec_r31_sar_train.tar
)
|
|SAR|Resnet31| 87.2% | rec_r31_sar |
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.1/rec/rec_r31_sar_train.tar
)
|
|SEED| Aster_Resnet | 85.2% | rec_resnet_stn_bilstm_att |
[
下载链接
](
https://paddleocr.bj.bcebos.com/dygraph_v2.1/rec/rec_resnet_stn_bilstm_att.tar
)
|
|SEED|Aster_Resnet| 85.2% | rec_resnet_stn_bilstm_att |
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.1/rec/rec_resnet_stn_bilstm_att.tar
)
|
PaddleOCR文本识别算法的训练和使用请参考文档教程中
[
模型训练/评估中的文本识别部分
](
./recognition.md
)
。
<a
name=
"2"
></a>
## 2. 模型训练
PaddleOCR文本检测算法的训练和使用请参考文档教程中
[
模型训练/评估中的文本检测部分
](
./detection.md
)
。文本识别算法的训练和使用请参考文档教程中
[
模型训练/评估中的文本识别部分
](
./recognition.md
)
。
<a
name=
"3"
></a>
## 3. 模型推理
上述模型中除PP-OCR系列模型以外,其余模型仅支持基于Python引擎的推理,具体内容可参考
[
基于Python预测引擎推理
](
./inference.md
)
doc/doc_ch/angle_class.md
View file @
03bb378f
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
## 1. 方法介绍
## 1. 方法介绍
文本方向分类器主要用于图片非0度的场景下,在这种场景下需要对图片里检测到的文本行进行一个转正的操作。在PaddleOCR系统内,
文本方向分类器主要用于图片非0度的场景下,在这种场景下需要对图片里检测到的文本行进行一个转正的操作。在PaddleOCR系统内,
文字检测之后得到的文本行图片经过仿射变换之后送入识别模型,此时只需要对文字进行一个0和180度的角度分类,因此PaddleOCR内置的
文字检测之后得到的文本行图片经过仿射变换之后送入识别模型,此时只需要对文字进行一个0和180度的角度分类,因此PaddleOCR内置的
文
字角度
分类器
**只支持了0和180度的分类**
。如果想支持更多角度,可以自己修改算法进行支持。
文
本方向
分类器
**只支持了0和180度的分类**
。如果想支持更多角度,可以自己修改算法进行支持。
0和180度数据样本例子:
0和180度数据样本例子:
...
@@ -72,8 +72,6 @@ train/cls/train/word_002.jpg 180
...
@@ -72,8 +72,6 @@ train/cls/train/word_002.jpg 180
<a
name=
"启动训练"
></a>
<a
name=
"启动训练"
></a>
## 3. 启动训练
## 3. 启动训练
### 启动训练
将准备好的txt文件和图片文件夹路径分别写入配置文件的
`Train/Eval.dataset.label_file_list`
和
`Train/Eval.dataset.data_dir`
字段下,
`Train/Eval.dataset.data_dir`
字段下的路径和文件里记载的图片名构成了图片的绝对路径。
将准备好的txt文件和图片文件夹路径分别写入配置文件的
`Train/Eval.dataset.label_file_list`
和
`Train/Eval.dataset.data_dir`
字段下,
`Train/Eval.dataset.data_dir`
字段下的路径和文件里记载的图片名构成了图片的绝对路径。
PaddleOCR提供了训练脚本、评估脚本和预测脚本。
PaddleOCR提供了训练脚本、评估脚本和预测脚本。
...
...
doc/doc_ch/config.md
View file @
03bb378f
...
@@ -36,10 +36,10 @@
...
@@ -36,10 +36,10 @@
| pretrained_model | 设置加载预训练模型路径 | ./pretrain_models/CRNN/best_accuracy |
\
|
| pretrained_model | 设置加载预训练模型路径 | ./pretrain_models/CRNN/best_accuracy |
\
|
| checkpoints | 加载模型参数路径 | None | 用于中断后加载参数继续训练 |
| checkpoints | 加载模型参数路径 | None | 用于中断后加载参数继续训练 |
| use_visualdl | 设置是否启用visualdl进行可视化log展示 | False |
[
教程地址
](
https://www.paddlepaddle.org.cn/paddle/visualdl
)
|
| use_visualdl | 设置是否启用visualdl进行可视化log展示 | False |
[
教程地址
](
https://www.paddlepaddle.org.cn/paddle/visualdl
)
|
| infer_img | 设置预测图像路径或文件夹路径 | ./infer_img |
\|
| infer_img | 设置预测图像路径或文件夹路径 | ./infer_img |
\|
|
| character_dict_path | 设置字典路径 | ./ppocr/utils/ppocr_keys_v1.txt | 如果为空,则默认使用小写字母+数字作为字典 |
| character_dict_path | 设置字典路径 | ./ppocr/utils/ppocr_keys_v1.txt | 如果为空,则默认使用小写字母+数字作为字典 |
| max_text_length | 设置文本最大长度 | 25 |
\
|
| max_text_length | 设置文本最大长度 | 25 |
\
|
| use_space_char | 设置是否识别空格 | True |
|
| use_space_char | 设置是否识别空格 | True |
\|
|
| label_list | 设置方向分类器支持的角度 | ['0','180'] | 仅在方向分类器中生效 |
| label_list | 设置方向分类器支持的角度 | ['0','180'] | 仅在方向分类器中生效 |
| save_res_path | 设置检测模型的结果保存地址 | ./output/det_db/predicts_db.txt | 仅在检测模型中生效 |
| save_res_path | 设置检测模型的结果保存地址 | ./output/det_db/predicts_db.txt | 仅在检测模型中生效 |
...
...
doc/doc_ch/detection.md
View file @
03bb378f
# 目录
# 文字检测
-
[
1. 文字检测
](
#1-----
)
*
[
1.1 数据准备
](
#11-----
)
*
[
1.2 下载预训练模型
](
#12--------
)
*
[
1.3 启动训练
](
#13-----
)
*
[
1.4 断点训练
](
#14-----
)
*
[
1.5 更换Backbone 训练
](
#15---backbone---
)
*
[
1.6 指标评估
](
#16-----
)
*
[
1.7 测试检测效果
](
#17-------
)
*
[
1.8 转inference模型测试
](
#18--inference----
)
-
[
2. FAQ
](
#2-faq
)
<a
name=
"1-----"
></a>
# 1. 文字检测
本节以icdar2015数据集为例,介绍PaddleOCR中检测模型训练、评估、测试的使用方式。
本节以icdar2015数据集为例,介绍PaddleOCR中检测模型训练、评估、测试的使用方式。
-
[
1. 准备数据和模型
](
#1--------
)
*
[
1.1 数据准备
](
#11-----
)
*
[
1.2 下载预训练模型
](
#12--------
)
-
[
2. 开始训练
](
#2-----
)
*
[
2.1 启动训练
](
#21-----
)
*
[
2.2 断点训练
](
#22-----
)
*
[
2.3 更换Backbone 训练
](
#23---backbone---
)
-
[
3. 模型评估与预测
](
#3--------
)
*
[
3.1 指标评估
](
#31-----
)
*
[
3.2 测试检测效果
](
#32-------
)
-
[
4. 模型导出与预测
](
#4--------
)
-
[
5. FAQ
](
#5-faq
)
<a
name=
"1--------"
></a>
# 1. 准备数据和模型
<a
name=
"11-----"
></a>
<a
name=
"11-----"
></a>
## 1.1 数据准备
## 1.1 数据准备
...
@@ -83,8 +85,11 @@ wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dyg
...
@@ -83,8 +85,11 @@ wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dyg
wget
-P
./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_ssld_pretrained.pdparams
wget
-P
./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_ssld_pretrained.pdparams
```
```
<a
name=
"13-----"
></a>
<a
name=
"2-----"
></a>
## 1.3 启动训练
# 2. 开始训练
<a
name=
"21-----"
></a>
## 2.1 启动训练
*如果您安装的是cpu版本,请将配置文件中的 `use_gpu` 字段修改为false*
*如果您安装的是cpu版本,请将配置文件中的 `use_gpu` 字段修改为false*
...
@@ -96,6 +101,10 @@ python3 tools/train.py -c configs/det/det_mv3_db.yml \
...
@@ -96,6 +101,10 @@ python3 tools/train.py -c configs/det/det_mv3_db.yml \
# 单机多卡训练,通过 --gpus 参数设置使用的GPU ID
# 单机多卡训练,通过 --gpus 参数设置使用的GPU ID
python3
-m
paddle.distributed.launch
--gpus
'0,1,2,3'
tools/train.py
-c
configs/det/det_mv3_db.yml
\
python3
-m
paddle.distributed.launch
--gpus
'0,1,2,3'
tools/train.py
-c
configs/det/det_mv3_db.yml
\
-o
Global.pretrained_model
=
./pretrain_models/MobileNetV3_large_x0_5_pretrained
-o
Global.pretrained_model
=
./pretrain_models/MobileNetV3_large_x0_5_pretrained
# 多机多卡训练,通过 --ips 参数设置使用的机器IP地址,通过 --gpus 参数设置使用的GPU ID
python3
-m
paddle.distributed.launch
--ips
=
"xx.xx.xx.xx,xx.xx.xx.xx"
--gpus
'0,1,2,3'
tools/train.py
-c
configs/det/det_mv3_db.yml
\
-o
Global.pretrained_model
=
./pretrain_models/MobileNetV3_large_x0_5_pretrained
```
```
上述指令中,通过-c 选择训练使用configs/det/det_db_mv3.yml配置文件。
上述指令中,通过-c 选择训练使用configs/det/det_db_mv3.yml配置文件。
...
@@ -106,8 +115,17 @@ python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/
...
@@ -106,8 +115,17 @@ python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/
python3 tools/train.py
-c
configs/det/det_mv3_db.yml
-o
Optimizer.base_lr
=
0.0001
python3 tools/train.py
-c
configs/det/det_mv3_db.yml
-o
Optimizer.base_lr
=
0.0001
```
```
<a
name=
"14-----"
></a>
**注意:**
采用多机多卡训练时,需要替换上面命令中的ips值为您机器的地址,机器之间需要能够相互ping通。另外,训练时需要在多个机器上分别启动命令。查看机器ip地址的命令为
`ifconfig`
。
## 1.4 断点训练
如果您想进一步加快训练速度,可以使用
[
自动混合精度训练
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/01_paddle2.0_introduction/basic_concept/amp_cn.html
)
, 以单机单卡为例,命令如下:
```
shell
python3 tools/train.py
-c
configs/det/det_mv3_db.yml
\
-o
Global.pretrained_model
=
./pretrain_models/MobileNetV3_large_x0_5_pretrained
\
Global.use_amp
=
True Global.scale_loss
=
1024.0 Global.use_dynamic_loss_scaling
=
True
```
<a
name
=
"22-----"
>
</a>
## 2.2 断点训练
如果训练程序中断,如果希望加载训练中断的模型从而恢复训练,可以通过指定Global.checkpoints指定要加载的模型路径:
如果训练程序中断,如果希望加载训练中断的模型从而恢复训练,可以通过指定Global.checkpoints指定要加载的模型路径:
```
shell
```
shell
...
@@ -116,8 +134,8 @@ python3 tools/train.py -c configs/det/det_mv3_db.yml -o Global.checkpoints=./you
...
@@ -116,8 +134,8 @@ python3 tools/train.py -c configs/det/det_mv3_db.yml -o Global.checkpoints=./you
**注意**:`Global.checkpoints`的优先级高于`Global.pretrained_model`的优先级,即同时指定两个参数时,优先加载`Global.checkpoints`指定的模型,如果`Global.checkpoints`指定的模型路径有误,会加载`Global.pretrained_model`指定的模型。
**注意**:`Global.checkpoints`的优先级高于`Global.pretrained_model`的优先级,即同时指定两个参数时,优先加载`Global.checkpoints`指定的模型,如果`Global.checkpoints`指定的模型路径有误,会加载`Global.pretrained_model`指定的模型。
<a
name=
"
15
---backbone---"
></a>
<a name="
23
---backbone---"></a>
##
1.5
更换Backbone 训练
##
2.3
更换Backbone 训练
PaddleOCR将网络划分为四部分,分别在[ppocr/modeling](../../ppocr/modeling)下。 进入网络的数据将按照顺序(transforms->backbones->
PaddleOCR将网络划分为四部分,分别在[ppocr/modeling](../../ppocr/modeling)下。 进入网络的数据将按照顺序(transforms->backbones->
necks->heads)依次通过这四个部分。
necks->heads)依次通过这四个部分。
...
@@ -164,8 +182,11 @@ args1: args1
...
@@ -164,8 +182,11 @@ args1: args1
**注意**:如果要更换网络的其他模块,可以参考[文档](./add_new_algorithm.md)。
**注意**:如果要更换网络的其他模块,可以参考[文档](./add_new_algorithm.md)。
<a
name=
"16-----"
></a>
<a name="3--------"></a>
## 1.6 指标评估
# 3. 模型评估与预测
<a name="31-----"></a>
## 3.1 指标评估
PaddleOCR计算三个OCR检测相关的指标,分别是:Precision、Recall、Hmean(F-Score)。
PaddleOCR计算三个OCR检测相关的指标,分别是:Precision、Recall、Hmean(F-Score)。
...
@@ -177,8 +198,8 @@ python3 tools/eval.py -c configs/det/det_mv3_db.yml -o Global.checkpoints="{pat
...
@@ -177,8 +198,8 @@ python3 tools/eval.py -c configs/det/det_mv3_db.yml -o Global.checkpoints="{pat
* 注:`box_thresh`、`unclip_ratio`是DB后处理所需要的参数,在评估EAST模型时不需要设置
* 注:`box_thresh`、`unclip_ratio`是DB后处理所需要的参数,在评估EAST模型时不需要设置
<a
name=
"
17
-------"
></a>
<a name="
32
-------"></a>
##
1.7
测试检测效果
##
3.2
测试检测效果
测试单张图像的检测效果
测试单张图像的检测效果
```
shell
```
shell
...
@@ -195,8 +216,8 @@ python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./
...
@@ -195,8 +216,8 @@ python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./
python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./doc/imgs_en/" Global.pretrained_model="./output/det_db/best_accuracy"
python3 tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./doc/imgs_en/" Global.pretrained_model="./output/det_db/best_accuracy"
```
```
<a
name=
"
18--inference
----"
></a>
<a name="
4----
----"></a>
#
#
1.8 转inference模型测试
#
4. 模型导出与预测
inference 模型(`paddle.jit.save`保存的模型)
inference 模型(`paddle.jit.save`保存的模型)
一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。
一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。
...
@@ -218,10 +239,11 @@ python3 tools/infer/predict_det.py --det_algorithm="DB" --det_model_dir="./outpu
...
@@ -218,10 +239,11 @@ python3 tools/infer/predict_det.py --det_algorithm="DB" --det_model_dir="./outpu
python3 tools/infer/predict_det.py --det_algorithm="EAST" --det_model_dir="./output/det_db_inference/" --image_dir="./doc/imgs/" --use_gpu=True
python3 tools/infer/predict_det.py --det_algorithm="EAST" --det_model_dir="./output/det_db_inference/" --image_dir="./doc/imgs/" --use_gpu=True
```
```
<a
name=
"
2
"
></a>
<a name="
5-faq
"></a>
#
2
. FAQ
#
5
. FAQ
Q1: 训练模型转inference 模型之后预测效果不一致?
Q1: 训练模型转inference 模型之后预测效果不一致?
**A**:此类问题出现较多,问题多是trained model预测时候的预处理、后处理参数和inference model预测的时候的预处理、后处理参数不一致导致的。以det_mv3_db.yml配置文件训练的模型为例,训练模型、inference模型预测结果不一致问题解决方式如下:
**A**:此类问题出现较多,问题多是trained model预测时候的预处理、后处理参数和inference model预测的时候的预处理、后处理参数不一致导致的。以det_mv3_db.yml配置文件训练的模型为例,训练模型、inference模型预测结果不一致问题解决方式如下:
- 检查[trained model预处理](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/configs/det/det_mv3_db.yml#L116),和[inference model的预测预处理](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/tools/infer/predict_det.py#L42)函数是否一致。算法在评估的时候,输入图像大小会影响精度,为了和论文保持一致,训练icdar15配置文件中将图像resize到[736, 1280],但是在inference model预测的时候只有一套默认参数,会考虑到预测速度问题,默认限制图像最长边为960做resize的。训练模型预处理和inference模型的预处理函数位于[ppocr/data/imaug/operators.py](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/ppocr/data/imaug/operators.py#L147)
- 检查[trained model预处理](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/configs/det/det_mv3_db.yml#L116),和[inference model的预测预处理](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/tools/infer/predict_det.py#L42)函数是否一致。算法在评估的时候,输入图像大小会影响精度,为了和论文保持一致,训练icdar15配置文件中将图像resize到[736, 1280],但是在inference model预测的时候只有一套默认参数,会考虑到预测速度问题,默认限制图像最长边为960做resize的。训练模型预处理和inference模型的预处理函数位于[ppocr/data/imaug/operators.py](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/ppocr/data/imaug/operators.py#L147)
- 检查[trained model后处理](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/configs/det/det_mv3_db.yml#L51),和[inference 后处理参数](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/tools/infer/utility.py#L50)是否一致。
- 检查[trained model后处理](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/configs/det/det_mv3_db.yml#L51),和[inference 后处理参数](https://github.com/PaddlePaddle/PaddleOCR/blob/c1ed243fb68d5d466258243092e56cbae32e2c14/tools/infer/utility.py#L50)是否一致。
doc/doc_ch/inference_ppocr.md
View file @
03bb378f
# PP-OCR模型库
快速
推理
#
基于Python引擎的
PP-OCR模型库推理
本文介绍针对PP-OCR模型库的Python推理引擎使用方法,内容依次为文本检测、文本识别、方向分类器以及三者串联在CPU、GPU上的预测方法。
本文介绍针对PP-OCR模型库的Python推理引擎使用方法,内容依次为文本检测、文本识别、方向分类器以及三者串联在CPU、GPU上的预测方法。
-
[
1. 文本检测模型推理
](
#文本检测模型推理
)
-
[
1. 文本检测模型推理
](
#文本检测模型推理
)
-
[
2. 文本识别模型推理
](
#文本识别模型推理
)
-
[
2. 文本识别模型推理
](
#文本识别模型推理
)
-
[
2.1 超轻量中文识别模型推理
](
#超轻量中文识别模型推理
)
-
[
2.1 超轻量中文识别模型推理
](
#超轻量中文识别模型推理
)
-
[
2.2 多语言模型的推理
](
#多语言模型的推理
)
-
[
2.2 多语言模型的推理
](
#多语言模型的推理
)
-
[
3. 方向分类模型推理
](
#方向分类模型推理
)
-
[
3. 方向分类模型推理
](
#方向分类模型推理
)
-
[
4. 文本检测、方向分类和文字识别串联推理
](
#文本检测、方向分类和文字识别串联推理
)
-
[
4. 文本检测、方向分类和文字识别串联推理
](
#文本检测、方向分类和文字识别串联推理
)
<a
name=
"文本检测模型推理"
></a>
<a
name=
"文本检测模型推理"
></a>
...
@@ -21,12 +18,15 @@
...
@@ -21,12 +18,15 @@
```
```
# 下载超轻量中文检测模型:
# 下载超轻量中文检测模型:
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tartar xf ch_ppocr_mobile_v2.0_det_infer.tarpython3 tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./ch_ppocr_mobile_v2.0_det_infer/"
wget https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_infer.tar
tar xf ch_PP-OCRv2_det_infer.tar
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./ch_PP-OCRv2_det_infer/"
```
```
可视化文本检测结果默认保存到
`./inference_results`
文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:
可视化文本检测结果默认保存到
`./inference_results`
文件夹里面,结果文件的名称前缀为'det_res'。结果示例如下:


通过参数
`limit_type`
和
`det_limit_side_len`
来对图片的尺寸进行限制,
通过参数
`limit_type`
和
`det_limit_side_len`
来对图片的尺寸进行限制,
`limit_type`
可选参数为[
`max`
,
`min`
],
`limit_type`
可选参数为[
`max`
,
`min`
],
...
@@ -39,13 +39,13 @@ wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_i
...
@@ -39,13 +39,13 @@ wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_i
如果输入图片的分辨率比较大,而且想使用更大的分辨率预测,可以设置det_limit_side_len 为想要的值,比如1216:
如果输入图片的分辨率比较大,而且想使用更大的分辨率预测,可以设置det_limit_side_len 为想要的值,比如1216:
```
```
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./inference/
det_db
/" --det_limit_type=max --det_limit_side_len=1216
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./inference/
ch_PP-OCRv2_det_infer
/" --det_limit_type=max --det_limit_side_len=1216
```
```
如果想使用CPU进行预测,执行命令如下
如果想使用CPU进行预测,执行命令如下
```
```
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./inference/
det_db
/" --use_gpu=False
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./inference/
ch_PP-OCRv2_det_infer
/" --use_gpu=False
```
```
...
@@ -62,12 +62,12 @@ python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_di
...
@@ -62,12 +62,12 @@ python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_di
```
```
# 下载超轻量中文识别模型:
# 下载超轻量中文识别模型:
wget https://paddleocr.bj.bcebos.com/
dygraph_v2.0/ch/ch_ppocr_mobile_v2.0
_rec_infer.tar
wget https://paddleocr.bj.bcebos.com/
PP-OCRv2/chinese/ch_PP-OCRv2
_rec_infer.tar
tar xf ch_
ppocr_mobile_v2.0
_rec_infer.tar
tar xf ch_
PP-OCRv2
_rec_infer.tar
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --rec_model_dir="ch_
ppocr_mobile_v2.0
_rec_infer"
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --rec_model_dir="
./
ch_
PP-OCRv2
_rec_infer
/
"
```
```


执行命令后,上面图像的预测结果(识别的文本和得分)会打印到屏幕上,示例如下:
执行命令后,上面图像的预测结果(识别的文本和得分)会打印到屏幕上,示例如下:
...
@@ -79,14 +79,13 @@ Predicts of ./doc/imgs_words/ch/word_4.jpg:('实力活力', 0.98458153)
...
@@ -79,14 +79,13 @@ Predicts of ./doc/imgs_words/ch/word_4.jpg:('实力活力', 0.98458153)
### 2.2 多语言模型的推理
### 2.2 多语言模型的推理
如果您需要预测的是其他语言模型,在使用inference模型预测时,需要通过
`--rec_char_dict_path`
指定使用的字典路径, 同时为了得到正确的可视化结果,
如果您需要预测的是其他语言模型,可以在
[
此链接
](
./models_list.md#%E5%A4%9A%E8%AF%AD%E8%A8%80%E8%AF%86%E5%88%AB%E6%A8%A1%E5%9E%8B
)
中找到对应语言的inference模型,在使用inference模型预测时,需要通过
`--rec_char_dict_path`
指定使用的字典路径, 同时为了得到正确的可视化结果,需要通过
`--vis_font_path`
指定可视化的字体路径,
`doc/fonts/`
路径下有默认提供的小语种字体,例如韩文识别:
需要通过
`--vis_font_path`
指定可视化的字体路径,
`doc/fonts/`
路径下有默认提供的小语种字体,例如韩文识别:
```
```
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/korean_mobile_v2.0_rec_infer.tar
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/korean/1.jpg" --rec_model_dir="./your inference model" --rec_char_type="korean" --rec_char_dict_path="ppocr/utils/dict/korean_dict.txt" --vis_font_path="doc/fonts/korean.ttf"
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/korean/1.jpg" --rec_model_dir="./your inference model" --rec_char_type="korean" --rec_char_dict_path="ppocr/utils/dict/korean_dict.txt" --vis_font_path="doc/fonts/korean.ttf"
```
```


执行命令后,上图的预测结果为:
执行命令后,上图的预测结果为:
...
@@ -107,7 +106,7 @@ tar xf ch_ppocr_mobile_v2.0_cls_infer.tar
...
@@ -107,7 +106,7 @@ tar xf ch_ppocr_mobile_v2.0_cls_infer.tar
python3 tools/infer/predict_cls.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --cls_model_dir="ch_ppocr_mobile_v2.0_cls_infer"
python3 tools/infer/predict_cls.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --cls_model_dir="ch_ppocr_mobile_v2.0_cls_infer"
```
```


执行命令后,上面图像的预测结果(分类的方向和得分)会打印到屏幕上,示例如下:
执行命令后,上面图像的预测结果(分类的方向和得分)会打印到屏幕上,示例如下:
...
@@ -123,14 +122,13 @@ Predicts of ./doc/imgs_words/ch/word_4.jpg:['0', 0.9999982]
...
@@ -123,14 +122,13 @@ Predicts of ./doc/imgs_words/ch/word_4.jpg:['0', 0.9999982]
```
shell
```
shell
# 使用方向分类器
# 使用方向分类器
python3 tools/infer/predict_system.py
--image_dir
=
"./doc/imgs/00018069.jpg"
--det_model_dir
=
"./inference/
det_db
/"
--cls_model_dir
=
"./inference/cls/"
--rec_model_dir
=
"./inference/
rec_crnn
/"
--use_angle_cls
=
true
python3 tools/infer/predict_system.py
--image_dir
=
"./doc/imgs/00018069.jpg"
--det_model_dir
=
"./inference/
ch_PP-OCRv2_det_infer
/"
--cls_model_dir
=
"./inference/cls/"
--rec_model_dir
=
"./inference/
ch_PP-OCRv2_rec_infer
/"
--use_angle_cls
=
true
# 不使用方向分类器
# 不使用方向分类器
python3 tools/infer/predict_system.py
--image_dir
=
"./doc/imgs/00018069.jpg"
--det_model_dir
=
"./inference/
det_db
/"
--rec_model_dir
=
"./inference/
rec_crnn
/"
--use_angle_cls
=
false
python3 tools/infer/predict_system.py
--image_dir
=
"./doc/imgs/00018069.jpg"
--det_model_dir
=
"./inference/
ch_PP-OCRv2_det_infer
/"
--rec_model_dir
=
"./inference/
ch_PP-OCRv2_rec_infer
/"
--use_angle_cls
=
false
# 使用多进程
# 使用多进程
python3 tools/infer/predict_system.py
--image_dir
=
"./doc/imgs/00018069.jpg"
--det_model_dir
=
"./inference/
det_db
/"
--rec_model_dir
=
"./inference/
rec_crnn
/"
--use_angle_cls
=
false
--use_mp
=
True
--total_process_num
=
6
python3 tools/infer/predict_system.py
--image_dir
=
"./doc/imgs/00018069.jpg"
--det_model_dir
=
"./inference/
ch_PP-OCRv2_det_infer
/"
--rec_model_dir
=
"./inference/
ch_PP-OCRv2_rec_infer
/"
--use_angle_cls
=
false
--use_mp
=
True
--total_process_num
=
6
```
```
执行命令后,识别结果图像如下:
执行命令后,识别结果图像如下:


doc/doc_ch/models.md
0 → 100644
View file @
03bb378f
# PP-OCR模型库
PP-OCR模型一节主要补充一些OCR模型的基本概念以及如何快速运用PP-OCR模型库中的模型。
本节包含两个部分,首先在
[
PP-OCR模型下载
](
./models_list.md
)
中解释PP-OCR模型的类型概念,并提供所有模型的下载链接。然后在
[
基于Python引擎的PP-OCR模型库推理
](
./inference_ppocr.md
)
中介绍PP-OCR模型库的使用方法,可以通过Python推理引擎快速利用丰富的模型库模型获得测试结果。
------
下面我们首先了解一些OCR相关的基本概念:
-
[
1. OCR 简要介绍
](
#1-ocr-----
)
*
[
1.1 OCR 检测模型基本概念
](
#11-ocr---------
)
*
[
1.2 OCR 识别模型基本概念
](
#12-ocr---------
)
*
[
1.3 PP-OCR模型
](
#13-pp-ocr--
)
<a
name=
"1-ocr-----"
></a>
## 1. OCR 简要介绍
本节简要介绍OCR检测模型、识别模型的基本概念,并介绍PaddleOCR的PP-OCR模型。
OCR(Optical Character Recognition,光学字符识别)目前是文字识别的统称,已不限于文档或书本文字识别,更包括识别自然场景下的文字,又可以称为STR(Scene Text Recognition)。
OCR文字识别一般包括两个部分,文本检测和文本识别;文本检测首先利用检测算法检测到图像中的文本行;然后检测到的文本行用识别算法去识别到具体文字。
<a
name=
"11-ocr---------"
></a>
### 1.1 OCR 检测模型基本概念
文本检测就是要定位图像中的文字区域,然后通常以边界框的形式将单词或文本行标记出来。传统的文字检测算法多是通过手工提取特征的方式,特点是速度快,简单场景效果好,但是面对自然场景,效果会大打折扣。当前多是采用深度学习方法来做。
基于深度学习的文本检测算法可以大致分为以下几类:
1.
基于目标检测的方法;一般是预测得到文本框后,通过NMS筛选得到最终文本框,多是四点文本框,对弯曲文本场景效果不理想。典型算法为EAST、Text Box等方法。
2.
基于分割的方法;将文本行当成分割目标,然后通过分割结果构建外接文本框,可以处理弯曲文本,对于文本交叉场景问题效果不理想。典型算法为DB、PSENet等方法。
3.
混合目标检测和分割的方法;
<a
name=
"12-ocr---------"
></a>
### 1.2 OCR 识别模型基本概念
OCR识别算法的输入数据一般是文本行,背景信息不多,文字占据主要部分,识别算法目前可以分为两类算法:
1.
基于CTC的方法;即识别算法的文字预测模块是基于CTC的,常用的算法组合为CNN+RNN+CTC。目前也有一些算法尝试在网络中加入transformer模块等等。
2.
基于Attention的方法;即识别算法的文字预测模块是基于Attention的,常用算法组合是CNN+RNN+Attention。
<a
name=
"13-pp-ocr--"
></a>
### 1.3 PP-OCR模型
PaddleOCR 中集成了很多OCR算法,文本检测算法有DB、EAST、SAST等等,文本识别算法有CRNN、RARE、StarNet、Rosetta、SRN等算法。
其中PaddleOCR针对中英文自然场景通用OCR,推出了PP-OCR系列模型,PP-OCR模型由DB+CRNN算法组成,利用海量中文数据训练加上模型调优方法,在中文场景上具备较高的文本检测识别能力。并且PaddleOCR推出了高精度超轻量PP-OCRv2模型,检测模型仅3M,识别模型仅8.5M,利用
[
PaddleSlim
](
https://github.com/PaddlePaddle/PaddleSlim
)
的模型量化方法,可以在保持精度不降低的情况下,将检测模型压缩到0.8M,识别压缩到3M,更加适用于移动端部署场景。
doc/doc_ch/models_list.md
View file @
03bb378f
#
# OCR模型列表(V2.1,2021年9月6日更新)
# OCR模型列表(V2.1,2021年9月6日更新)
> **说明**
> **说明**
> 1. 2.1版模型相比2.0版模型,2.1的模型在模型精度上做了提升
> 1. 2.1版模型相比2.0版模型,2.1的模型在模型精度上做了提升
...
@@ -6,13 +6,13 @@
...
@@ -6,13 +6,13 @@
> 3. 本文档提供的是PPOCR自研模型列表,更多基于公开数据集的算法介绍与预训练模型可以参考:[算法概览文档](./algorithm_overview.md)。
> 3. 本文档提供的是PPOCR自研模型列表,更多基于公开数据集的算法介绍与预训练模型可以参考:[算法概览文档](./algorithm_overview.md)。
-
[
一、
文本检测模型
](
#文本检测模型
)
-
[
1.
文本检测模型
](
#文本检测模型
)
-
[
二、
文本识别模型
](
#文本识别模型
)
-
[
2.
文本识别模型
](
#文本识别模型
)
-
[
1
.
中文识别模型
](
#中文识别模型
)
-
[
2.
1 中文识别模型
](
#中文识别模型
)
-
[
2. 英文识别模型
](
#英文识别模型
)
-
[
2.
2
英文识别模型
](
#英文识别模型
)
-
[
3
.
多语言识别模型
](
#多语言识别模型
)
-
[
2.
3 多语言识别模型
](
#多语言识别模型
)
-
[
三、
文本方向分类模型
](
#文本方向分类模型
)
-
[
3.
文本方向分类模型
](
#文本方向分类模型
)
-
[
四、
Paddle-Lite 模型
](
#Paddle-Lite模型
)
-
[
4.
Paddle-Lite 模型
](
#Paddle-Lite模型
)
PaddleOCR提供的可下载模型包括
`推理模型`
、
`训练模型`
、
`预训练模型`
、
`slim模型`
,模型区别说明如下:
PaddleOCR提供的可下载模型包括
`推理模型`
、
`训练模型`
、
`预训练模型`
、
`slim模型`
,模型区别说明如下:
...
@@ -29,27 +29,28 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
...
@@ -29,27 +29,28 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
<a
name=
"文本检测模型"
></a>
<a
name=
"文本检测模型"
></a>
##
# 一、
文本检测模型
##
1.
文本检测模型
|模型名称|模型简介|配置文件|推理模型大小|下载地址|
|模型名称|模型简介|配置文件|推理模型大小|下载地址|
| --- | --- | --- | --- | --- |
| --- | --- | --- | --- | --- |
|ch_PP-OCRv2_det_slim|slim量化+蒸馏版超轻量模型,支持中英文、多语种文本检测|
[
ch_PP-OCRv2_det_cml.yml
](
../../configs/det/ch_PP-OCRv2/ch_PP-OCR_det_cml.yml
)
| 3M |
[
推理模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_slim_quant_infer.tar
)
|
|ch_PP-OCRv2_det_slim|
【最新】
slim量化+蒸馏版超轻量模型,支持中英文、多语种文本检测|
[
ch_PP-OCRv2_det_cml.yml
](
../../configs/det/ch_PP-OCRv2/ch_PP-OCR
v2
_det_cml.yml
)
| 3M |
[
推理模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_slim_quant_infer.tar
)
|
|ch_PP-OCRv2_det|原始超轻量模型,支持中英文、多语种文本检测|
[
ch_PP-OCRv2_det_cml.yml
](
../../configs/det/ch_PP-OCRv2/ch_PP-OCR_det_cml.yml
)
|3M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_distill_train.tar
)
|
|ch_PP-OCRv2_det|
【最新】
原始超轻量模型,支持中英文、多语种文本检测|
[
ch_PP-OCRv2_det_cml.yml
](
../../configs/det/ch_PP-OCRv2/ch_PP-OCR
v2
_det_cml.yml
)
|3M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_distill_train.tar
)
|
|ch_ppocr_mobile_slim_v2.0_det|slim裁剪版超轻量模型,支持中英文、多语种文本检测|
[
ch_det_mv3_db_v2.0.yml
](
../../configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml
)
| 2.6M |
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/slim/ch_ppocr_mobile_v2.0_det_prune_infer.tar
)
|
|ch_ppocr_mobile_slim_v2.0_det|slim裁剪版超轻量模型,支持中英文、多语种文本检测|
[
ch_det_mv3_db_v2.0.yml
](
../../configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml
)
| 2.6M |
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/slim/ch_ppocr_mobile_v2.0_det_prune_infer.tar
)
|
|ch_ppocr_mobile_v2.0_det|原始超轻量模型,支持中英文、多语种文本检测|
[
ch_det_mv3_db_v2.0.yml
](
../../configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml
)
|3M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar
)
|
|ch_ppocr_mobile_v2.0_det|原始超轻量模型,支持中英文、多语种文本检测|
[
ch_det_mv3_db_v2.0.yml
](
../../configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml
)
|3M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar
)
|
|ch_ppocr_server_v2.0_det|通用模型,支持中英文、多语种文本检测,比超轻量模型更大,但效果更好|
[
ch_det_res18_db_v2.0.yml
](
../../configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml
)
|47M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar
)
|
|ch_ppocr_server_v2.0_det|通用模型,支持中英文、多语种文本检测,比超轻量模型更大,但效果更好|
[
ch_det_res18_db_v2.0.yml
](
../../configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml
)
|47M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar
)
|
<a
name=
"文本识别模型"
></a>
<a
name=
"文本识别模型"
></a>
##
# 二、
文本识别模型
##
2.
文本识别模型
<a
name=
"中文识别模型"
></a>
<a
name=
"中文识别模型"
></a>
#### 1. 中文识别模型
### 2.1 中文识别模型
|模型名称|模型简介|配置文件|推理模型大小|下载地址|
|模型名称|模型简介|配置文件|推理模型大小|下载地址|
| --- | --- | --- | --- | --- |
| --- | --- | --- | --- | --- |
|ch_PP-OCRv2_rec_slim|slim量化版超轻量模型,支持中英文、数字识别|
[
ch_PP-OCRv2_rec.yml
](
../../configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec.yml
)
| 9M |
[
推理模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_slim_quant_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_slim_quant_train.tar
)
|
|ch_PP-OCRv2_rec_slim|
【最新】
slim量化版超轻量模型,支持中英文、数字识别|
[
ch_PP-OCRv2_rec.yml
](
../../configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec.yml
)
| 9M |
[
推理模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_slim_quant_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_slim_quant_train.tar
)
|
|ch_PP-OCRv2_rec|原始超轻量模型,支持中英文、数字识别|
[
ch_PP-OCRv2_rec.yml
](
../../configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec.yml
)
|8.5M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_train.tar
)
|
|ch_PP-OCRv2_rec|
【最新】
原始超轻量模型,支持中英文、数字识别|
[
ch_PP-OCRv2_rec.yml
](
../../configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec.yml
)
|8.5M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_train.tar
)
|
|ch_ppocr_mobile_slim_v2.0_rec|slim裁剪量化版超轻量模型,支持中英文、数字识别|
[
rec_chinese_lite_train_v2.0.yml
](
../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml
)
| 6M |
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_slim_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_slim_train.tar
)
|
|ch_ppocr_mobile_slim_v2.0_rec|slim裁剪量化版超轻量模型,支持中英文、数字识别|
[
rec_chinese_lite_train_v2.0.yml
](
../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml
)
| 6M |
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_slim_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_slim_train.tar
)
|
|ch_ppocr_mobile_v2.0_rec|原始超轻量模型,支持中英文、数字识别|
[
rec_chinese_lite_train_v2.0.yml
](
../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml
)
|5.2M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_train.tar
)
/
[
预训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar
)
|
|ch_ppocr_mobile_v2.0_rec|原始超轻量模型,支持中英文、数字识别|
[
rec_chinese_lite_train_v2.0.yml
](
../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml
)
|5.2M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_train.tar
)
/
[
预训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar
)
|
|ch_ppocr_server_v2.0_rec|通用模型,支持中英文、数字识别|
[
rec_chinese_common_train_v2.0.yml
](
../../configs/rec/ch_ppocr_v2.0/rec_chinese_common_train_v2.0.yml
)
|94.8M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_train.tar
)
/
[
预训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar
)
|
|ch_ppocr_server_v2.0_rec|通用模型,支持中英文、数字识别|
[
rec_chinese_common_train_v2.0.yml
](
../../configs/rec/ch_ppocr_v2.0/rec_chinese_common_train_v2.0.yml
)
|94.8M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_train.tar
)
/
[
预训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_pre.tar
)
|
...
@@ -57,7 +58,7 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
...
@@ -57,7 +58,7 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
**说明:**
`训练模型`
是基于预训练模型在真实数据与竖排合成文本数据上finetune得到的模型,在真实应用场景中有着更好的表现,
`预训练模型`
则是直接基于全量真实数据与合成数据训练得到,更适合用于在自己的数据集上finetune。
**说明:**
`训练模型`
是基于预训练模型在真实数据与竖排合成文本数据上finetune得到的模型,在真实应用场景中有着更好的表现,
`预训练模型`
则是直接基于全量真实数据与合成数据训练得到,更适合用于在自己的数据集上finetune。
<a
name=
"英文识别模型"
></a>
<a
name=
"英文识别模型"
></a>
###
#
2. 英文识别模型
### 2.
2
英文识别模型
|模型名称|模型简介|配置文件|推理模型大小|下载地址|
|模型名称|模型简介|配置文件|推理模型大小|下载地址|
| --- | --- | --- | --- | --- |
| --- | --- | --- | --- | --- |
...
@@ -65,7 +66,7 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
...
@@ -65,7 +66,7 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
|en_number_mobile_v2.0_rec|原始超轻量模型,支持英文、数字识别|
[
rec_en_number_lite_train.yml
](
../../configs/rec/multi_language/rec_en_number_lite_train.yml
)
|2.6M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_train.tar
)
|
|en_number_mobile_v2.0_rec|原始超轻量模型,支持英文、数字识别|
[
rec_en_number_lite_train.yml
](
../../configs/rec/multi_language/rec_en_number_lite_train.yml
)
|2.6M|
[
推理模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_infer.tar
)
/
[
训练模型
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/multilingual/en_number_mobile_v2.0_rec_train.tar
)
|
<a
name=
"多语言识别模型"
></a>
<a
name=
"多语言识别模型"
></a>
###
# 3.
多语言识别模型(更多语言持续更新中...)
###
2.3
多语言识别模型(更多语言持续更新中...)
|模型名称|字典文件|模型简介|配置文件|推理模型大小|下载地址|
|模型名称|字典文件|模型简介|配置文件|推理模型大小|下载地址|
| --- | --- | --- | --- |--- | --- |
| --- | --- | --- | --- |--- | --- |
...
@@ -86,7 +87,7 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
...
@@ -86,7 +87,7 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
<a
name=
"文本方向分类模型"
></a>
<a
name=
"文本方向分类模型"
></a>
##
# 三、
文本方向分类模型
##
3.
文本方向分类模型
|模型名称|模型简介|配置文件|推理模型大小|下载地址|
|模型名称|模型简介|配置文件|推理模型大小|下载地址|
| --- | --- | --- | --- | --- |
| --- | --- | --- | --- | --- |
...
@@ -95,7 +96,7 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
...
@@ -95,7 +96,7 @@ PaddleOCR提供的可下载模型包括`推理模型`、`训练模型`、`预训
<a
name=
"Paddle-Lite模型"
></a>
<a
name=
"Paddle-Lite模型"
></a>
##
# 四、
Paddle-Lite 模型
##
4.
Paddle-Lite 模型
|模型版本|模型简介|模型大小|检测模型|文本方向分类模型|识别模型|Paddle-Lite版本|
|模型版本|模型简介|模型大小|检测模型|文本方向分类模型|识别模型|Paddle-Lite版本|
|---|---|---|---|---|---|---|
|---|---|---|---|---|---|---|
...
...
doc/doc_ch/pgnet.md
View file @
03bb378f
...
@@ -28,9 +28,9 @@ PGNet算法细节详见[论文](https://www.aaai.org/AAAI21Papers/AAAI-2885.Wang
...
@@ -28,9 +28,9 @@ PGNet算法细节详见[论文](https://www.aaai.org/AAAI21Papers/AAAI-2885.Wang
### 性能指标
### 性能指标
测试集: Total Text
####
测试集: Total Text
测试环境: NVIDIA Tesla V100-SXM2-16GB
####
测试环境: NVIDIA Tesla V100-SXM2-16GB
|PGNetA|det_precision|det_recall|det_f_score|e2e_precision|e2e_recall|e2e_f_score|FPS|下载|
|PGNetA|det_precision|det_recall|det_f_score|e2e_precision|e2e_recall|e2e_f_score|FPS|下载|
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
...
@@ -43,7 +43,7 @@ PGNet算法细节详见[论文](https://www.aaai.org/AAAI21Papers/AAAI-2885.Wang
...
@@ -43,7 +43,7 @@ PGNet算法细节详见[论文](https://www.aaai.org/AAAI21Papers/AAAI-2885.Wang
<a
name=
"环境配置"
></a>
<a
name=
"环境配置"
></a>
## 二、环境配置
## 二、环境配置
请先参考
[
快速安装
](
./installation.md
)
配置PaddleOCR运行环境。
请先参考
[
《运行环境准备》
](
./environment.md
)
配置PaddleOCR运行环境,参考
[
《PaddleOCR全景图与项目克隆》
](
./paddleOCR_overview.md
)
克隆项目
<a
name=
"快速使用"
></a>
<a
name=
"快速使用"
></a>
## 三、快速使用
## 三、快速使用
...
@@ -92,7 +92,7 @@ python3 tools/infer/predict_e2e.py --e2e_algorithm="PGNet" --image_dir="./doc/im
...
@@ -92,7 +92,7 @@ python3 tools/infer/predict_e2e.py --e2e_algorithm="PGNet" --image_dir="./doc/im
|- train.txt # total_text数据集的训练标注
|- train.txt # total_text数据集的训练标注
```
```
t
otal_text
.txt标注文件格式如下,文件名和标注信息中间用"
\t
"分隔:
t
rain
.txt标注文件格式如下,文件名和标注信息中间用"
\t
"分隔:
```
```
" 图像文件名 json.dumps编码的图像标注信息"
" 图像文件名 json.dumps编码的图像标注信息"
rgb/img11.jpg [{"transcription": "ASRAMA", "points": [[214.0, 325.0], [235.0, 308.0], [259.0, 296.0], [286.0, 291.0], [313.0, 295.0], [338.0, 305.0], [362.0, 320.0], [349.0, 347.0], [330.0, 337.0], [310.0, 329.0], [290.0, 324.0], [269.0, 328.0], [249.0, 336.0], [231.0, 346.0]]}, {...}]
rgb/img11.jpg [{"transcription": "ASRAMA", "points": [[214.0, 325.0], [235.0, 308.0], [259.0, 296.0], [286.0, 291.0], [313.0, 295.0], [338.0, 305.0], [362.0, 320.0], [349.0, 347.0], [330.0, 337.0], [310.0, 329.0], [290.0, 324.0], [269.0, 328.0], [249.0, 336.0], [231.0, 346.0]]}, {...}]
...
...
Prev
1
2
3
4
5
6
7
…
11
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment