README.md 5.83 KB
Newer Older
刘明贵's avatar
刘明贵 committed
1
2
3
4
<!--
 * @Author: liuhy
 * @email: liuhy6@sugon.com
 * @Date: 2023-03-03 10:17:07
5
 * @LastEditTime: 2023-09-02 13:13:52
刘明贵's avatar
刘明贵 committed
6
7
 * @FilePath: \lpr\README.md
-->
liuhy's avatar
liuhy committed
8
9
10
11
12
13
# LPR

## 论文
`LPRNet: License Plate Recognition via Deep Neural Networks`
- https://arxiv.org/pdf/1806.10447v1.pdf

liuhy's avatar
liuhy committed
14
## 模型结构
liuhy's avatar
liuhy committed
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
LPR是一个基于深度学习技术的车牌识别模型,主要识别目标是自然场景的车牌图像。模型采用LPRNet,模型结构主要包含三部分:一个轻量级CNN主干网络、基于预定位置的字符分类头部、基于贪婪算法的序列解码。此外模型使用CTC Loss和RMSprop优化器。

![img](./doc/backbone.png)

## 算法原理
LPRNet是基于编解码模型。因车牌字符数量较少且尺度固定,因此在编码器中LPRNet用一个CNN替代LSTM也能获得较好的上下文信息。在解码器中LPRNet用CTC来实现字符分割,之后用贪婪算法进行字符分类。

![img](./doc/encode-decode.png)
## 环境配置
### Docker
[光源](https://www.sourcefind.cn/#/service-details)可拉取训练以及推理的docker镜像,LPR推荐的镜像如下:

训练镜像:

    docker pull image.sourcefind.cn:5000/dcu/admin/base/vscode-pytorch:1.10.0-centos7.6-dtk-22.10-py37-patch4
    docker run --shm-size 10g --network=host --name=LPR-train --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it <your IMAGE ID> bash

推理镜像:

    docker pull image.sourcefind.cn:5000/dcu/admin/base/custom:migraphx2.5.0_centos7.6-dtk-22.10.1
    docker run --shm-size 10g --network=host --name=LPR-infer --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it <your IMAGE ID> bash

其它非特殊库参照requirements.txt安装。在[光合开发者社区](https://cancon.hpccube.com:65024/4/main/)可下载Migraphx和ONNXruntime安装包。

    pip install -r requirement.txt

liuhy's avatar
liuhy committed
41
## 数据集
liuhy's avatar
liuhy committed
42
43
`CCPD`
- https://github.com/detectRecog/CCPD
刘明贵's avatar
刘明贵 committed
44

liuhy's avatar
liuhy committed
45
CCPD数据集由中科大收集,可用于车牌的检测与识别。我们提供了一个脚本cut_ccpd.py用于剪裁出CCPD数据集中的车牌位置,以便用于LPR模型的训练,在cut_ccpd.py中修改img_path和save_path即可,分别是CCPD数据集中ccpd_base文件夹的路径和剪裁出的图像保存路径。LPR用于训练的数据文件名就是图像的标签。**数据集使用固定的大小94x24。** 使用方法:
刘明贵's avatar
刘明贵 committed
46

刘明贵's avatar
刘明贵 committed
47
48
49
    python cut_ccpd.py \
        --ccpdpath CCPD数据集下ccpd_base文件夹路径 \
        --savepath 保存切割图像的路径 
liuhy's avatar
liuhy committed
50

liuhy's avatar
liuhy committed
51
在imgs文件夹中提供验证用小数据集,目录结构如下:
liuhy's avatar
liuhy committed
52

liuhy's avatar
liuhy committed
53
54
55
56
57
58
59
60
    LPR
    ├── imgs #测试图像
    │    ├── 川JK0707.jpg
    │    ├── 川X90621.jpg
    │    ├── ...

## 训练
### 单机单卡
liuhy's avatar
liuhy committed
61
LPR模型的训练程序是train.py,初次训练模型使用以下命令:
liuhy's avatar
liuhy committed
62

刘明贵's avatar
刘明贵 committed
63
64
65
    python train.py \
        --train_img_dirs 训练集文件夹路径 \
        --test_img_dirs 验证集文件夹路径
刘明贵's avatar
刘明贵 committed
66

liuhy's avatar
liuhy committed
67
Fine-tunning使用以下命令:
liuhy's avatar
liuhy committed
68

刘明贵's avatar
刘明贵 committed
69
70
71
72
73
    python train.py \
        --train_img_dirs 训练集文件夹路径 \
        --test_img_dirs 验证集文件夹路径 \
        --pretrained_model 预训练模型路径 \
        --resume_epoch Fine-tuning训练的起始epoch \  
liuhy's avatar
liuhy committed
74
        --max_epoch 训练的最大epoch
刘明贵's avatar
刘明贵 committed
75
76

Fine-tuning时只训练从起始epoch到最大epoch。
刘明贵's avatar
刘明贵 committed
77
78
### 预训练模型
在model文件夹下我们提供了一个预训练模型以及对应的onnx模型和mxr模型,以下是相关子目录的介绍:
刘明贵's avatar
刘明贵 committed
79

刘明贵's avatar
刘明贵 committed
80
    LPR
刘明贵's avatar
刘明贵 committed
81
    ├── imgs #测试图像
刘明贵's avatar
刘明贵 committed
82
83
84
85
    ├── model
    │   ├── lprnet.pth #基于pytorch框架训练出的LPR预训练模型 
    │   ├── LPRNet.onnx #由lprnet.pth转换的onnx模型
    └── └── LPRNet.mxr #用migraphx编译LPRNet.onnx得到的离线推理模型
liuhy's avatar
liuhy committed
86
87
### 测试
LPR模型用test.py对训练出的模型进行测试,使用方法如下:
liuhy's avatar
liuhy committed
88

刘明贵's avatar
刘明贵 committed
89
90
91
    python test.py \
        --model 需要测试的pth模型路径 \
        --imgpath 测试集路径(文件夹或图像皆可)  \
liuhy's avatar
liuhy committed
92
        --batch_size 测试时的batch size大小 \
刘明贵's avatar
刘明贵 committed
93
94
95
        --export_onnx True/False(该参数用于选择是否需要将pth模型转为onnx模型) \
        --dynamic True/False(该参数用于选择onnx模型是否使用动态的batch size)

liuhy's avatar
liuhy committed
96
### 推理
刘明贵's avatar
刘明贵 committed
97
我们分别提供了基于ONNXruntime(ORT)和Migraphx的推理脚本,版本依赖:
liuhy's avatar
liuhy committed
98
99
* ONNXRuntime(DCU版本) >= 1.14.0
* Migraphx(DCU版本) >= 2.5.0
liuhy's avatar
liuhy committed
100
101
#### ORT
LPRNet_ORT_infer.py是基于ORT的的推理脚本,使用方法:
liuhy's avatar
liuhy committed
102

刘明贵's avatar
刘明贵 committed
103
104
105
    python LPRNet_ORT_infer.py \
        --model onnx模型路径 \
        --imgpath 数据路径(文件夹或图像皆可)
liuhy's avatar
liuhy committed
106
107
#### Migraphx
LPRNet_migraphx_infer.py是基于Migraphx的推理脚本,使用需安装好Migraphx,支持onnx模型和mxr模型推理,mxr模型是migraphx将onnx模型保存成的离线推理引擎,初次使用onnx模型会保存对应的mxr模型。使用方法:
liuhy's avatar
liuhy committed
108

刘明贵's avatar
刘明贵 committed
109
110
111
112
113
    python LPRNet_migraphx_infer.py \
        --model mxr/onnx模型路径 \
        --imgpath 数据路径(文件夹或图像皆可) \
        --savepath mxr模型的保存路径以及模型名称

liuhy's avatar
liuhy committed
114
115
116
117
## Result
![img](./doc/result.png)

## 精度
liuhy's avatar
liuhy committed
118
测试数据使用的是[LPRNet_Pytorch](https://github.com/sirius-ai/LPRNet_Pytorch/tree/master/data/test),使用的加速卡是DCU Z100。**mxr格式的模型是migraphx创建的onnx模型的离线引擎。**
liuhy's avatar
liuhy committed
119

liuhy's avatar
liuhy committed
120
121
122
123
124
| Engine | Model Path| Model Format | Accuracy(%) |
| :------: | :------: | :------: | :------: |
| ONNXRuntime | model/LPRNet.onnx | onnx | 92.7 |
| Migraphx | model/LPRNet.onnx | onnx | 92.7 |
| Migraphx | model/LPRNet.mxr | mxr | 92.7 |
liuhy's avatar
liuhy committed
125
126
127
128
129

## 应用场景
### 算法类型
`OCR`
### 热点应用行业
liuhy's avatar
liuhy committed
130
`交通,安防,政府`
liuhy's avatar
liuhy committed
131
132

## 源码仓库及问题反馈
liuhy's avatar
liuhy committed
133
* https://developer.hpccube.com/codes/modelzoo/lpr
liuhy's avatar
liuhy committed
134
## 参考
liuhy's avatar
liuhy committed
135
136
* https://github.com/sirius-ai/LPRNet_Pytorch
* https://github.com/qzpzd/license-plate-detect-recoginition
hc's avatar
hc committed
137