Commit 6aa301db authored by liuhy's avatar liuhy
Browse files

Merge branch 'dev' into 'master'

Dev

See merge request !7
parents 9c7c70f5 15df5d99
...@@ -2,32 +2,62 @@ ...@@ -2,32 +2,62 @@
* @Author: liuhy * @Author: liuhy
* @email: liuhy6@sugon.com * @email: liuhy6@sugon.com
* @Date: 2023-03-03 10:17:07 * @Date: 2023-03-03 10:17:07
* @LastEditTime: 2023-03-03 15:38:01 * @LastEditTime: 2023-09-02 13:13:52
* @FilePath: \lpr\README.md * @FilePath: \lpr\README.md
--> -->
# License-Plate-Recoginition(LPR) # LPR
## 模型介绍
LPR是一个基于深度学习技术的车牌识别模型,主要识别目标是自然场景的车牌图像。 ## 论文
`LPRNet: License Plate Recognition via Deep Neural Networks`
- https://arxiv.org/pdf/1806.10447v1.pdf
## 模型结构 ## 模型结构
模型采用LPRNet,模型结构主要包含三部分:一个轻量级CNN主干网络、基于预定位置的字符分类头部、基于贪婪算法的序列解码。此外模型使用CTC Loss和RMSprop优化器。参考论文[LPRNet: License Plate Recognition via Deep Neural Networks](https://arxiv.org/pdf/1806.10447v1.pdf) 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
## 数据集 ## 数据集
推荐使用一个车牌数据集[CCPD](https://github.com/detectRecog/CCPD "CCPD官网GitHub"),该数据集由中科大收集,可用于车牌的检测与识别。 `CCPD`
- https://github.com/detectRecog/CCPD
我们提供了一个脚本cut_ccpd.py用于剪裁出CCPD数据集中的车牌位置,以便用于LPR模型的训练,在cut_ccpd.py中修改img_path和save_path即可,分别是CCPD数据集中ccpd_base文件夹的路径和剪裁出的图像保存路径。LPR用于训练的数据文件名就是图像的标签。**数据集使用固定的大小94x24。** 使用方法: CCPD数据集由中科大收集,可用于车牌的检测与识别。我们提供了一个脚本cut_ccpd.py用于剪裁出CCPD数据集中的车牌位置,以便用于LPR模型的训练,在cut_ccpd.py中修改img_path和save_path即可,分别是CCPD数据集中ccpd_base文件夹的路径和剪裁出的图像保存路径。LPR用于训练的数据文件名就是图像的标签。**数据集使用固定的大小94x24。** 使用方法:
python cut_ccpd.py \ python cut_ccpd.py \
--ccpdpath CCPD数据集下ccpd_base文件夹路径 \ --ccpdpath CCPD数据集下ccpd_base文件夹路径 \
--savepath 保存切割图像的路径 --savepath 保存切割图像的路径
## 训练及推理
### 环境配置
[光源](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 pull image.sourcefind.cn:5000/dcu/admin/base/custom:migraphx2.5.0_centos7.6-dtk-22.10.1
[光合开发者社区](https://cancon.hpccube.com:65024/4/main/)可下载Migraphx和ONNXruntime安装包,python依赖安装 imgs文件夹中提供验证用小数据集,目录结构如下
pip install -r requirement.txt LPR
### 训练与Fine-tunning ├── imgs #测试图像
│ ├── 川JK0707.jpg
│ ├── 川X90621.jpg
│ ├── ...
## 训练
### 单机单卡
LPR模型的训练程序是train.py,初次训练模型使用以下命令: LPR模型的训练程序是train.py,初次训练模型使用以下命令:
python train.py \ python train.py \
...@@ -81,7 +111,10 @@ LPRNet_migraphx_infer.py是基于Migraphx的推理脚本,使用需安装好Mig ...@@ -81,7 +111,10 @@ LPRNet_migraphx_infer.py是基于Migraphx的推理脚本,使用需安装好Mig
--imgpath 数据路径(文件夹或图像皆可) \ --imgpath 数据路径(文件夹或图像皆可) \
--savepath mxr模型的保存路径以及模型名称 --savepath mxr模型的保存路径以及模型名称
## 性能和准确率数据 ## Result
![img](./doc/result.png)
## 精度
测试数据使用的是[LPRNet_Pytorch](https://github.com/sirius-ai/LPRNet_Pytorch/tree/master/data/test),使用的加速卡是DCU Z100。**mxr格式的模型是migraphx创建的onnx模型的离线引擎。** 测试数据使用的是[LPRNet_Pytorch](https://github.com/sirius-ai/LPRNet_Pytorch/tree/master/data/test),使用的加速卡是DCU Z100。**mxr格式的模型是migraphx创建的onnx模型的离线引擎。**
| Engine | Model Path| Model Format | Accuracy(%) | | Engine | Model Path| Model Format | Accuracy(%) |
...@@ -89,6 +122,13 @@ LPRNet_migraphx_infer.py是基于Migraphx的推理脚本,使用需安装好Mig ...@@ -89,6 +122,13 @@ LPRNet_migraphx_infer.py是基于Migraphx的推理脚本,使用需安装好Mig
| ONNXRuntime | model/LPRNet.onnx | onnx | 92.7 | | ONNXRuntime | model/LPRNet.onnx | onnx | 92.7 |
| Migraphx | model/LPRNet.onnx | onnx | 92.7 | | Migraphx | model/LPRNet.onnx | onnx | 92.7 |
| Migraphx | model/LPRNet.mxr | mxr | 92.7 | | Migraphx | model/LPRNet.mxr | mxr | 92.7 |
## 应用场景
### 算法类型
`OCR`
### 热点应用行业
`交通、门卫、政府`
## 源码仓库及问题反馈 ## 源码仓库及问题反馈
* https://developer.hpccube.com/codes/modelzoo/lpr * https://developer.hpccube.com/codes/modelzoo/lpr
## 参考 ## 参考
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment