Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleOCR
提交
bb66f0cb
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看板
提交
bb66f0cb
编写于
5月 19, 2022
作者:
文幕地方
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add e2e metric and lite speed
上级
43403c46
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
179 addition
and
26 deletion
+179
-26
applications/车牌识别.md
applications/车牌识别.md
+165
-12
tools/end2end/convert_ppocr_label.py
tools/end2end/convert_ppocr_label.py
+11
-5
tools/end2end/readme.md
tools/end2end/readme.md
+3
-9
未找到文件。
applications/车牌识别.md
浏览文件 @
bb66f0cb
...
...
@@ -609,6 +609,148 @@ python tools/infer/predict_system.py \
![](
https://ai-studio-static-online.cdn.bcebos.com/76b6a0939c2c4cf49039b6563c4b28e241e11285d7464e799e81c58c0f7707a7
)
### 4.4 计算End2End指标
端到端指标可通过
[
PaddleOCR内置脚本
](
https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/tools/end2end/readme.md
)
进行计算,具体步骤如下:
1.
导出模型
通过如下命令进行模型的导出。注意,量化模型导出时,需要配置eval数据集
```
bash
# 检测模型
# 预训练模型
python tools/export_model.py
-c
configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml
-o
\
Global.pretrained_model
=
models/ch_PP-OCRv3_det_distill_train/student.pdparams
\
Global.save_inference_dir
=
output/ch_PP-OCRv3_det_distill_train/infer
# 非量化模型
python tools/export_model.py
-c
configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml
-o
\
Global.pretrained_model
=
output/CCPD/det/best_accuracy.pdparams
\
Global.save_inference_dir
=
output/CCPD/det/infer
# 量化模型
python deploy/slim/quantization/export_model.py
-c
configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml
-o
\
Global.pretrained_model
=
output/CCPD/det_quant/best_accuracy.pdparams
\
Global.save_inference_dir
=
output/CCPD/det_quant/infer
\
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/ccpd_green
\
Eval.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/test/det.txt]
\
Eval.loader.num_workers
=
0
# 识别模型
# 预训练模型
python tools/export_model.py
-c
configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
-o
\
Global.pretrained_model
=
models/ch_PP-OCRv3_rec_train/student.pdparams
\
Global.save_inference_dir
=
output/ch_PP-OCRv3_rec_train/infer
# 非量化模型
python tools/export_model.py
-c
configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
-o
\
Global.pretrained_model
=
output/CCPD/rec/best_accuracy.pdparams
\
Global.save_inference_dir
=
output/CCPD/rec/infer
# 量化模型
python deploy/slim/quantization/export_model.py
-c
configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
-o
\
Global.pretrained_model
=
output/CCPD/rec_quant/best_accuracy.pdparams
\
Global.save_inference_dir
=
output/CCPD/rec_quant/infer
\
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/PPOCR
\
Eval.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/test/rec.txt]
```
2.
用导出的模型对测试集进行预测
此处,分别使用PP-OCRv3预训练模型,fintune模型和量化模型对测试集的所有图像进行预测,命令如下:
```
bash
# PP-OCRv3中英文超轻量检测预训练模型,PP-OCRv3中英文超轻量识别预训练模型
python3 tools/infer/predict_system.py
--det_model_dir
=
output/ch_PP-OCRv3_det_distill_train/infer
--rec_model_dir
=
output/ch_PP-OCRv3_rec_train/infer
--image_dir
=
/home/aistudio/data/CCPD2020/ccpd_green/test/
--draw_img_save_dir
=
infer/pretrain
# PP-OCRv3中英文超轻量检测预训练模型,PP-OCRv3中英文超轻量识别预训练模型+后处理去掉多识别的`·`
python3 tools/infer/predict_system.py
--det_model_dir
=
output/ch_PP-OCRv3_det_distill_train/infer
--rec_model_dir
=
output/ch_PP-OCRv3_rec_train/infer
--image_dir
=
/home/aistudio/data/CCPD2020/ccpd_green/test/
--draw_img_save_dir
=
infer/post
# PP-OCRv3中英文超轻量检测预训练模型+finetune,PP-OCRv3中英文超轻量识别预训练模型+finetune
python3 tools/infer/predict_system.py
--det_model_dir
=
output/CCPD/det/infer
--rec_model_dir
=
output/CCPD/rec/infer
--image_dir
=
/home/aistudio/data/CCPD2020/ccpd_green/test/
--draw_img_save_dir
=
infer/finetune
# PP-OCRv3中英文超轻量检测预训练模型finetune+量化,PP-OCRv3中英文超轻量识别预训练模型finetune+量化 结果转换和评估
python3 tools/infer/predict_system.py
--det_model_dir
=
output/CCPD/det_quant/infer
--rec_model_dir
=
output/CCPD/rec_quant/infer
--image_dir
=
/home/aistudio/data/CCPD2020/ccpd_green/test/
--draw_img_save_dir
=
infer/quant
```
3.
转换label并计算指标
将gt和上一步保存的预测结果转换为端对端评测需要的数据格式,并根据转换后的数据进行端到端指标计算
```
bash
python3 tools/end2end/convert_ppocr_label.py
--mode
=
gt
--label_path
=
/home/aistudio/data/CCPD2020/PPOCR/test/det.txt
--save_folder
=
end2end/gt
# PP-OCRv3中英文超轻量检测预训练模型,PP-OCRv3中英文超轻量识别预训练模型 结果转换和评估
python3 tools/end2end/convert_ppocr_label.py
--mode
=
pred
--label_path
=
infer/pretrain/system_results.txt
--save_folder
=
end2end/pretrain
python3 tools/end2end/eval_end2end.py end2end/gt end2end/pretrain
# PP-OCRv3中英文超轻量检测预训练模型,PP-OCRv3中英文超轻量识别预训练模型+后处理去掉多识别的`·` 结果转换和评估
python3 tools/end2end/convert_ppocr_label.py
--mode
=
pred
--label_path
=
infer/post/system_results.txt
--save_folder
=
end2end/post
python3 tools/end2end/eval_end2end.py end2end/gt end2end/post
# PP-OCRv3中英文超轻量检测预训练模型finetune,PP-OCRv3中英文超轻量识别预训练模型finetune 结果转换和评估
python3 tools/end2end/convert_ppocr_label.py
--mode
=
pred
--label_path
=
infer/finetune/system_results.txt
--save_folder
=
end2end/finetune
python3 tools/end2end/eval_end2end.py end2end/gt end2end/finetune
# PP-OCRv3中英文超轻量检测预训练模型finetune+量化,PP-OCRv3中英文超轻量识别预训练模型finetune+量化 结果转换和评估
python3 tools/end2end/convert_ppocr_label.py
--mode
=
pred
--label_path
=
infer/quant/system_results.txt
--save_folder
=
end2end/quant
python3 tools/end2end/eval_end2end.py end2end/gt end2end/quant
```
日志如下:
```
bash
The convert label saved
in
end2end/gt
The convert label saved
in
end2end/pretrain
start testing...
hit, dt_count, gt_count 2 5988 5006
character_acc: 70.42%
avg_edit_dist_field: 2.37
avg_edit_dist_img: 2.37
precision: 0.03%
recall: 0.04%
fmeasure: 0.04%
The convert label saved
in
end2end/post
start testing...
hit, dt_count, gt_count 4224 5988 5006
character_acc: 81.59%
avg_edit_dist_field: 1.47
avg_edit_dist_img: 1.47
precision: 70.54%
recall: 84.38%
fmeasure: 76.84%
The convert label saved
in
end2end/finetune
start testing...
hit, dt_count, gt_count 4286 4898 5006
character_acc: 94.16%
avg_edit_dist_field: 0.47
avg_edit_dist_img: 0.47
precision: 87.51%
recall: 85.62%
fmeasure: 86.55%
The convert label saved
in
end2end/quant
start testing...
hit, dt_count, gt_count 4349 4951 5006
character_acc: 94.13%
avg_edit_dist_field: 0.47
avg_edit_dist_img: 0.47
precision: 87.84%
recall: 86.88%
fmeasure: 87.36%
```
各个方案端到端指标如下:
|det|rec|fmeasure|
|---|---|---|
|PP-OCRv3中英文超轻量检测预训练模型|PP-OCRv3中英文超轻量识别预训练模型|0.04%|
|PP-OCRv3中英文超轻量检测预训练模型|PP-OCRv3中英文超轻量识别预训练模型+后处理去掉多识别的
`·`
|76.84%|
|PP-OCRv3中英文超轻量检测预训练模型+finetune|PP-OCRv3中英文超轻量识别预训练模型+finetune|86.55%|
|PP-OCRv3中英文超轻量检测预训练模型+finetune+量化|PP-OCRv3中英文超轻量识别预训练模型+finetune+量化|87.36%|
从结果中可以看到对预训练模型不做修改,只根据场景下的具体情况进行后处理的修改就能大幅提升端到端指标到76.84%,在CCPD数据集上进行finetune后指标进一步提升到86.55%, 在经过量化训练之后,由于检测模型的recall变高,指标进一步提升到87.36%。
### 4.4 实验总结
...
...
@@ -616,24 +758,35 @@ python tools/infer/predict_system.py \
-
检测
|方案|hmeans| 模型大小 |
预测速度(lite)
|
|---|---|------|---|
|PP-OCRv3中英文超轻量检测预训练模型直接预测|76.12%|2.5M|
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%| 2.5M ||
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%| 1M ||
|方案|hmeans| 模型大小 |
预测速度(lite)
|
|---|---|------|---
---------
|
|PP-OCRv3中英文超轻量检测预训练模型直接预测|76.12%|2.5M|
233ms |
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%| 2.5M |
233ms
|
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%| 1M |
189ms
|
-
识别
|方案| acc | 模型大小 |
预测速度(lite)
|
|---|--------|-------|---|
|PP-OCRv3中英文超轻量识别预训练模型直接预测| 0% |10.3M||
|PP-OCRv3中英文超轻量识别预训练模型直接预测+后处理去掉多识别的
`·`
| 90.97% |10.3M||
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% | 10.3M ||
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune + 量化| 94.4% | 4.8M ||
|方案| acc | 模型大小 |
预测速度(lite)
|
|---|--------|-------|---
---------
|
|PP-OCRv3中英文超轻量识别预训练模型直接预测| 0% |10.3M|
4.2ms
|
|PP-OCRv3中英文超轻量识别预训练模型直接预测+后处理去掉多识别的
`·`
| 90.97% |10.3M|
4.2ms
|
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% | 10.3M |
4,2ms
|
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune + 量化| 94.4% | 4.8M |
1.8ms
|
-
结论
-
端到端指标如下:
|det|rec|fmeasure|模型大小|预测速度(lite) |
|---|---|---|---|---|
|PP-OCRv3中英文超轻量检测预训练模型|PP-OCRv3中英文超轻量识别预训练模型|0.04%|12.8M|298ms|
|PP-OCRv3中英文超轻量检测预训练模型|PP-OCRv3中英文超轻量识别预训练模型+后处理去掉多识别的
`·`
|76.84%|12.8M|298ms|
|PP-OCRv3中英文超轻量检测预训练模型+finetune|PP-OCRv3中英文超轻量识别预训练模型+finetune|86.55%|12.8M|298ms|
|PP-OCRv3中英文超轻量检测预训练模型+finetune+量化|PP-OCRv3中英文超轻量识别预训练模型+finetune+量化|87.36%|5.8M|224ms|
*结论*
PP-OCRv3的检测模型在未经过fine-tune的情况下,在车牌数据集上也有一定的精度,经过finetune后能够极大的提升检测效果,精度达到99%。在使用量化训练后检测模型的精度几乎无损,并且模型大小压缩60%。
PP-OCRv3的识别模型在未经过fine-tune的情况下,在车牌数据集上精度为0,但是经过分析可以知道,模型大部分字符都预测正确,但是会多预测一个特殊字符,去掉这个特殊字符后,精度达到90%。PP-OCRv3识别模型在经过finetune后识别精度进一步提升,达到94.4%。在使用量化训练后识别模型大小压缩53%,但是由于数据量多少,带来了1%的精度损失。
从端到端结果中可以看到对预训练模型不做修改,只根据场景下的具体情况进行后处理的修改就能大幅提升端到端指标到76.84%,在CCPD数据集上进行finetune后指标进一步提升到86.55%, 在经过量化训练之后,由于检测模型的recall变高,指标进一步提升到87.36%并且模型大小降低54%。
tools/end2end/convert_ppocr_label.py
浏览文件 @
bb66f0cb
...
...
@@ -85,10 +85,16 @@ def convert_label(label_dir, mode="gt", save_dir="./save_results/"):
print
(
"The convert label saved in {}"
.
format
(
save_dir
))
if
__name__
==
"__main__"
:
def
parse_args
():
import
argparse
parser
=
argparse
.
ArgumentParser
(
description
=
"args"
)
parser
.
add_argument
(
"--label_path"
,
type
=
str
,
required
=
True
)
parser
.
add_argument
(
"--save_folder"
,
type
=
str
,
required
=
True
)
parser
.
add_argument
(
"--mode"
,
type
=
str
,
default
=
False
)
args
=
parser
.
parse_args
()
return
args
ppocr_label_gt
=
"/paddle/Datasets/chinese/test_set/Label_refine_310_V2.txt"
convert_label
(
ppocr_label_gt
,
"gt"
,
"./save_gt_310_V2/"
)
ppocr_label_gt
=
"./infer_results/ch_PPOCRV2_infer.txt"
convert_label
(
ppocr_label_gt_en
,
"pred"
,
"./save_PPOCRV2_infer/"
)
if
__name__
==
"__main__"
:
args
=
parse_args
()
convert_label
(
args
.
label_path
,
args
.
mode
,
args
.
save_folder
)
tools/end2end/readme.md
浏览文件 @
bb66f0cb
...
...
@@ -23,19 +23,13 @@ all-sum-510/00224225.jpg [{"transcription": "超赞", "points": [[8.0, 48
**步骤二:**
将步骤一保存的数据转换为端对端评测需要的数据格式:
修改
`tools/convert_ppocr_label.py`
中的代码,convert_label函数中设置输入标签路径,Mode,保存标签路径等,对预测数据的GTlabel和预测结果的label格式进行转换。
```
ppocr_label_gt = "gt_label.txt"
convert_label(ppocr_label_gt, "gt", "./save_gt_label/")
修改
`tools/end2end/convert_ppocr_label.py`
中的代码,convert_label函数中设置输入标签路径,Mode,保存标签路径等,对预测数据的GTlabel和预测结果的label格式进行转换。
ppocr_label_gt = "./ch_PP-OCRv2_results/system_results.txt"
convert_label(ppocr_label_gt_en, "pred", "./save_PPOCRV2_infer/")
```
python3 tools/end2end/convert_ppocr_label.py --mode=gt --label_path=path/to/label_txt --save_folder=save_gt_label
运行
`convert_ppocr_label.py`
:
```
python3 tools/convert_ppocr_label.py
python3 tools/end2end/convert_ppocr_label.py --mode=pred --label_path=path/to/pred_txt --save_folder=save_PPOCRV2_infer
```
得到如下结果:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录