未验证 提交 22db537e 编写于 作者: Z zhoujun 提交者: GitHub

Merge pull request #6352 from WenmuZhou/flk

add e2e metric and lite speed
...@@ -17,21 +17,22 @@ ...@@ -17,21 +17,22 @@
- [4.2.3 CCPD车牌数据集fine-tune](#423-ccpd车牌数据集fine-tune) - [4.2.3 CCPD车牌数据集fine-tune](#423-ccpd车牌数据集fine-tune)
- [4.2.4 CCPD车牌数据集fine-tune+量化训练](#424-ccpd车牌数据集fine-tune量化训练) - [4.2.4 CCPD车牌数据集fine-tune+量化训练](#424-ccpd车牌数据集fine-tune量化训练)
- [4.2.5 模型导出](#425-模型导出) - [4.2.5 模型导出](#425-模型导出)
- [4.3 串联推理](#43-串联推理) - [4.3 计算End2End指标](#43-计算End2End指标)
- [4.4 实验总结](#44-实验总结) - [4.4 部署](#44-部署)
- [4.5 实验总结](#45-实验总结)
## 1. 项目介绍 ## 1. 项目介绍
车牌识别(Vehicle License Plate Recognition,VLPR) 是计算机视频图像识别技术在车辆牌照识别中的一种应用。车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,在高速公路车辆管理,停车场管理和中得到广泛应用。 车牌识别(Vehicle License Plate Recognition,VLPR) 是计算机视频图像识别技术在车辆牌照识别中的一种应用。车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,在高速公路车辆管理,停车场管理和城市交通中得到广泛应用。
结合我国国情,目前车牌识别技术的难点有: 本项目难点如下:
1. 车牌样式多。我国车牌颜色大致有四种:黄底黑字、蓝底白字、白底黑字、黑底白字;车牌格式包括民用车牌、武警车牌、军车车牌、外交车牌、特种车牌、消防车牌等等。 1. 车牌在图像中的尺度差异大、在车辆上的悬挂位置不固定
2. 车牌位置不固定。由于不同汽车品牌公司出产的汽车型号和外形各有不同,每辆车的车牌悬挂位置也不一样; 2. 车牌图像质量层次不齐: 角度倾斜、图片模糊、光照不足、过曝等问题严重
3. 图像质量差: 运动模糊,由于强光,反射或阴影造成的光照和对比度较差, 车牌(部分)遮挡; 3. 边缘和端测场景应用对模型大小有限制,推理速度有要求
4. 在车辆管理等场景场景对于模型速度有着一定限制。
针对以上问题, 本例选用 [PP-OCRv3](../doc/doc_ch/PP-OCRv3_introduction.md) 这一开源超轻量OCR系统进行车牌识别系统的开发。基于PP-OCRv3模型,在CCPD数据集达到99%的检测和94%的识别精度,模型大小12.8M(2.5M+10.3M)。基于量化对模型体积进行进一步压缩到5.8M(1M+4.8M), 同时推理速度提升x%。
针对以上问题, 本例选用 [PP-OCRv3](../doc/doc_ch/PP-OCRv3_introduction.md) 这一开源超轻量OCR系统进行车牌识别系统的开发。基于PP-OCRv3模型,在CCPD数据集达到99%的检测和94%的识别精度,模型大小12.8M(2.5M+10.3M)。基于量化对模型体积进行进一步压缩到5.8M(1M+4.8M), 同时推理速度提升25%。
aistudio项目链接: [基于PaddleOCR的轻量级车牌识别范例](https://aistudio.baidu.com/aistudio/projectdetail/3919091?contributionType=1) aistudio项目链接: [基于PaddleOCR的轻量级车牌识别范例](https://aistudio.baidu.com/aistudio/projectdetail/3919091?contributionType=1)
...@@ -282,7 +283,7 @@ python tools/eval.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o \ ...@@ -282,7 +283,7 @@ python tools/eval.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o \
2. Global.eval_batch_step: 模型多少step评估一次,这里设为从第0个step开始没隔772个step评估一次,772为一个epoch总的step数。 2. Global.eval_batch_step: 模型多少step评估一次,这里设为从第0个step开始没隔772个step评估一次,772为一个epoch总的step数。
2. 优化器相关: 2. 优化器相关:
1. Optimizer.lr.name: 学习率衰减器设为常量 Const 1. Optimizer.lr.name: 学习率衰减器设为常量 Const
2. Optimizer.lr.learning_rate: 做finetune实验,学习率需要设置的比较小,此处学习率设为配置文件中的0.05倍 2. Optimizer.lr.learning_rate: 做 fine-tune 实验,学习率需要设置的比较小,此处学习率设为配置文件中的0.05倍
3. Optimizer.lr.warmup_epoch: warmup_epoch设为0 3. Optimizer.lr.warmup_epoch: warmup_epoch设为0
3. 数据集相关: 3. 数据集相关:
1. Train.dataset.data_dir:指向训练集图片存放目录 1. Train.dataset.data_dir:指向训练集图片存放目录
...@@ -355,12 +356,14 @@ python3.7 deploy/slim/quantization/quant.py -c configs/det/ch_PP-OCRv3/ch_PP-OCR ...@@ -355,12 +356,14 @@ python3.7 deploy/slim/quantization/quant.py -c configs/det/ch_PP-OCRv3/ch_PP-OCR
量化后指标对比如下 量化后指标对比如下
|方案|hmeans| 模型大小 |预测速度(lite)| |方案|hmeans| 模型大小 | 预测速度(lite) |
|---|---|------|---| |---|---|------|------------|
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%| 2.5M || |PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%| 2.5M | 223ms |
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%| 1M || |PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%| 1M | 189ms |
可以看到通过量化训练在精度几乎无损的情况下,降低模型体积60%并且推理速度提升15%。
可以看到量化后能显著降低模型体积并且精度几乎无损 速度测试基于[PaddleOCR lite教程](../deploy/lite/readme_ch.md)完成
#### 4.1.4 模型导出 #### 4.1.4 模型导出
...@@ -471,7 +474,7 @@ W0501 08:51:57.132315 11326 device_context.cc:465] device: 0, cuDNN Version: 7.6 ...@@ -471,7 +474,7 @@ W0501 08:51:57.132315 11326 device_context.cc:465] device: 0, cuDNN Version: 7.6
从infer结果可以看到,车牌中的文字大部分都识别正确,只是多识别出了一个`·`。针对这种情况,有如下两种方案: 从infer结果可以看到,车牌中的文字大部分都识别正确,只是多识别出了一个`·`。针对这种情况,有如下两种方案:
1. 直接通过后处理去掉多识别的`·` 1. 直接通过后处理去掉多识别的`·`
2. 进行finetune。 2. 进行 fine-tune。
#### 4.2.2 预训练模型直接预测+改动后处理 #### 4.2.2 预训练模型直接预测+改动后处理
...@@ -500,7 +503,7 @@ text = text.replace('·','') ...@@ -500,7 +503,7 @@ text = text.replace('·','')
2. Global.eval_batch_step: 模型多少step评估一次,这里设为从第0个step开始没隔45个step评估一次,45为一个epoch总的step数。 2. Global.eval_batch_step: 模型多少step评估一次,这里设为从第0个step开始没隔45个step评估一次,45为一个epoch总的step数。
2. 优化器相关 2. 优化器相关
1. Optimizer.lr.name: 学习率衰减器设为常量 Const 1. Optimizer.lr.name: 学习率衰减器设为常量 Const
2. Optimizer.lr.learning_rate: 做finetune实验,学习率需要设置的比较小,此处学习率设为配置文件中的0.05倍 2. Optimizer.lr.learning_rate: 做 fine-tune 实验,学习率需要设置的比较小,此处学习率设为配置文件中的0.05倍
3. Optimizer.lr.warmup_epoch: warmup_epoch设为0 3. Optimizer.lr.warmup_epoch: warmup_epoch设为0
3. 数据集相关 3. 数据集相关
1. Train.dataset.data_dir:指向训练集图片存放目录 1. Train.dataset.data_dir:指向训练集图片存放目录
...@@ -508,7 +511,7 @@ text = text.replace('·','') ...@@ -508,7 +511,7 @@ text = text.replace('·','')
3. Eval.dataset.data_dir:指向测试集图片存放目录 3. Eval.dataset.data_dir:指向测试集图片存放目录
4. Eval.dataset.label_file_list:指向测试集标注文件 4. Eval.dataset.label_file_list:指向测试集标注文件
使用如下命令启动finetune 使用如下命令启动 fine-tune
```bash ```bash
python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \ python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
...@@ -569,12 +572,14 @@ python3.7 deploy/slim/quantization/quant.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_ ...@@ -569,12 +572,14 @@ python3.7 deploy/slim/quantization/quant.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_
量化后指标对比如下 量化后指标对比如下
|方案| acc | 模型大小 |预测速度(lite)| |方案| acc | 模型大小 | 预测速度(lite) |
|---|--------|-------|---| |---|--------|-------|------------|
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% | 10.3M | |PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% | 10.3M | 4.2ms |
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune + 量化| 93.4% | 4.8M | |PP-OCRv3中英文超轻量识别预训练模型 fine-tune + 量化| 93.4% | 4.8M | 1.8ms |
可以看到量化后能显著降低模型体积,但是由于识别数据过少,量化带来了1%的精度下降。 可以看到量化后能降低模型体积53%并且推理速度提升57%,但是由于识别数据过少,量化带来了1%的精度下降。
速度测试基于[PaddleOCR lite教程](../deploy/lite/readme_ch.md)完成。
#### 4.2.5 模型导出 #### 4.2.5 模型导出
...@@ -593,10 +598,154 @@ python deploy/slim/quantization/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OC ...@@ -593,10 +598,154 @@ python deploy/slim/quantization/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OC
Global.save_inference_dir=output/CCPD/rec_quant/infer Global.save_inference_dir=output/CCPD/rec_quant/infer
``` ```
### 4.3 串联推理 ### 4.3 计算End2End指标
端到端指标可通过 [PaddleOCR内置脚本](../tools/end2end/readme.md) 进行计算,具体步骤如下:
检测模型和识别模型分别fine-tune并导出为inference模型之后,可以使用如下命令进行端到端推理并对结果进行可视化。 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中英文超轻量检测预训练模型+fine-tune,PP-OCRv3中英文超轻量识别预训练模型+fine-tune
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/fine-tune
# PP-OCRv3中英文超轻量检测预训练模型 fine-tune +量化,PP-OCRv3中英文超轻量识别预训练模型 fine-tune +量化 结果转换和评估
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中英文超轻量检测预训练模型 fine-tune,PP-OCRv3中英文超轻量识别预训练模型 fine-tune 结果转换和评估
python3 tools/end2end/convert_ppocr_label.py --mode=pred --label_path=infer/fine-tune/system_results.txt --save_folder=end2end/fine-tune
python3 tools/end2end/eval_end2end.py end2end/gt end2end/fine-tune
# PP-OCRv3中英文超轻量检测预训练模型 fine-tune +量化,PP-OCRv3中英文超轻量识别预训练模型 fine-tune +量化 结果转换和评估
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/fine-tune
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中英文超轻量检测预训练模型+fine-tune|PP-OCRv3中英文超轻量识别预训练模型+fine-tune|86.55%|
|PP-OCRv3中英文超轻量检测预训练模型+fine-tune+量化|PP-OCRv3中英文超轻量识别预训练模型+fine-tune+量化|87.36%|
从结果中可以看到对预训练模型不做修改,只根据场景下的具体情况进行后处理的修改就能大幅提升端到端指标到76.84%,在CCPD数据集上进行 fine-tune 后指标进一步提升到86.55%, 在经过量化训练之后,由于检测模型的recall变高,指标进一步提升到87.36%。
### 4.4 部署
- 基于 Paddle Inference 的python推理
检测模型和识别模型分别 fine-tune 并导出为inference模型之后,可以使用如下命令基于 Paddle Inference 进行端到端推理并对结果进行可视化。
```bash ```bash
python tools/infer/predict_system.py \ python tools/infer/predict_system.py \
...@@ -609,31 +758,46 @@ python tools/infer/predict_system.py \ ...@@ -609,31 +758,46 @@ python tools/infer/predict_system.py \
![](https://ai-studio-static-online.cdn.bcebos.com/76b6a0939c2c4cf49039b6563c4b28e241e11285d7464e799e81c58c0f7707a7) ![](https://ai-studio-static-online.cdn.bcebos.com/76b6a0939c2c4cf49039b6563c4b28e241e11285d7464e799e81c58c0f7707a7)
- 端侧部署
端侧部署我们采用基于 PaddleLite 的 cpp 推理。Paddle Lite是飞桨轻量化推理引擎,为手机、IOT端提供高效推理能力,并广泛整合跨平台硬件,为端侧部署及应用落地问题提供轻量化的部署方案。具体可参考 [PaddleOCR lite教程](../dygraph/deploy/lite/readme_ch.md)
### 4.4 实验总结 ### 4.5 实验总结
我们分别使用PP-OCRv3中英文超轻量预训练模型在车牌数据集上进行了直接评估和finetune 和finetune+量化3种方案的实验,指标对比如下: 我们分别使用PP-OCRv3中英文超轻量预训练模型在车牌数据集上进行了直接评估和 fine-tune 和 fine-tune+量化3种方案的实验,并基于[PaddleOCR lite教程](../dygraph/deploy/lite/readme_ch.md)进行了速度测试,指标对比如下:
- 检测 - 检测
|方案|hmeans| 模型大小 |预测速度(lite)| |方案|hmeans| 模型大小 | 预测速度(lite) |
|---|---|------|---| |---|---|------|------------|
|PP-OCRv3中英文超轻量检测预训练模型直接预测|76.12%|2.5M| |PP-OCRv3中英文超轻量检测预训练模型直接预测|76.12%|2.5M| 233ms |
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%| 2.5M || |PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%| 2.5M | 233ms |
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%| 1M || |PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%| 1M | 189ms |
- 识别 - 识别
|方案| acc | 模型大小 |预测速度(lite)| |方案| acc | 模型大小 | 预测速度(lite) |
|---|--------|-------|---| |---|--------|-------|------------|
|PP-OCRv3中英文超轻量识别预训练模型直接预测| 0% |10.3M|| |PP-OCRv3中英文超轻量识别预训练模型直接预测| 0% |10.3M| 4.2ms |
|PP-OCRv3中英文超轻量识别预训练模型直接预测+后处理去掉多识别的`·`| 90.97% |10.3M|| |PP-OCRv3中英文超轻量识别预训练模型直接预测+后处理去掉多识别的`·`| 90.97% |10.3M| 4.2ms |
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% | 10.3M || |PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% | 10.3M | 4,2ms |
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune + 量化| 94.4% | 4.8M || |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中英文超轻量检测预训练模型+fine-tune | PP-OCRv3中英文超轻量识别预训练模型+fine-tune |86.55%|12.8M|298ms|
| PP-OCRv3中英文超轻量检测预训练模型+fine-tune+量化 | PP-OCRv3中英文超轻量识别预训练模型+fine-tune+量化 |87.36%|5.8M|224ms|
*结论*
- 结论 PP-OCRv3的检测模型在未经过fine-tune的情况下,在车牌数据集上也有一定的精度,经过 fine-tune 后能够极大的提升检测效果,精度达到99%。在使用量化训练后检测模型的精度几乎无损,并且模型大小压缩60%。
PP-OCRv3的检测模型在未经过fine-tune的情况下,在车牌数据集上也有一定的精度,经过finetune后能够极大的提升检测效果,精度达到99%。在使用量化训练后检测模型的精度几乎无损,并且模型大小压缩60% PP-OCRv3的识别模型在未经过fine-tune的情况下,在车牌数据集上精度为0,但是经过分析可以知道,模型大部分字符都预测正确,但是会多预测一个特殊字符,去掉这个特殊字符后,精度达到90%。PP-OCRv3识别模型在经过 fine-tune 后识别精度进一步提升,达到94.4%。在使用量化训练后识别模型大小压缩53%,但是由于数据量多少,带来了1%的精度损失
PP-OCRv3的识别模型在未经过fine-tune的情况下,在车牌数据集上精度为0,但是经过分析可以知道,模型大部分字符都预测正确,但是会多预测一个特殊字符,去掉这个特殊字符后,精度达到90%。PP-OCRv3识别模型在经过finetune后识别精度进一步提升,达到94.4%。在使用量化训练后识别模型大小压缩53%,但是由于数据量多少,带来了1%的精度损失 从端到端结果中可以看到对预训练模型不做修改,只根据场景下的具体情况进行后处理的修改就能大幅提升端到端指标到76.84%,在CCPD数据集上进行 fine-tune 后指标进一步提升到86.55%, 在经过量化训练之后,由于检测模型的recall变高,指标进一步提升到87.36%并且模型大小降低54%
...@@ -85,10 +85,16 @@ def convert_label(label_dir, mode="gt", save_dir="./save_results/"): ...@@ -85,10 +85,16 @@ def convert_label(label_dir, mode="gt", save_dir="./save_results/"):
print("The convert label saved in {}".format(save_dir)) 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" if __name__ == "__main__":
convert_label(ppocr_label_gt_en, "pred", "./save_PPOCRV2_infer/") args = parse_args()
convert_label(args.label_path, args.mode, args.save_folder)
...@@ -23,19 +23,13 @@ all-sum-510/00224225.jpg [{"transcription": "超赞", "points": [[8.0, 48 ...@@ -23,19 +23,13 @@ all-sum-510/00224225.jpg [{"transcription": "超赞", "points": [[8.0, 48
**步骤二:** **步骤二:**
将步骤一保存的数据转换为端对端评测需要的数据格式: 将步骤一保存的数据转换为端对端评测需要的数据格式:
修改 `tools/convert_ppocr_label.py`中的代码,convert_label函数中设置输入标签路径,Mode,保存标签路径等,对预测数据的GTlabel和预测结果的label格式进行转换。
``` 修改 `tools/end2end/convert_ppocr_label.py`中的代码,convert_label函数中设置输入标签路径,Mode,保存标签路径等,对预测数据的GTlabel和预测结果的label格式进行转换。
ppocr_label_gt = "gt_label.txt"
convert_label(ppocr_label_gt, "gt", "./save_gt_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/end2end/convert_ppocr_label.py --mode=pred --label_path=path/to/pred_txt --save_folder=save_PPOCRV2_infer
```
python3 tools/convert_ppocr_label.py
``` ```
得到如下结果: 得到如下结果:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册