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
6443988d
Commit
6443988d
authored
Feb 03, 2021
by
WenmuZhou
Browse files
merge paddleocr
parents
69c85d97
e4db8a57
Changes
57
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
402 additions
and
69 deletions
+402
-69
PPOCRLabel/PPOCRLabel.py
PPOCRLabel/PPOCRLabel.py
+23
-15
README.md
README.md
+1
-1
README_ch.md
README_ch.md
+2
-2
configs/rec/rec_mv3_none_bilstm_ctc.yml
configs/rec/rec_mv3_none_bilstm_ctc.yml
+3
-3
configs/rec/rec_mv3_none_none_ctc.yml
configs/rec/rec_mv3_none_none_ctc.yml
+2
-2
configs/rec/rec_mv3_tps_bilstm_att.yml
configs/rec/rec_mv3_tps_bilstm_att.yml
+102
-0
configs/rec/rec_mv3_tps_bilstm_ctc.yml
configs/rec/rec_mv3_tps_bilstm_ctc.yml
+3
-3
configs/rec/rec_r34_vd_none_bilstm_ctc.yml
configs/rec/rec_r34_vd_none_bilstm_ctc.yml
+2
-2
configs/rec/rec_r34_vd_none_none_ctc.yml
configs/rec/rec_r34_vd_none_none_ctc.yml
+2
-2
configs/rec/rec_r34_vd_tps_bilstm_att.yml
configs/rec/rec_r34_vd_tps_bilstm_att.yml
+101
-0
configs/rec/rec_r34_vd_tps_bilstm_ctc.yml
configs/rec/rec_r34_vd_tps_bilstm_ctc.yml
+2
-2
configs/rec/rec_r50_fpn_srn.yml
configs/rec/rec_r50_fpn_srn.yml
+107
-0
deploy/docker/hubserving/cpu/Dockerfile
deploy/docker/hubserving/cpu/Dockerfile
+1
-1
deploy/docker/hubserving/gpu/Dockerfile
deploy/docker/hubserving/gpu/Dockerfile
+1
-1
deploy/slim/quantization/README.md
deploy/slim/quantization/README.md
+1
-1
deploy/slim/quantization/README_en.md
deploy/slim/quantization/README_en.md
+1
-1
doc/doc_ch/FAQ.md
doc/doc_ch/FAQ.md
+40
-29
doc/doc_ch/algorithm_overview.md
doc/doc_ch/algorithm_overview.md
+6
-2
doc/doc_ch/angle_class.md
doc/doc_ch/angle_class.md
+1
-1
doc/doc_ch/detection.md
doc/doc_ch/detection.md
+1
-1
No files found.
PPOCRLabel/PPOCRLabel.py
View file @
6443988d
...
...
@@ -1031,7 +1031,7 @@ class MainWindow(QMainWindow, WindowMixin):
for
box
in
self
.
result_dic
:
trans_dic
=
{
"label"
:
box
[
1
][
0
],
"points"
:
box
[
0
],
'difficult'
:
False
}
if
trans_dic
[
"label"
]
is
""
and
mode
==
'Auto'
:
if
trans_dic
[
"label"
]
==
""
and
mode
==
'Auto'
:
continue
shapes
.
append
(
trans_dic
)
...
...
@@ -1450,7 +1450,7 @@ class MainWindow(QMainWindow, WindowMixin):
item
=
QListWidgetItem
(
closeicon
,
filename
)
self
.
fileListWidget
.
addItem
(
item
)
print
(
'
d
irPath in importDirImages is'
,
dirpath
)
print
(
'
D
irPath in importDirImages is'
,
dirpath
)
self
.
iconlist
.
clear
()
self
.
additems5
(
dirpath
)
self
.
changeFileFolder
=
True
...
...
@@ -1459,7 +1459,6 @@ class MainWindow(QMainWindow, WindowMixin):
self
.
reRecogButton
.
setEnabled
(
True
)
self
.
actions
.
AutoRec
.
setEnabled
(
True
)
self
.
actions
.
reRec
.
setEnabled
(
True
)
self
.
actions
.
saveLabel
.
setEnabled
(
True
)
def
openPrevImg
(
self
,
_value
=
False
):
...
...
@@ -1764,7 +1763,7 @@ class MainWindow(QMainWindow, WindowMixin):
QMessageBox
.
information
(
self
,
"Information"
,
msg
)
return
result
=
self
.
ocr
.
ocr
(
img_crop
,
cls
=
True
,
det
=
False
)
if
result
[
0
][
0
]
is
not
''
:
if
result
[
0
][
0
]
!=
''
:
result
.
insert
(
0
,
box
)
print
(
'result in reRec is '
,
result
)
self
.
result_dic
.
append
(
result
)
...
...
@@ -1795,7 +1794,7 @@ class MainWindow(QMainWindow, WindowMixin):
QMessageBox
.
information
(
self
,
"Information"
,
msg
)
return
result
=
self
.
ocr
.
ocr
(
img_crop
,
cls
=
True
,
det
=
False
)
if
result
[
0
][
0
]
is
not
''
:
if
result
[
0
][
0
]
!=
''
:
result
.
insert
(
0
,
box
)
print
(
'result in reRec is '
,
result
)
if
result
[
1
][
0
]
==
shape
.
label
:
...
...
@@ -1862,6 +1861,8 @@ class MainWindow(QMainWindow, WindowMixin):
for
each
in
states
:
file
,
state
=
each
.
split
(
'
\t
'
)
self
.
fileStatedict
[
file
]
=
1
self
.
actions
.
saveLabel
.
setEnabled
(
True
)
self
.
actions
.
saveRec
.
setEnabled
(
True
)
def
saveFilestate
(
self
):
...
...
@@ -1919,22 +1920,29 @@ class MainWindow(QMainWindow, WindowMixin):
rec_gt_dir
=
os
.
path
.
dirname
(
self
.
PPlabelpath
)
+
'/rec_gt.txt'
crop_img_dir
=
os
.
path
.
dirname
(
self
.
PPlabelpath
)
+
'/crop_img/'
ques_img
=
[]
if
not
os
.
path
.
exists
(
crop_img_dir
):
os
.
mkdir
(
crop_img_dir
)
with
open
(
rec_gt_dir
,
'w'
,
encoding
=
'utf-8'
)
as
f
:
for
key
in
self
.
fileStatedict
:
idx
=
self
.
getImglabelidx
(
key
)
try
:
img
=
cv2
.
imread
(
key
)
for
i
,
label
in
enumerate
(
self
.
PPlabel
[
idx
]):
if
label
[
'difficult'
]:
continue
img
=
cv2
.
imread
(
key
)
img_crop
=
get_rotate_crop_image
(
img
,
np
.
array
(
label
[
'points'
],
np
.
float32
))
img_name
=
os
.
path
.
splitext
(
os
.
path
.
basename
(
idx
))[
0
]
+
'_crop_'
+
str
(
i
)
+
'.jpg'
cv2
.
imwrite
(
crop_img_dir
+
img_name
,
img_crop
)
f
.
write
(
'crop_img/'
+
img_name
+
'
\t
'
)
f
.
write
(
label
[
'transcription'
]
+
'
\n
'
)
QMessageBox
.
information
(
self
,
"Information"
,
"Cropped images has been saved in "
+
str
(
crop_img_dir
))
except
Exception
as
e
:
ques_img
.
append
(
key
)
print
(
"Can not read image "
,
e
)
if
ques_img
:
QMessageBox
.
information
(
self
,
"Information"
,
"The following images can not be saved, "
"please check the image path and labels.
\n
"
+
""
.
join
(
str
(
i
)
+
'
\n
'
for
i
in
ques_img
))
QMessageBox
.
information
(
self
,
"Information"
,
"Cropped images have been saved in "
+
str
(
crop_img_dir
))
def
speedChoose
(
self
):
if
self
.
labelDialogOption
.
isChecked
():
...
...
@@ -1991,7 +1999,7 @@ if __name__ == '__main__':
resource_file
=
'./libs/resources.py'
if
not
os
.
path
.
exists
(
resource_file
):
output
=
os
.
system
(
'pyrcc5 -o libs/resources.py resources.qrc'
)
assert
output
is
0
,
"operate the cmd have some problems ,please check whether there is a in the lib "
\
assert
output
==
0
,
"operate the cmd have some problems ,please check whether there is a in the lib "
\
"directory resources.py "
import
libs.resources
sys
.
exit
(
main
())
README.md
View file @
6443988d
...
...
@@ -5,7 +5,7 @@ PaddleOCR aims to create multilingual, awesome, leading, and practical OCR tools
## Notice
PaddleOCR supports both dynamic graph and static graph programming paradigm
-
Dynamic graph: dygraph branch (default),
**supported by paddle 2.0
rc1+
([installation](./doc/doc_en/installation_en.md))**
-
Dynamic graph: dygraph branch (default),
**supported by paddle 2.0
.0
([installation](./doc/doc_en/installation_en.md))**
-
Static graph: develop branch
**Recent updates**
...
...
README_ch.md
View file @
6443988d
...
...
@@ -4,12 +4,12 @@
PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。
## 注意
PaddleOCR同时支持动态图与静态图两种编程范式
-
动态图版本:dygraph分支(默认),需将paddle版本升级至2.0
rc1+
(
[
快速安装
](
./doc/doc_ch/installation.md
)
)
-
动态图版本:dygraph分支(默认),需将paddle版本升级至2.0
.0
(
[
快速安装
](
./doc/doc_ch/installation.md
)
)
-
静态图版本:develop分支
**近期更新**
-
2021.2.1
[
FAQ
](
./doc/doc_ch/FAQ.md
)
新增5个高频问题,总数162个,每周一都会更新,欢迎大家持续关注。
-
2021.1.26,28,29 PaddleOCR官方研发团队带来技术深入解读三日直播课,1月26日、28日、29日晚上19:30,
[
直播地址
](
https://live.bilibili.com/21689802
)
-
2021.1.25
[
FAQ
](
./doc/doc_ch/FAQ.md
)
新增5个高频问题,总数157个,每周一都会更新,欢迎大家持续关注。
-
2021.1.21 更新多语言识别模型,目前支持语种超过27种,
[
多语言模型下载
](
./doc/doc_ch/models_list.md
)
,包括中文简体、中文繁体、英文、法文、德文、韩文、日文、意大利文、西班牙文、葡萄牙文、俄罗斯文、阿拉伯文等,后续计划可以参考
[
多语言研发计划
](
https://github.com/PaddlePaddle/PaddleOCR/issues/1048
)
-
2020.12.15 更新数据合成工具
[
Style-Text
](
./StyleText/README_ch.md
)
,可以批量合成大量与目标场景类似的图像,在多个场景验证,效果明显提升。
-
2020.11.25 更新半自动标注工具
[
PPOCRLabel
](
./PPOCRLabel/README_ch.md
)
,辅助开发者高效完成标注任务,输出格式与PP-OCR训练任务完美衔接。
...
...
configs/rec/rec_mv3_none_bilstm_ctc.yml
View file @
6443988d
Global
:
use_gpu
:
t
rue
use_gpu
:
T
rue
epoch_num
:
72
log_smooth_window
:
20
print_batch_step
:
10
...
...
@@ -59,7 +59,7 @@ Metric:
Train
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/training/
transforms
:
-
DecodeImage
:
# load image
...
...
@@ -78,7 +78,7 @@ Train:
Eval
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/validation/
transforms
:
-
DecodeImage
:
# load image
...
...
configs/rec/rec_mv3_none_none_ctc.yml
View file @
6443988d
...
...
@@ -58,7 +58,7 @@ Metric:
Train
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/training/
transforms
:
-
DecodeImage
:
# load image
...
...
@@ -77,7 +77,7 @@ Train:
Eval
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/validation/
transforms
:
-
DecodeImage
:
# load image
...
...
configs/rec/rec_mv3_tps_bilstm_att.yml
0 → 100644
View file @
6443988d
Global
:
use_gpu
:
True
epoch_num
:
72
log_smooth_window
:
20
print_batch_step
:
10
save_model_dir
:
./output/rec/rec_mv3_tps_bilstm_att/
save_epoch_step
:
3
# evaluation is run every 5000 iterations after the 4000th iteration
eval_batch_step
:
[
0
,
2000
]
# if pretrained_model is saved in static mode, load_static_weights must set to True
cal_metric_during_train
:
True
pretrained_model
:
checkpoints
:
save_inference_dir
:
use_visualdl
:
False
infer_img
:
doc/imgs_words/ch/word_1.jpg
# for data or label process
character_dict_path
:
character_type
:
en
max_text_length
:
25
infer_mode
:
False
use_space_char
:
False
Optimizer
:
name
:
Adam
beta1
:
0.9
beta2
:
0.999
lr
:
learning_rate
:
0.0005
regularizer
:
name
:
'
L2'
factor
:
0.00001
Architecture
:
model_type
:
rec
algorithm
:
RARE
Transform
:
name
:
TPS
num_fiducial
:
20
loc_lr
:
0.1
model_name
:
small
Backbone
:
name
:
MobileNetV3
scale
:
0.5
model_name
:
large
Neck
:
name
:
SequenceEncoder
encoder_type
:
rnn
hidden_size
:
96
Head
:
name
:
AttentionHead
hidden_size
:
96
Loss
:
name
:
AttentionLoss
PostProcess
:
name
:
AttnLabelDecode
Metric
:
name
:
RecMetric
main_indicator
:
acc
Train
:
dataset
:
name
:
LMDBDataSet
data_dir
:
../training/
transforms
:
-
DecodeImage
:
# load image
img_mode
:
BGR
channel_first
:
False
-
AttnLabelEncode
:
# Class handling label
-
RecResizeImg
:
image_shape
:
[
3
,
32
,
100
]
-
KeepKeys
:
keep_keys
:
[
'
image'
,
'
label'
,
'
length'
]
# dataloader will return list in this order
loader
:
shuffle
:
True
batch_size_per_card
:
256
drop_last
:
True
num_workers
:
8
Eval
:
dataset
:
name
:
LMDBDataSet
data_dir
:
../validation/
transforms
:
-
DecodeImage
:
# load image
img_mode
:
BGR
channel_first
:
False
-
AttnLabelEncode
:
# Class handling label
-
RecResizeImg
:
image_shape
:
[
3
,
32
,
100
]
-
KeepKeys
:
keep_keys
:
[
'
image'
,
'
label'
,
'
length'
]
# dataloader will return list in this order
loader
:
shuffle
:
False
drop_last
:
False
batch_size_per_card
:
256
num_workers
:
1
configs/rec/rec_mv3_tps_bilstm_ctc.yml
View file @
6443988d
Global
:
use_gpu
:
t
rue
use_gpu
:
T
rue
epoch_num
:
72
log_smooth_window
:
20
print_batch_step
:
10
...
...
@@ -63,7 +63,7 @@ Metric:
Train
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/training/
transforms
:
-
DecodeImage
:
# load image
...
...
@@ -82,7 +82,7 @@ Train:
Eval
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/validation/
transforms
:
-
DecodeImage
:
# load image
...
...
configs/rec/rec_r34_vd_none_bilstm_ctc.yml
View file @
6443988d
...
...
@@ -58,7 +58,7 @@ Metric:
Train
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/training/
transforms
:
-
DecodeImage
:
# load image
...
...
@@ -77,7 +77,7 @@ Train:
Eval
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/validation/
transforms
:
-
DecodeImage
:
# load image
...
...
configs/rec/rec_r34_vd_none_none_ctc.yml
View file @
6443988d
...
...
@@ -56,7 +56,7 @@ Metric:
Train
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/training/
transforms
:
-
DecodeImage
:
# load image
...
...
@@ -75,7 +75,7 @@ Train:
Eval
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/validation/
transforms
:
-
DecodeImage
:
# load image
...
...
configs/rec/rec_r34_vd_tps_bilstm_att.yml
0 → 100644
View file @
6443988d
Global
:
use_gpu
:
True
epoch_num
:
400
log_smooth_window
:
20
print_batch_step
:
10
save_model_dir
:
./output/rec/b3_rare_r34_none_gru/
save_epoch_step
:
3
# evaluation is run every 5000 iterations after the 4000th iteration
eval_batch_step
:
[
0
,
2000
]
# if pretrained_model is saved in static mode, load_static_weights must set to True
cal_metric_during_train
:
True
pretrained_model
:
checkpoints
:
save_inference_dir
:
use_visualdl
:
False
infer_img
:
doc/imgs_words/ch/word_1.jpg
# for data or label process
character_dict_path
:
character_type
:
en
max_text_length
:
25
infer_mode
:
False
use_space_char
:
False
Optimizer
:
name
:
Adam
beta1
:
0.9
beta2
:
0.999
lr
:
learning_rate
:
0.0005
regularizer
:
name
:
'
L2'
factor
:
0.00000
Architecture
:
model_type
:
rec
algorithm
:
RARE
Transform
:
name
:
TPS
num_fiducial
:
20
loc_lr
:
0.1
model_name
:
large
Backbone
:
name
:
ResNet
layers
:
34
Neck
:
name
:
SequenceEncoder
encoder_type
:
rnn
hidden_size
:
256
#96
Head
:
name
:
AttentionHead
# AttentionHead
hidden_size
:
256
#
l2_decay
:
0.00001
Loss
:
name
:
AttentionLoss
PostProcess
:
name
:
AttnLabelDecode
Metric
:
name
:
RecMetric
main_indicator
:
acc
Train
:
dataset
:
name
:
LMDBDataSet
data_dir
:
../training/
transforms
:
-
DecodeImage
:
# load image
img_mode
:
BGR
channel_first
:
False
-
AttnLabelEncode
:
# Class handling label
-
RecResizeImg
:
image_shape
:
[
3
,
32
,
100
]
-
KeepKeys
:
keep_keys
:
[
'
image'
,
'
label'
,
'
length'
]
# dataloader will return list in this order
loader
:
shuffle
:
True
batch_size_per_card
:
256
drop_last
:
True
num_workers
:
8
Eval
:
dataset
:
name
:
LMDBDataSet
data_dir
:
../validation/
transforms
:
-
DecodeImage
:
# load image
img_mode
:
BGR
channel_first
:
False
-
AttnLabelEncode
:
# Class handling label
-
RecResizeImg
:
image_shape
:
[
3
,
32
,
100
]
-
KeepKeys
:
keep_keys
:
[
'
image'
,
'
label'
,
'
length'
]
# dataloader will return list in this order
loader
:
shuffle
:
False
drop_last
:
False
batch_size_per_card
:
256
num_workers
:
8
configs/rec/rec_r34_vd_tps_bilstm_ctc.yml
View file @
6443988d
...
...
@@ -62,7 +62,7 @@ Metric:
Train
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/training/
transforms
:
-
DecodeImage
:
# load image
...
...
@@ -81,7 +81,7 @@ Train:
Eval
:
dataset
:
name
:
LMDBDat
e
Set
name
:
LMDBDat
a
Set
data_dir
:
./train_data/data_lmdb_release/validation/
transforms
:
-
DecodeImage
:
# load image
...
...
configs/rec/rec_r50_fpn_srn.yml
0 → 100644
View file @
6443988d
Global
:
use_gpu
:
True
epoch_num
:
72
log_smooth_window
:
20
print_batch_step
:
5
save_model_dir
:
./output/rec/srn_new
save_epoch_step
:
3
# evaluation is run every 5000 iterations after the 4000th iteration
eval_batch_step
:
[
0
,
5000
]
# if pretrained_model is saved in static mode, load_static_weights must set to True
cal_metric_during_train
:
True
pretrained_model
:
checkpoints
:
save_inference_dir
:
use_visualdl
:
False
infer_img
:
doc/imgs_words/ch/word_1.jpg
# for data or label process
character_dict_path
:
character_type
:
en
max_text_length
:
25
num_heads
:
8
infer_mode
:
False
use_space_char
:
False
Optimizer
:
name
:
Adam
beta1
:
0.9
beta2
:
0.999
clip_norm
:
10.0
lr
:
learning_rate
:
0.0001
Architecture
:
model_type
:
rec
algorithm
:
SRN
in_channels
:
1
Transform
:
Backbone
:
name
:
ResNetFPN
Head
:
name
:
SRNHead
max_text_length
:
25
num_heads
:
8
num_encoder_TUs
:
2
num_decoder_TUs
:
4
hidden_dims
:
512
Loss
:
name
:
SRNLoss
PostProcess
:
name
:
SRNLabelDecode
Metric
:
name
:
RecMetric
main_indicator
:
acc
Train
:
dataset
:
name
:
LMDBDataSet
data_dir
:
./train_data/srn_train_data_duiqi
transforms
:
-
DecodeImage
:
# load image
img_mode
:
BGR
channel_first
:
False
-
SRNLabelEncode
:
# Class handling label
-
SRNRecResizeImg
:
image_shape
:
[
1
,
64
,
256
]
-
KeepKeys
:
keep_keys
:
[
'
image'
,
'
label'
,
'
length'
,
'
encoder_word_pos'
,
'
gsrm_word_pos'
,
'
gsrm_slf_attn_bias1'
,
'
gsrm_slf_attn_bias2'
]
# dataloader will return list in this order
loader
:
shuffle
:
False
batch_size_per_card
:
64
drop_last
:
False
num_workers
:
4
Eval
:
dataset
:
name
:
LMDBDataSet
data_dir
:
./train_data/data_lmdb_release/evaluation
transforms
:
-
DecodeImage
:
# load image
img_mode
:
BGR
channel_first
:
False
-
SRNLabelEncode
:
# Class handling label
-
SRNRecResizeImg
:
image_shape
:
[
1
,
64
,
256
]
-
KeepKeys
:
keep_keys
:
[
'
image'
,
'
label'
,
'
length'
,
'
encoder_word_pos'
,
'
gsrm_word_pos'
,
'
gsrm_slf_attn_bias1'
,
'
gsrm_slf_attn_bias2'
]
loader
:
shuffle
:
False
drop_last
:
False
batch_size_per_card
:
32
num_workers
:
4
deploy/docker/hubserving/cpu/Dockerfile
View file @
6443988d
# Version: 2.0.0
FROM
registry.baidubce.com/paddlepaddle/paddle:2.0.0
rc1
FROM
registry.baidubce.com/paddlepaddle/paddle:2.0.0
# PaddleOCR base on Python3.7
RUN
pip3.7
install
--upgrade
pip
-i
https://mirror.baidu.com/pypi/simple
...
...
deploy/docker/hubserving/gpu/Dockerfile
View file @
6443988d
# Version: 2.0.0
FROM
egistry.baidubce.com/paddlepaddle/paddle:2.0.0
rc1
-gpu-cuda10.
0
-cudnn7
FROM
r
egistry.baidubce.com/paddlepaddle/paddle:2.0.0-gpu-cuda10.
1
-cudnn7
# PaddleOCR base on Python3.7
RUN
pip3.7
install
--upgrade
pip
-i
https://mirror.baidu.com/pypi/simple
...
...
deploy/slim/quantization/README.md
View file @
6443988d
...
...
@@ -42,7 +42,7 @@ python deploy/slim/quantization/quant.py -c configs/det/det_mv3_db.yml -o Global
# 比如下载提供的训练模型
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_train.tar
tar
-xf
ch_ppocr_mobile_v2.0_det_train.tar
python deploy/slim/quantization/quant.py
-c
configs/det/det_mv3_db.yml
-o
Global.pretrain_weights
=
./ch_ppocr_mobile_v2.0_det_train/best_accuracy Global.save_
model
_dir
=
./output/quant_model
python deploy/slim/quantization/quant.py
-c
configs/det/det_mv3_db.yml
-o
Global.pretrain_weights
=
./ch_ppocr_mobile_v2.0_det_train/best_accuracy Global.save_
inference
_dir
=
./output/quant_
inference_
model
```
如果要训练识别模型的量化,修改配置文件和加载的模型参数即可。
...
...
deploy/slim/quantization/README_en.md
View file @
6443988d
...
...
@@ -58,7 +58,7 @@ python deploy/slim/quantization/quant.py -c configs/det/det_mv3_db.yml -o Global
After getting the model after pruning and finetuning we, can export it as inference_model for predictive deployment:
```
bash
python deploy/slim/quantization/export_model.py
-c
configs/det/det_mv3_db.yml
-o
Global.checkpoints
=
output/quant_model/best_accuracy Global.save_
model
_dir
=
./output/quant_inference_model
python deploy/slim/quantization/export_model.py
-c
configs/det/det_mv3_db.yml
-o
Global.checkpoints
=
output/quant_model/best_accuracy Global.save_
inference
_dir
=
./output/quant_inference_model
```
### 5. Deploy
...
...
doc/doc_ch/FAQ.md
View file @
6443988d
...
...
@@ -9,43 +9,38 @@
## PaddleOCR常见问题汇总(持续更新)
*
[
近期更新(2021.
1.25
)
](
#近期更新
)
*
[
近期更新(2021.
2.1
)
](
#近期更新
)
*
[
【精选】OCR精选10个问题
](
#OCR精选10个问题
)
*
[
【理论篇】OCR通用32个问题
](
#OCR通用问题
)
*
[
基础知识7题
](
#基础知识
)
*
[
数据集7题
](
#数据集2
)
*
[
模型训练调优18题
](
#模型训练调优2
)
*
[
【实战篇】PaddleOCR实战1
15
个问题
](
#PaddleOCR实战问题
)
*
[
【实战篇】PaddleOCR实战1
20
个问题
](
#PaddleOCR实战问题
)
*
[
使用咨询38题
](
#使用咨询
)
*
[
数据集1
7
题
](
#数据集3
)
*
[
模型训练调优
28
题
](
#模型训练调优3
)
*
[
预测部署3
2
题
](
#预测部署3
)
*
[
数据集1
8
题
](
#数据集3
)
*
[
模型训练调优
30
题
](
#模型训练调优3
)
*
[
预测部署3
4
题
](
#预测部署3
)
<a
name=
"近期更新"
></a>
## 近期更新(2021.
1.25
)
## 近期更新(2021.
2.1
)
#### Q3.1.37: 小语种模型只有识别模型,没有检测模型吗?
**A**
:小语种(包括纯英文数字)的检测模型和中文的检测模型是共用的,在训练中文检测模型时加入了多语言数据。https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_en/models_list_en.md#1-text-detection-model。
#### Q3.1.38: module 'paddle.distributed' has no attribute ‘get_rank’。
#### Q3.2.18: PaddleOCR动态图版本如何finetune?
**A**
:finetune需要将配置文件里的 Global.load_static_weights设置为false,如果没有此字段可以手动添加,然后将模型地址放到Global.pretrained_model字段下即可。
**A**
:Paddle版本问题,请安装2.0版本Paddle:pip install paddlepaddle==2.0.0rc1。
#### Q3.4.30: PaddleOCR是否支持在华为鲲鹏920CPU上部署?
#### Q3.3.29: 微调v1.1预训练的模型,可以直接用文字垂直排列和上下颠倒的图片吗?还是必须要水平排列的?
**A**
:1.1和2.0的模型一样,微调时,垂直排列的文字需要逆时针旋转 90° 后加入训练,上下颠倒的需要旋转为水平的。
**A**
:目前Paddle的预测库是支持华为鲲鹏920CPU的,但是OCR还没在这些芯片上测试过,可以自己调试,有问题反馈给我们。
#### Q3.3.30: 模型训练过程中如何得到 best_accuracy 模型?
**A**
:配置文件里的eval_batch_step字段用来控制多少次iter进行一次eval,在eval完成后会自动生成 best_accuracy 模型,所以如果希望很快就能拿到best_accuracy模型,可以将eval_batch_step改小一点(例如,10)。
#### Q3.4.31: 采用Paddle-Lite进行端侧部署,出现问题,环境没问题。
**A**
:如果你的预测库是自己编译的,那么你的nb文件也要自己编译,用同一个lite版本。不能直接用下载的nb文件,因为版本不同。
#### Q3.4.33: 如何多进程运行paddleocr?
**A**
:实例化多个paddleocr服务,然后将服务注册到注册中心,之后通过注册中心统一调度即可,关于注册中心,可以搜索eureka了解一下具体使用,其他的注册中心也行。
#### Q3.4.32: PaddleOCR的模型支持onnx转换吗?
**A**
:我们目前已经通过Paddle2ONNX来支持各模型套件的转换,PaddleOCR基于PaddlePaddle 2.0的版本(dygraph分支)已经支持导出为ONNX,欢迎关注Paddle2ONNX,了解更多项目的进展:
Paddle2ONNX项目:https://github.com/PaddlePaddle/Paddle2ONNX
Paddle2ONNX支持转换的
[
模型列表
](
https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/docs/zh/model_zoo.md#%E5%9B%BE%E5%83%8Focr
)
#### Q3.4.34: 2.0训练出来的模型,能否在1.1版本上进行部署?
**A**
:这个是不建议的,2.0训练出来的模型建议使用dygraph分支里提供的部署代码。
<a
name=
"OCR精选10个问题"
></a>
## 【精选】OCR精选10个问题
...
...
@@ -397,13 +392,13 @@ Paddle2ONNX支持转换的[模型列表](https://github.com/PaddlePaddle/Paddle2
**A**
:动态图版本正在紧锣密鼓开发中,将于2020年12月16日发布,敬请关注。
#### Q3.1.22:ModuleNotFoundError: No module named 'paddle.nn',
**A**
:paddle.nn是Paddle2.0版本特有的功能,请安装大于等于Paddle 2.0.0
rc1
的版本,安装方式为
**A**
:paddle.nn是Paddle2.0版本特有的功能,请安装大于等于Paddle 2.0.0的版本,安装方式为
```
python3 -m pip install paddlepaddle-gpu==2.0.0
rc1
-i https://mirror.baidu.com/pypi/simple
python3 -m pip install paddlepaddle-gpu==2.0.0 -i https://mirror.baidu.com/pypi/simple
```
#### Q3.1.23: ImportError: /usr/lib/x86_64_linux-gnu/libstdc++.so.6:version `CXXABI_1.3.11` not found (required by /usr/lib/python3.6/site-package/paddle/fluid/core+avx.so)
**A**
:这个问题是glibc版本不足导致的,Paddle2.0
rc1
版本对gcc版本和glib版本有更高的要求,推荐gcc版本为8.2,glibc版本2.12以上。
**A**
:这个问题是glibc版本不足导致的,Paddle2.0
.0
版本对gcc版本和glib版本有更高的要求,推荐gcc版本为8.2,glibc版本2.12以上。
如果您的环境不满足这个要求,或者使用的docker镜像为:
`hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda9.0-cudnn7-dev`
`hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda9.0-cudnn7-dev`
,安装Paddle2.0rc版本可能会出现上述错误,2.0版本推荐使用新的docker镜像
`paddlepaddle/paddle:latest-dev-cuda10.1-cudnn7-gcc82`
。
...
...
@@ -415,7 +410,7 @@ python3 -m pip install paddlepaddle-gpu==2.0.0rc1 -i https://mirror.baidu.com/py
-
develop:基于Paddle静态图开发的分支,推荐使用paddle1.8 或者2.0版本,该分支具备完善的模型训练、预测、推理部署、量化裁剪等功能,领先于release/1.1分支。
-
release/1.1:PaddleOCR 发布的第一个稳定版本,基于静态图开发,具备完善的训练、预测、推理部署、量化裁剪等功能。
-
dygraph:基于Paddle动态图开发的分支,目前仍在开发中,未来将作为主要开发分支,运行要求使用Paddle2.0
rc1版本,目前仍在开发中
。
-
dygraph:基于Paddle动态图开发的分支,目前仍在开发中,未来将作为主要开发分支,运行要求使用Paddle2.0
.0版本
。
-
release/2.0-rc1-0:PaddleOCR发布的第二个稳定版本,基于动态图和paddle2.0版本开发,动态图开发的工程更易于调试,目前支,支持模型训练、预测,暂不支持移动端部署。
如果您已经上手过PaddleOCR,并且希望在各种环境上部署PaddleOCR,目前建议使用静态图分支,develop或者release/1.1分支。如果您是初学者,想快速训练,调试PaddleOCR中的算法,建议尝鲜PaddleOCR dygraph分支。
...
...
@@ -432,7 +427,7 @@ python3 -m pip install paddlepaddle-gpu==2.0.0rc1 -i https://mirror.baidu.com/py
#### Q3.1.27: 如何可视化acc,loss曲线图,模型网络结构图等?
**A**
:在配置文件里有
`use_visualdl`
的参数,设置为True即可,更多的使用命令可以参考:
[
VisualDL使用指南
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/
2.0-rc1
/guides/03_VisualDL/visualdl.html
)
。
**A**
:在配置文件里有
`use_visualdl`
的参数,设置为True即可,更多的使用命令可以参考:
[
VisualDL使用指南
](
https://www.paddlepaddle.org.cn/documentation/docs/zh/
develop
/guides/03_VisualDL/visualdl.html
)
。
#### Q3.1.28: 在使用StyleText数据合成工具的时候,报错`ModuleNotFoundError: No module named 'utils.config'`,这是为什么呢?
...
...
@@ -451,7 +446,7 @@ https://github.com/PaddlePaddle/PaddleOCR/blob/de3e2e7cd3b8b65ee02d7a41e570fa5b5
#### Q3.1.31: 怎么输出网络结构以及每层的参数信息?
**A**
:可以使用
`paddle.summary`
, 具体参考:https://www.paddlepaddle.org.cn/documentation/docs/zh/
2.0-rc1
/api/paddle/hapi/model_summary/summary_cn.html
#summary
。
**A**
:可以使用
`paddle.summary`
, 具体参考:https://www.paddlepaddle.org.cn/documentation/docs/zh/
develop
/api/paddle/hapi/model_summary/summary_cn.html。
#### Q3.1.32 能否修改StyleText配置文件中的分辨率?
...
...
@@ -485,7 +480,7 @@ StyleText的用途主要是:提取style_image中的字体、背景等style信
#### Q3.1.38: module 'paddle.distributed' has no attribute ‘get_rank’。
**A**
:Paddle版本问题,请安装2.0版本Paddle:pip install paddlepaddle==2.0.0
rc1
。
**A**
:Paddle版本问题,请安装2.0版本Paddle:pip install paddlepaddle==2.0.0。
<a
name=
"数据集3"
></a>
### 数据集
...
...
@@ -578,6 +573,9 @@ StyleText的用途主要是:提取style_image中的字体、背景等style信
**A**
:PPOCRLabel可运行于Linux、Windows、MacOS等多种系统。操作步骤可以参考文档,https://github.com/PaddlePaddle/PaddleOCR/blob/develop/PPOCRLabel/README.md
#### Q3.2.18: PaddleOCR动态图版本如何finetune?
**A**
:finetune需要将配置文件里的 Global.load_static_weights设置为false,如果没有此字段可以手动添加,然后将模型地址放到Global.pretrained_model字段下即可。
<a
name=
"模型训练调优3"
></a>
### 模型训练调优
...
...
@@ -723,6 +721,12 @@ ps -axu | grep train.py | awk '{print $2}' | xargs kill -9
**A**
:可以参考
[
配置文件
](
../../configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml
)
在Train
[
'dataset'
][
'transforms'
]
添加RecAug字段,使数据增强生效。可以通过添加对aug_prob设置,表示每种数据增强采用的概率。aug_prob默认是0.4.由于tia数据增强特殊性,默认不采用,可以通过添加use_tia设置,使tia数据增强生效。详细设置可以参考
[
ISSUE 1744
](
https://github.com/PaddlePaddle/PaddleOCR/issues/1744
)
。
#### Q3.3.29: 微调v1.1预训练的模型,可以直接用文字垂直排列和上下颠倒的图片吗?还是必须要水平排列的?
**A**
:1.1和2.0的模型一样,微调时,垂直排列的文字需要逆时针旋转 90°后加入训练,上下颠倒的需要旋转为水平的。
#### Q3.3.30: 模型训练过程中如何得到 best_accuracy 模型?
**A**
:配置文件里的eval_batch_step字段用来控制多少次iter进行一次eval,在eval完成后会自动生成 best_accuracy 模型,所以如果希望很快就能拿到best_accuracy模型,可以将eval_batch_step改小一点,如改为[10,10],这样表示第10次迭代后,以后没隔10个迭代就进行一次模型的评估。
<a
name=
"预测部署3"
></a>
### 预测部署
...
...
@@ -878,3 +882,10 @@ img = cv.imdecode(img_array, -1)
**A**
:我们目前已经通过Paddle2ONNX来支持各模型套件的转换,PaddleOCR基于PaddlePaddle 2.0的版本(dygraph分支)已经支持导出为ONNX,欢迎关注Paddle2ONNX,了解更多项目的进展:
Paddle2ONNX项目:https://github.com/PaddlePaddle/Paddle2ONNX
Paddle2ONNX支持转换的
[
模型列表
](
https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/docs/zh/model_zoo.md#%E5%9B%BE%E5%83%8Focr
)
#### Q3.4.33: 如何多进程运行paddleocr?
**A**
:实例化多个paddleocr服务,然后将服务注册到注册中心,之后通过注册中心统一调度即可,关于注册中心,可以搜索eureka了解一下具体使用,其他的注册中心也行。
#### Q3.4.34: 2.0训练出来的模型,能否在1.1版本上进行部署?
**A**
:这个是不建议的,2.0训练出来的模型建议使用dygraph分支里提供的部署代码。
doc/doc_ch/algorithm_overview.md
View file @
6443988d
...
...
@@ -40,8 +40,8 @@ PaddleOCR基于动态图开源的文本识别算法列表:
-
[
x] CRNN([paper
](
https://arxiv.org/abs/1507.05717
)
)[7](ppocr推荐)
-
[
x] Rosetta([paper
](
https://arxiv.org/abs/1910.05085
)
)[10]
-
[
x] STAR-Net([paper
](
http://www.bmva.org/bmvc/2016/papers/paper043/index.html
)
)[11]
-
[
] RARE([paper
](
https://arxiv.org/abs/1603.03915v1
)
)[12]
coming soon
-
[
] SRN([paper
](
https://arxiv.org/abs/2003.12294
)
)[5]
coming soon
-
[
x
] RARE([paper
](
https://arxiv.org/abs/1603.03915v1
)
)[12]
-
[
x
] SRN([paper
](
https://arxiv.org/abs/2003.12294
)
)[5]
参考
[
DTRB
][
3
]
(https://arxiv.org/abs/1904.01906)文字识别训练和评估流程,使用MJSynth和SynthText两个文字识别数据集训练,在IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE数据集上进行评估,算法效果如下:
...
...
@@ -53,5 +53,9 @@ PaddleOCR基于动态图开源的文本识别算法列表:
|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|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|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
)
|
PaddleOCR文本识别算法的训练和使用请参考文档教程中
[
模型训练/评估中的文本识别部分
](
./recognition.md
)
。
doc/doc_ch/angle_class.md
View file @
6443988d
...
...
@@ -67,7 +67,7 @@ PaddleOCR提供了训练脚本、评估脚本和预测脚本。
*如果您安装的是cpu版本,请将配置文件中的 `use_gpu` 字段修改为false*
```
# GPU训练 支持单卡,多卡训练,通过 '--gpus' 指定卡号
,如果使用的paddle版本小于2.0rc1,请使用'--select_gpus'参数选择要使用的GPU
# GPU训练 支持单卡,多卡训练,通过 '--gpus' 指定卡号
。
# 启动训练,下面的命令已经写入train.sh文件中,只需修改文件里的配置文件路径即可
python3 -m paddle.distributed.launch --gpus '0,1,2,3,4,5,6,7' tools/train.py -c configs/cls/cls_mv3.yml
```
...
...
doc/doc_ch/detection.md
View file @
6443988d
...
...
@@ -76,7 +76,7 @@ tar -xf ./pretrain_models/MobileNetV3_large_x0_5_pretrained.tar ./pretrain_model
# 单机单卡训练 mv3_db 模型
python3 tools/train.py
-c
configs/det/det_mv3_db.yml
\
-o
Global.pretrain_weights
=
./pretrain_models/MobileNetV3_large_x0_5_pretrained/
# 单机多卡训练,通过 --gpus 参数设置使用的GPU ID
;如果使用的paddle版本小于2.0rc1,请使用'--select_gpus'参数选择要使用的GPU
# 单机多卡训练,通过 --gpus 参数设置使用的GPU ID
python3
-m
paddle.distributed.launch
--gpus
'0,1,2,3'
tools/train.py
-c
configs/det/det_mv3_db.yml
\
-o
Global.pretrain_weights
=
./pretrain_models/MobileNetV3_large_x0_5_pretrained/
```
...
...
Prev
1
2
3
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