Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleOCR
提交
4a17698f
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看板
提交
4a17698f
编写于
5月 17, 2022
作者:
文幕地方
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update doc, test=document
上级
62ba9336
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
119 addition
and
100 deletion
+119
-100
applications/车牌识别.md
applications/车牌识别.md
+119
-100
未找到文件。
applications/车牌识别.md
浏览文件 @
4a17698f
# 一种基于PaddleOCR的轻量级车牌识别模型
-
[
1. 项目介绍
](
#1-项目介绍
)
-
[
1. 项目介绍
](
#1-项目介绍
)
-
[
2. 环境搭建
](
#2-环境搭建
)
-
[
2. 环境搭建
](
#2-环境搭建
)
-
[
3. 数据集准备
](
#3-数据集准备
)
-
[
3. 数据集准备
](
#3-数据集准备
)
...
@@ -5,28 +7,28 @@
...
@@ -5,28 +7,28 @@
-
[
3.2 制作符合PP-OCR训练格式的标注文件
](
#32-制作符合pp-ocr训练格式的标注文件
)
-
[
3.2 制作符合PP-OCR训练格式的标注文件
](
#32-制作符合pp-ocr训练格式的标注文件
)
-
[
4. 实验
](
#4-实验
)
-
[
4. 实验
](
#4-实验
)
-
[
4.1 检测
](
#41-检测
)
-
[
4.1 检测
](
#41-检测
)
-
[
4.1.1 预训练模型
](
#411-预训练模型
)
-
[
4.1.1 预训练模型
直接预测
](
#411-预训练模型直接预测
)
-
[
4.1.2 CCPD车牌数据集fine-tune
](
#412-ccpd车牌数据集fine-tune
)
-
[
4.1.2 CCPD车牌数据集fine-tune
](
#412-ccpd车牌数据集fine-tune
)
-
[
4.1.3 CCPD车牌数据集fine-tune+量化训练
](
#413-ccpd车牌数据集fine-tune量化训练
)
-
[
4.1.3 CCPD车牌数据集fine-tune+量化训练
](
#413-ccpd车牌数据集fine-tune量化训练
)
-
[
4.1.4 模型导出
](
#414-模型导出
)
-
[
4.1.4 模型导出
](
#414-模型导出
)
-
[
4.2 识别
](
#42-识别
)
-
[
4.2 识别
](
#42-识别
)
-
[
4.2.1 预训练模型
](
#421-预训练模型
)
-
[
4.2.1 预训练模型
直接预测
](
#421-预训练模型直接预测
)
-
[
4.2.2 预训练模型
+改动后处理
](
#422-预训练模型
改动后处理
)
-
[
4.2.2 预训练模型
直接预测+改动后处理
](
#422-预训练模型直接预测
改动后处理
)
-
[
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 串联推理
](
#43-串联推理
)
-
[
4.4 实验总结
](
#44-实验总结
)
-
[
4.4 实验总结
](
#44-实验总结
)
# 一种基于PaddleOCR的轻量级车牌识别模型
## 1. 项目介绍
## 1. 项目介绍
车牌识别(Vehicle License Plate Recognition,VLPR) 是计算机视频图像识别技术在车辆牌照识别中的一种应用。车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,在高速公路车辆管理,停车场管理和中得到广泛应用。
车牌识别(Vehicle License Plate Recognition,VLPR) 是计算机视频图像识别技术在车辆牌照识别中的一种应用。车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,在高速公路车辆管理,停车场管理和中得到广泛应用。
由于使用场景的限制,
表单
识别通常要求高精度和实时。
由于使用场景的限制,
车牌
识别通常要求高精度和实时。
在本例中,使用
[
PP-OCRv3
](
../doc/doc_ch/PP-OCRv3_introduction.md
)
进行车牌识别系统的开发并使用量化进行模型体积的压缩和模型推理速度的加速。项目链接:
[
PaddleOCR车牌
](
https://aistudio.baidu.com/aistudio/projectdetail/3919091?contributionType=1
)
在本例中,使用
[
PP-OCRv3
](
../doc/doc_ch/PP-OCRv3_introduction.md
)
进行车牌识别系统的开发并使用量化进行模型体积的压缩和模型推理速度的加速。
aistudio项目链接:
[
PaddleOCR车牌
](
https://aistudio.baidu.com/aistudio/projectdetail/3919091?contributionType=1
)
## 2. 环境搭建
## 2. 环境搭建
...
@@ -51,8 +53,9 @@ pip install -r PaddleOCR/requirements.txt
...
@@ -51,8 +53,9 @@ pip install -r PaddleOCR/requirements.txt
## 3. 数据集准备
## 3. 数据集准备
所使用的数据集为 CCPD2020 新能源车牌数据集,该数据集为
所使用的数据集为 CCPD新能源车牌数据集,
该数据集分布如下:
该数据集分布如下:
|数据集类型|数量|
|数据集类型|数量|
|---|---|
|---|---|
...
@@ -72,7 +75,8 @@ unzip -d /home/aistudio/data /home/aistudio/data/data101595/CCPD2020.zip
...
@@ -72,7 +75,8 @@ unzip -d /home/aistudio/data /home/aistudio/data/data101595/CCPD2020.zip
```
```
### 3.1 数据集标注规则
### 3.1 数据集标注规则
CPPD的图片文件名具有特殊规则,详细可查看:https://github.com/detectRecog/CCPD
CPPD数据集的图片文件名具有特殊规则,详细可查看:https://github.com/detectRecog/CCPD
具体规则如下:
具体规则如下:
...
@@ -204,20 +208,22 @@ for phase in ['train','val','test']:
...
@@ -204,20 +208,22 @@ for phase in ['train','val','test']:
| 识别 | 验证集 | /home/aistudio/data/CCPD2020/PPOCR/val/crop_imgs | /home/aistudio/data/CCPD2020/PPOCR/val/rec.txt | 1001 |
| 识别 | 验证集 | /home/aistudio/data/CCPD2020/PPOCR/val/crop_imgs | /home/aistudio/data/CCPD2020/PPOCR/val/rec.txt | 1001 |
| 识别 | 测试集 | /home/aistudio/data/CCPD2020/PPOCR/test/crop_imgs | /home/aistudio/data/CCPD2020/PPOCR/test/rec.txt | 5006 |
| 识别 | 测试集 | /home/aistudio/data/CCPD2020/PPOCR/test/crop_imgs | /home/aistudio/data/CCPD2020/PPOCR/test/rec.txt | 5006 |
在
本例中,
我们只使用训练集和测试集。
在
普遍的深度学习流程中,都是在训练集训练,在验证集选择最优模型后在测试集上进行测试。在本例中,我们省略中间步骤,直接在训练集训练,在测试集选择最优模型,因此
我们只使用训练集和测试集。
## 4. 实验
## 4. 实验
选用飞桨OCR开发套件PaddleOCR中的PP-OCRv3模型进行文本检测和识别
。PP-OCRv3在PP-OC2的基础上,中文场景端到端Hmean指标相比于PP-OCRv2提升5%, 英文数字模型端到端效果提升11%。详细优化细节请参考
[
PP-OCRv3
](
../doc/doc_ch/PP-OCRv3_introduction.md
)
技术报告。
由于数据集比较少,为了模型更好和更快的收敛,这里选用 PaddleOCR 中的 PP-OCRv3 模型进行文本检测和识别,并且使用 PP-OCRv3 模型参数作为预训练模型
。PP-OCRv3在PP-OC2的基础上,中文场景端到端Hmean指标相比于PP-OCRv2提升5%, 英文数字模型端到端效果提升11%。详细优化细节请参考
[
PP-OCRv3
](
../doc/doc_ch/PP-OCRv3_introduction.md
)
技术报告。
对于车牌检测和识别均使用下面3种方案:
由于车牌场景均为端侧设备部署,因此对速度和模型大小有比较高的要求,因此还需要采用量化训练的方式进行模型大小的压缩和模型推理速度的加速。模型量化可以在基本不损失模型的精度的情况下,将FP32精度的模型参数转换为Int8精度,减小模型参数大小并加速计算,使用量化后的模型在移动端等部署时更具备速度优势。
1.
PP-OCRv3中英文超轻量预训练模型
因此,本实验中对于车牌检测和识别有如下3种方案:
1.
PP-OCRv3中英文超轻量预训练模型直接预测
2.
CCPD车牌数据集在PP-OCRv3模型上fine-tune
2.
CCPD车牌数据集在PP-OCRv3模型上fine-tune
3.
CCPD车牌数据集在PP-OCRv3模型上fine-tune后量化
3.
CCPD车牌数据集在PP-OCRv3模型上fine-tune后量化
### 4.1 检测
### 4.1 检测
#### 4.1.1 预训练模型
#### 4.1.1 预训练模型
直接预测
从下表中下载PP-OCRv3文本检测预训练模型
从下表中下载PP-OCRv3文本检测预训练模型
...
@@ -237,11 +243,13 @@ cd /home/aistudio/PaddleOCR
...
@@ -237,11 +243,13 @@ cd /home/aistudio/PaddleOCR
预训练模型下载完成后,我们使用
[
ch_PP-OCRv3_det_student.yml
](
../configs/chepai/ch_PP-OCRv3_det_student.yml
)
配置文件进行后续实验,在开始评估之前需要对配置文件中部分字段进行设置,具体如下:
预训练模型下载完成后,我们使用
[
ch_PP-OCRv3_det_student.yml
](
../configs/chepai/ch_PP-OCRv3_det_student.yml
)
配置文件进行后续实验,在开始评估之前需要对配置文件中部分字段进行设置,具体如下:
1.
Global.pretrained_model: 指向PP-OCRv3文本检测预训练模型地址
1.
模型存储和训练相关:
2.
Eval.dataset.data_dir:指向验证集图片存放目录
1.
Global.pretrained_model: 指向PP-OCRv3文本检测预训练模型地址
3.
Eval.dataset.label_file_list:指向验证集标注文件
2.
数据集相关
1.
Eval.dataset.data_dir:指向测试集图片存放目录
2.
Eval.dataset.label_file_list:指向测试集标注文件
使用如下命令进行PP-OCRv3文本检测预训练模型的评估
上述字段均为必须修改的字段,可以通过修改配置文件的方式改动,也可在不需要修改配置文件的情况下,改变训练的参数。这里使用不改变配置文件的方式 。
使用如下命令进行PP-OCRv3文本检测预训练模型的评估
```
bash
```
bash
...
@@ -250,29 +258,32 @@ python tools/eval.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o \
...
@@ -250,29 +258,32 @@ python tools/eval.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o \
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/ccpd_green
\
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/ccpd_green
\
Eval.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/test/det.txt]
Eval.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/test/det.txt]
```
```
上述指令中,通过-c 选择训练使用配置文件,通过-o参数在不需要修改配置文件的情况下,改变训练的参数。
使用预训练模型进行评估,指标如下所示:
使用预训练模型进行评估,指标如下所示:
|
方案
|hmeans|
|
方案
|hmeans|
|---|---|
|---
------------------------
|---|
|
PP-OCRv3中英文超轻量检测预训练模型
|76.12%|
|
PP-OCRv3中英文超轻量检测预训练模型直接预测
|76.12%|
#### 4.1.2 CCPD车牌数据集fine-tune
#### 4.1.2 CCPD车牌数据集fine-tune
**训练**
**训练**
和评估相同,进行训练也需要对部分字段进行设置,具体如下:
为了进行fine-tune训练,我们需要在配置文件中设置需要使用的预训练模型地址,学习率和数据集等参数。 具体如下:
在使用预训练模型进行fine-tune时,需要设置如下11个字段
1.
模型存储和训练相关:
1.
Global.pretrained_model: 指向PP-OCRv3文本检测预训练模型地址
1.
Global.pretrained_model: 指向PP-OCRv3文本检测预训练模型地址
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数。
3.
Optimizer.lr.name: 学习率衰减器设为常量 Const
2.
优化器相关:
4.
Optimizer.lr.learning_rate: 学习率设为之前的0.05倍3. Optimizer.lr.learning_rate: 学习率设为之前的0.05倍
1.
Optimizer.lr.name: 学习率衰减器设为常量 Const
5.
Optimizer.lr.warmup_epoch: warmup_epoch设为0
2.
Optimizer.lr.learning_rate: 做finetune实验,学习率需要设置的比较小,此处学习率设为配置文件中的0.05倍
6.
Train.dataset.data_dir:指向训练集图片存放目录
3.
Optimizer.lr.warmup_epoch: warmup_epoch设为0
7.
Train.dataset.label_file_list:指向训练集标注文件
3.
数据集相关:
9.
Eval.dataset.data_dir:指向验证集图片存放目录
1.
Train.dataset.data_dir:指向训练集图片存放目录
10.
Eval.dataset.label_file_list:指向验证集标注文件
2.
Train.dataset.label_file_list:指向训练集标注文件
3.
Eval.dataset.data_dir:指向测试集图片存放目录
4.
Eval.dataset.label_file_list:指向测试集标注文件
使用如下代码即可启动在CCPD车牌数据集上的fine-tune。
使用如下代码即可启动在CCPD车牌数据集上的fine-tune。
...
@@ -289,6 +300,9 @@ python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o
...
@@ -289,6 +300,9 @@ python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/ccpd_green
\
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/ccpd_green
\
Eval.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/test/det.txt]
Eval.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/test/det.txt]
```
```
在上述命令中,通过
`-o`
的方式修改了配置文件中的参数。
训练好的模型地址为:
[
det_ppocr_v3_finetune.tar
](
https://paddleocr.bj.bcebos.com/fanliku/license_plate_recognition/det_ppocr_v3_finetune.tar
)
训练好的模型地址为:
[
det_ppocr_v3_finetune.tar
](
https://paddleocr.bj.bcebos.com/fanliku/license_plate_recognition/det_ppocr_v3_finetune.tar
)
**评估**
**评估**
...
@@ -307,16 +321,16 @@ python tools/eval.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o \
...
@@ -307,16 +321,16 @@ python tools/eval.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml -o \
|方案|hmeans|
|方案|hmeans|
|---|---|
|---|---|
|PP-OCRv3中英文超轻量检测预训练模型|76.12%|
|PP-OCRv3中英文超轻量检测预训练模型
直接预测
|76.12%|
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%|
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%|
可以看到进行fine-tune能显著提升车牌检测的效果。
可以看到进行fine-tune能显著提升车牌检测的效果。
#### 4.1.3 CCPD车牌数据集fine-tune+量化训练
#### 4.1.3 CCPD车牌数据集fine-tune+量化训练
为了在端侧设备上进行部署,我们还需要对模型进行量化以提升模型的运行速度并降低模型体积
。
此处采用 PaddleOCR 中提供好的
[
量化教程
](
../deploy/slim/quantization/README.md
)
对模型进行量化训练
。
量化训练
课
通过如下命令启动:
量化训练
可
通过如下命令启动:
```
bash
```
bash
python3.7 deploy/slim/quantization/quant.py
-c
configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml
-o
\
python3.7 deploy/slim/quantization/quant.py
-c
configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml
-o
\
...
@@ -336,12 +350,12 @@ python3.7 deploy/slim/quantization/quant.py -c configs/det/ch_PP-OCRv3/ch_PP-OCR
...
@@ -336,12 +350,12 @@ 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
||
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%|
1m
||
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%|
1M
||
可以看到量化后能显著降低模型体积
可以看到量化后能显著降低模型体积
并且精度几乎无损。
#### 4.1.4 模型导出
#### 4.1.4 模型导出
...
@@ -361,7 +375,7 @@ python deploy/slim/quantization/export_model.py -c configs/det/ch_PP-OCRv3/ch_PP
...
@@ -361,7 +375,7 @@ python deploy/slim/quantization/export_model.py -c configs/det/ch_PP-OCRv3/ch_PP
```
```
### 4.2 识别
### 4.2 识别
#### 4.2.1 预训练模型
#### 4.2.1 预训练模型
直接预测
从下表中下载PP-OCRv3文本识别预训练模型
从下表中下载PP-OCRv3文本识别预训练模型
...
@@ -379,7 +393,7 @@ tar -xf ch_PP-OCRv3_rec_train.tar
...
@@ -379,7 +393,7 @@ tar -xf ch_PP-OCRv3_rec_train.tar
cd
/home/aistudio/PaddleOCR
cd
/home/aistudio/PaddleOCR
```
```
PaddleOCR提供的PP-OCRv3识别
蒸馏预训练模型中包含了多个模型的参数,需要使用如下代码提取Student
模型的参数:
PaddleOCR提供的PP-OCRv3识别
模型采用蒸馏训练策略,因此提供的预训练模型中会包含
`Teacher`
和
`Student`
模型的参数,详细信息可参考
[
knowledge_distillation.md
](
../doc/doc_ch/knowledge_distillation.md
)
。 因此,模型下载完成后需要使用如下代码提取
`Student`
模型的参数:
```
python
```
python
import
paddle
import
paddle
...
@@ -397,9 +411,11 @@ paddle.save(s_params, "models/ch_PP-OCRv3_rec_train/student.pdparams")
...
@@ -397,9 +411,11 @@ paddle.save(s_params, "models/ch_PP-OCRv3_rec_train/student.pdparams")
预训练模型下载完成后,我们使用
[
ch_PP-OCRv3_rec.yml
](
../configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
)
配置文件进行后续实验,在开始评估之前需要对配置文件中部分字段进行设置,具体如下:
预训练模型下载完成后,我们使用
[
ch_PP-OCRv3_rec.yml
](
../configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
)
配置文件进行后续实验,在开始评估之前需要对配置文件中部分字段进行设置,具体如下:
1.
Global.pretrained_model: 指向PP-OCRv3文本检测预训练模型地址
1.
模型存储和训练相关:
2.
Eval.dataset.data_dir:指向验证集图片存放目录
1.
Global.pretrained_model: 指向PP-OCRv3文本识别预训练模型地址
3.
Eval.dataset.label_file_list:指向验证集标注文件
2.
数据集相关
1.
Eval.dataset.data_dir:指向测试集图片存放目录
2.
Eval.dataset.label_file_list:指向测试集标注文件
使用如下命令进行PP-OCRv3文本识别预训练模型的评估
使用如下命令进行PP-OCRv3文本识别预训练模型的评估
...
@@ -426,13 +442,13 @@ eval model:: 100%|████████████████████
...
@@ -426,13 +442,13 @@ eval model:: 100%|████████████████████
|方案|acc|
|方案|acc|
|---|---|
|---|---|
|PP-OCRv3中英文超轻量识别预训练模型|0%|
|PP-OCRv3中英文超轻量识别预训练模型
直接预测
|0%|
从评估日志中可以看到,直接使用PP-OCRv3预训练模型进行评估,acc非常低,但是norm_edit_dis很高。因此,我们猜测是模型大部分文字识别是对的,只有少部分文字识别错误。使用如下命令进行infer查看模型的推理结果进行验证:
从评估日志中可以看到,直接使用PP-OCRv3预训练模型进行评估,acc非常低,但是norm_edit_dis很高。因此,我们猜测是模型大部分文字识别是对的,只有少部分文字识别错误。使用如下命令进行infer查看模型的推理结果进行验证:
```
python
```
bash
!
python
tools
/
infer_rec
.
py
-
c
configs
/
rec
/
PP
-
OCRv3
/
ch_PP
-
OCRv3_rec
.
yml
-
o
\
python tools/infer_rec.py
-c
configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
-o
\
Global.pretrained_model
=
models/ch_PP-OCRv3_rec_train/student.pdparams
\
Global.pretrained_model
=
models/ch_PP-OCRv3_rec_train/student.pdparams
\
Global.infer_img
=
/home/aistudio/data/CCPD2020/PPOCR/test/crop_imgs/0_0_0_3_32_30_31_30_30.jpg
Global.infer_img
=
/home/aistudio/data/CCPD2020/PPOCR/test/crop_imgs/0_0_0_3_32_30_31_30_30.jpg
```
```
...
@@ -452,9 +468,9 @@ W0501 08:51:57.132315 11326 device_context.cc:465] device: 0, cuDNN Version: 7.6
...
@@ -452,9 +468,9 @@ W0501 08:51:57.132315 11326 device_context.cc:465] device: 0, cuDNN Version: 7.6
1.
直接通过后处理去掉多识别的
`·`
。
1.
直接通过后处理去掉多识别的
`·`
。
2.
进行finetune。
2.
进行finetune。
#### 4.2.2 预训练模型+改动后处理
#### 4.2.2 预训练模型
直接预测
+改动后处理
直接通过后处理去掉多识别的
`·`
,在后处理的改动比较简单,只需在
`ppocr/postprocess/rec_postprocess.py`
文件的76行添加如下代码:
直接通过后处理去掉多识别的
`·`
,在后处理的改动比较简单,只需在
[
ppocr/postprocess/rec_postprocess.py
](
../ppocr/postprocess/rec_postprocess.py
)
文件的76行添加如下代码:
```
python
```
python
text
=
text
.
replace
(
'·'
,
''
)
text
=
text
.
replace
(
'·'
,
''
)
```
```
...
@@ -463,8 +479,8 @@ text = text.replace('·','')
...
@@ -463,8 +479,8 @@ text = text.replace('·','')
|方案|acc|
|方案|acc|
|---|---|
|---|---|
|PP-OCRv3中英文超轻量识别预训练模型|0.2%|
|PP-OCRv3中英文超轻量识别预训练模型
直接预测
|0.2%|
|PP-OCRv3中英文超轻量识别预训练模型+后处理去掉多识别的
`·`
|90.97%|
|PP-OCRv3中英文超轻量识别预训练模型
直接预测
+后处理去掉多识别的
`·`
|90.97%|
可以看到,去掉多余的
`·`
能大幅提高精度。
可以看到,去掉多余的
`·`
能大幅提高精度。
...
@@ -472,19 +488,20 @@ text = text.replace('·','')
...
@@ -472,19 +488,20 @@ text = text.replace('·','')
**训练**
**训练**
和评估相同,进行训练也需要对部分字段进行设置,具体如下:
为了进行fine-tune训练,我们需要在配置文件中设置需要使用的预训练模型地址,学习率和数据集等参数。 具体如下:
1.
Global.pretrained_model: 指向PP-OCRv3文本识别预训练模型地址
1.
模型存储和训练相关:
2.
Global.eval_batch_step: 模型多少step评估一次,这里设为从第0个step开始没隔45个step评估一次,45为一个epoch总的step数。
1.
Global.pretrained_model: 指向PP-OCRv3文本识别预训练模型地址
3.
Optimizer.lr.name: 学习率衰减器设为常量 Const
2.
Global.eval_batch_step: 模型多少step评估一次,这里设为从第0个step开始没隔45个step评估一次,45为一个epoch总的step数。
4.
Optimizer.lr.learning_rate: 学习率设为之前的0.05倍
2.
优化器相关
5.
Optimizer.lr.warmup_epoch: warmup_epoch设为0
1.
Optimizer.lr.name: 学习率衰减器设为常量 Const
6.
Train.dataset.data_dir:指向训练集图片存放目录
2.
Optimizer.lr.learning_rate: 做finetune实验,学习率需要设置的比较小,此处学习率设为配置文件中的0.05倍
7.
Train.dataset.label_file_list:指向训练集标注文件
3.
Optimizer.lr.warmup_epoch: warmup_epoch设为0
9.
Train.loader.batch_size_per_card: 训练时每张卡的图片数,这里设为64
3.
数据集相关
10.
Eval.dataset.data_dir:指向验证集图片存放目录
1.
Train.dataset.data_dir:指向训练集图片存放目录
11.
Eval.dataset.label_file_list:指向验证集标注文件
2.
Train.dataset.label_file_list:指向训练集标注文件
13.
Eval.loader.batch_size_per_card: 验证时每张卡的图片数,这里设为64
3.
Eval.dataset.data_dir:指向测试集图片存放目录
4.
Eval.dataset.label_file_list:指向测试集标注文件
使用如下命令启动finetune
使用如下命令启动finetune
...
@@ -498,10 +515,8 @@ python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
...
@@ -498,10 +515,8 @@ python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
Optimizer.lr.warmup_epoch
=
0
\
Optimizer.lr.warmup_epoch
=
0
\
Train.dataset.data_dir
=
/home/aistudio/data/CCPD2020/PPOCR
\
Train.dataset.data_dir
=
/home/aistudio/data/CCPD2020/PPOCR
\
Train.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/train/rec.txt]
\
Train.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/train/rec.txt]
\
Train.loader.batch_size_per_card
=
64
\
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/PPOCR
\
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/PPOCR
\
Eval.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/test/rec.txt]
\
Eval.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/test/rec.txt]
Eval.loader.batch_size_per_card
=
64
```
```
训练好的模型地址为:
[
rec_ppocr_v3_finetune.tar
](
https://paddleocr.bj.bcebos.com/fanliku/license_plate_recognition/rec_ppocr_v3_finetune.tar
)
训练好的模型地址为:
[
rec_ppocr_v3_finetune.tar
](
https://paddleocr.bj.bcebos.com/fanliku/license_plate_recognition/rec_ppocr_v3_finetune.tar
)
...
@@ -520,21 +535,20 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
...
@@ -520,21 +535,20 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
|方案| acc |
|方案| acc |
|---|--------|
|---|--------|
|PP-OCRv3中英文超轻量识别预训练模型| 0% |
|PP-OCRv3中英文超轻量识别预训练模型
直接预测
| 0% |
|PP-OCRv3中英文超轻量识别预训练模型+后处理去掉多识别的
`·`
| 90.97% |
|PP-OCRv3中英文超轻量识别预训练模型
直接预测
+后处理去掉多识别的
`·`
| 90.97% |
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% |
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% |
可以看到进行fine-tune能显著提升车牌识别的效果。
可以看到进行fine-tune能显著提升车牌识别的效果。
#### 4.2.4 CCPD车牌数据集fine-tune+量化训练
#### 4.2.4 CCPD车牌数据集fine-tune+量化训练
为了在端侧设备上进行部署,我们还需要对模型进行量化以提升模型的运行速度并降低模型体积。
此处采用 PaddleOCR 中提供好的
[
量化教程
](
../deploy/slim/quantization/README.md
)
对模型进行量化训练。
量化训练课通过如下命令启动
量化训练可通过如下命令启动:
```
python
```
bash
!
python3
.
7
deploy
/
slim
/
quantization
/
quant
.
py
-
c
configs
/
rec
/
PP
-
OCRv3
/
ch_PP
-
OCRv3_rec
.
yml
-
o
\
python3.7 deploy/slim/quantization/quant.py
-c
configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml
-o
\
Global.pretrained_model
=
output/CCPD/rec/best_accuracy.pdparams
\
Global.pretrained_model
=
output/CCPD/rec/best_accuracy.pdparams
\
Global.save_model_dir
=
output/CCPD/rec_quant/
\
Global.save_model_dir
=
output/CCPD/rec_quant/
\
Global.eval_batch_step
=
"[0, 90]"
\
Global.eval_batch_step
=
"[0, 90]"
\
...
@@ -543,19 +557,17 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
...
@@ -543,19 +557,17 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
Optimizer.lr.warmup_epoch
=
0
\
Optimizer.lr.warmup_epoch
=
0
\
Train.dataset.data_dir
=
/home/aistudio/data/CCPD2020/PPOCR
\
Train.dataset.data_dir
=
/home/aistudio/data/CCPD2020/PPOCR
\
Train.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/train/rec.txt]
\
Train.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/train/rec.txt]
\
Train
.
loader
.
batch_size_per_card
=
64
\
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/PPOCR
\
Eval.dataset.data_dir
=
/home/aistudio/data/CCPD2020/PPOCR
\
Eval
.
dataset
.
label_file_list
=
[
/
home
/
aistudio
/
data
/
CCPD2020
/
PPOCR
/
test
/
rec
.
txt
]
\
Eval.dataset.label_file_list
=[
/home/aistudio/data/CCPD2020/PPOCR/test/rec.txt]
Eval
.
loader
.
batch_size_per_card
=
64
```
```
训练好的模型地址为:
[
rec_ppocr_v3_quant.tar
](
https://paddleocr.bj.bcebos.com/fanliku/license_plate_recognition/rec_ppocr_v3_quant.tar
)
训练好的模型地址为:
[
rec_ppocr_v3_quant.tar
](
https://paddleocr.bj.bcebos.com/fanliku/license_plate_recognition/rec_ppocr_v3_quant.tar
)
量化后指标对比如下
量化后指标对比如下
|方案| acc |
模型大小
|预测速度(lite)|
|方案| acc |
模型大小
|预测速度(lite)|
|---|--------|---|---|
|---|--------|---
----
|---|
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% |
10.3m
|
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% |
10.3M
|
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune + 量化| 93.4% |
4.8m
|
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune + 量化| 93.4% |
4.8M
|
可以看到量化后能显著降低模型体积,但是由于识别数据过少,量化带来了1%的精度下降。
可以看到量化后能显著降低模型体积,但是由于识别数据过少,量化带来了1%的精度下降。
...
@@ -564,14 +576,14 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
...
@@ -564,14 +576,14 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
使用如下命令可以将训练好的模型进行导出。
使用如下命令可以将训练好的模型进行导出。
*
非量化模型
*
非量化模型
```
python
```
bash
!
python
tools
/
export_model
.
py
-
c
configs
/
rec
/
PP
-
OCRv3
/
ch_PP
-
OCRv3_rec
.
yml
-
o
\
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.pretrained_model
=
output/CCPD/rec/best_accuracy.pdparams
\
Global.save_inference_dir
=
output/CCPD/rec/infer
Global.save_inference_dir
=
output/CCPD/rec/infer
```
```
*
量化模型
*
量化模型
```
python
```
bash
!
python
deploy
/
slim
/
quantization
/
export_model
.
py
-
c
configs
/
rec
/
PP
-
OCRv3
/
ch_PP
-
OCRv3_rec
.
yml
-
o
\
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.pretrained_model
=
output/CCPD/rec_quant/best_accuracy.pdparams
\
Global.save_inference_dir
=
output/CCPD/rec_quant/infer
Global.save_inference_dir
=
output/CCPD/rec_quant/infer
```
```
...
@@ -581,8 +593,8 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
...
@@ -581,8 +593,8 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
检测模型和识别模型分别fine-tune并导出为inference模型之后,可以使用如下命令进行端到端推理并对结果进行可视化。
检测模型和识别模型分别fine-tune并导出为inference模型之后,可以使用如下命令进行端到端推理并对结果进行可视化。
```
python
```
bash
!
python
tools
/
infer
/
predict_system
.
py
\
python tools/infer/predict_system.py
\
--det_model_dir
=
output/CCPD/det/infer/
\
--det_model_dir
=
output/CCPD/det/infer/
\
--rec_model_dir
=
output/CCPD/rec/infer/
\
--rec_model_dir
=
output/CCPD/rec/infer/
\
--image_dir
=
"/home/aistudio/data/CCPD2020/ccpd_green/test/04131106321839081-92_258-159&509_530&611-527&611_172&599_159&509_530&525-0_0_3_32_30_31_30_30-109-106.jpg"
\
--image_dir
=
"/home/aistudio/data/CCPD2020/ccpd_green/test/04131106321839081-92_258-159&509_530&611-527&611_172&599_159&509_530&525-0_0_3_32_30_31_30_30-109-106.jpg"
\
...
@@ -599,17 +611,24 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
...
@@ -599,17 +611,24 @@ python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o \
-
检测
-
检测
|方案|hmeans|
模型大小
|预测速度(lite)|
|方案|hmeans|
模型大小
|预测速度(lite)|
|---|---|---|---|
|---|---|---
---
|---|
|PP-OCRv3中英文超轻量检测预训练模型
|76.12%
|
|PP-OCRv3中英文超轻量检测预训练模型
直接预测|76.12%|2.5M
|
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%|
2.5m
||
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune|99%|
2.5M
||
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%|
1m
||
|PP-OCRv3中英文超轻量检测预训练模型 fine-tune+量化|98.91%|
1M
||
-
识别
-
识别
|方案| acc |模型大小|预测速度(lite)|
|方案| acc | 模型大小 |预测速度(lite)|
|---|--------|---|---|
|---|--------|-------|---|
|PP-OCRv3中英文超轻量识别预训练模型| 0% |||
|PP-OCRv3中英文超轻量识别预训练模型直接预测| 0% |10.3M||
|PP-OCRv3中英文超轻量识别预训练模型+后处理去掉多识别的
`·`
| 90.97% |||
|PP-OCRv3中英文超轻量识别预训练模型直接预测+后处理去掉多识别的
`·`
| 90.97% |10.3M||
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% |10.3m||
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune| 94.54% | 10.3M ||
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune + 量化| 94.4% |4.8m||
|PP-OCRv3中英文超轻量识别预训练模型 fine-tune + 量化| 94.4% | 4.8M ||
-
结论
PP-OCRv3的检测模型在未经过fine-tune的情况下,在车牌数据集上也有一定的精度,经过finetune后能够极大的提升检测效果,精度达到99%。在使用量化训练后检测模型的精度几乎无损,并且模型大小压缩60%。
PP-OCRv3的识别模型在未经过fine-tune的情况下,在车牌数据集上精度为0,但是经过分析可以知道,模型大部分字符都预测正确,但是会多预测一个特殊字符,去掉这个特殊字符后,精度达到90%。PP-OCRv3识别模型在经过finetune后识别精度进一步提升,达到94.4%。在使用量化训练后识别模型大小压缩53%,但是由于数据量多少,带来了1%的精度损失。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录