README.md 6.07 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
LPR是一个基于深度学习技术的车牌识别模型,主要识别目标是自然场景的车牌图像。模型采用LPRNet,模型结构主要包含三部分:一个轻量级CNN主干网络、基于预定位置的字符分类头部、基于贪婪算法的序列解码。此外模型使用CTC Loss和RMSprop优化器。

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

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

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

训练镜像:

dcuai's avatar
dcuai committed
29
    docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
dcuai's avatar
dcuai committed
30
    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 -v /opt/hyhal:/opt/hyhal:ro -it <your IMAGE ID> bash
liuhy's avatar
liuhy committed
31
32
33

推理镜像:

dcuai's avatar
dcuai committed
34
35
    docker pull image.sourcefind.cn:5000/dcu/admin/base/migraphx:4.3.0-ubuntu20.04-dtk24.04.1-py3.10
    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 -v /opt/hyhal:/opt/hyhal:ro -it <your IMAGE ID> bash
liuhy's avatar
liuhy committed
36
37
38
39
40

其它非特殊库参照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
dcuai's avatar
dcuai committed
44
45
数据集快速下载中心:[SCNet AIModels](http://113.200.138.88:18080/aidatasets)
CCPD快速下载通道下载:[CCPD](http://113.200.138.88:18080/aidatasets/project-dependency/ccpd)
刘明贵's avatar
刘明贵 committed
46

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

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

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

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

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

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

liuhy's avatar
liuhy committed
69
Fine-tunning使用以下命令:
liuhy's avatar
liuhy committed
70

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

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

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

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

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

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

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

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

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

liuhy's avatar
liuhy committed
122
123
124
125
126
| 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
127
128
129
130
131

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

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