AI计算机视觉笔记三十二:LPRNet车牌识别

简介: LPRNet是一种基于Pytorch的高性能、轻量级车牌识别框架,适用于中国及其他国家的车牌识别。该网络无需对字符进行预分割,采用端到端的轻量化设计,结合了squeezenet和inception的思想。其创新点在于去除了RNN,仅使用CNN与CTC Loss,并通过特定的卷积模块提取上下文信息。环境配置包括使用CPU开发板和Autodl训练环境。训练和测试过程需搭建虚拟环境并安装相关依赖,执行训练和测试脚本时可能遇到若干错误,需相应调整代码以确保正确运行。使用官方模型可获得较高的识别准确率,自行训练时建议增加训练轮数以提升效果。

一、介绍

LPRNet的Pytorch实现,一种高性能和轻量级的车牌识别框架。完全适用于中国车牌识别(Chinese License Plate Recognition)及国外车牌识别!
目前仅支持同时识别蓝牌和绿牌,即新能源车牌等中国车牌,但可通过扩展训练数据或微调支持其他类型车牌及提高识别准确率!

该网络的特点:

1、不需要对字符进行预分割,是一个端到端的轻量化字符识别模型,速度快,精度还不错;这里主要是因为仿照squeezenet和inception的思想设计了一个轻量化的卷积模块。
2、仿照的还是经典的CRNN+CTC的思路,不过LPRNet首次将RNN删除了,整个网络只有CNN+CTC Loss。但是也不是说不要上下文信息,只是舍弃了BiLSTM那样的RNN提取上下文,而是在backbone的末尾使用了一个13x1的卷积模块提取序列方向(w)的上下文信息。而且在backbone外还额外使用一个全连接层进行全局上下文特征提取,提取之后再和backbone进行concat特征融合,再输入head。
3、损失使用的CTC Loss、推理应用了贪心算法,搜索取每个位置上类概率的最大值。

二、环境

1、开发板:CPU

2、系统:buildroot

3、训练环境:Autodl

image.png

三、训练和测试

1、训练测试环境搭建

1、创建虚拟环境

conda create -n LRPNet_env python=3.8

2、激活

conda activate LRPNet_env

3、下载代码

git clone https://github.com/sirius-ai/LPRNet_Pytorch.git

注意,使用git克隆方式,不要自己下载解压,经测试自己下载解压文本格式会不同,运行会出错

4、安装依赖项

pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
pip install imutils
pip install opencv-python

安装后执行测试命令

python test_LPRNet.py

在测试过程中出错了下面的错误:

出错1:

ValueError: num_samples should be a positive integer value, but got num_samples=0

pytorch报错:ValueError: num_samples should be a positive integer value, but got num_samp=0-CSDN博客

shuffle的参数设置错误导致,因为已经有batch_sample了,就不需要shuffle来进行随机的sample了,所以在这里的shuffle应该设置为FALSE才对。

修改:

train_LPRNET.py的208行,TRUE改成False

batch_iterator = iter(DataLoader(datasets, args.test_batch_size, shuffle=False, num_workers=args.num_workers, collate_fn=collate_fn))

出错2:

python 代码遇到 float division by zero 怎么解决?-CSDN博客

File "train_LPRNet.py", line 261, in Greedy_Decode_Eval Acc = Tp * 1.0 / (Tp + Tn_1 + Tn_2) ZeroDivisionError: float division by zero

处理:

if Tp + Tn_1 + Tn_2 == 0:
Acc = 0 # 或者 Acc = 1,根据实际需求设置
else:
Acc = Tp * 1.0 / (Tp + Tn_1 + Tn_2)

出错3:

File "train_LPRNet.py", line 268, in Greedy_Decode_Eval print("[Info] Test Speed: {}s 1/{}]".format((t2 - t1) / len(datasets), len(datasets))) ZeroDivisionError: float division by zero

处理:

if len(datasets) == 0:
    print("[Info] 数据集为空,无法计算测试速度")
else:
    print("[Info] Test Speed: {}s 1/{}".format((t2 - t1) / len(datasets), len(datasets)))

出错4:

AttributeError: module 'numpy' has no attribute 'int'. np.int was a deprecated alias for the builtin int. To avoid this error in existing code, use int by itself. Doing this will not modify any behavior and is safe. When replacing np.int, you may wish to use e.g. np.int64 or np.int32 to specify the precision. If you wish to review your current use, check the release note link for additional information.

处理:

pip install numpy==1.19.0

```再次执行上面命令

运行正常

#2、训练
训练按readme执行下面命令:

python train_LPRNet.py

但执行后会出错

![image.png](https://ucc.alicdn.com/pic/developer-ecology/63dzqivu2t45o_cfe3aafa284b421ea4b0492f8d7fea4a.png)
原因是没有训练的数据集,为了测试,使用的是自带的测试数据集

python train_LPRNet.py --train_img_dirs ./data/test/

默认训练只有15轮,数据集也不对,所以测试结果无法作准。

![image.png](https://ucc.alicdn.com/pic/developer-ecology/63dzqivu2t45o_140c5614645f441b8191da6ce3986928.png)
#3、测试
自带的show显示不能使用,原因是没有插件,修改了显示的内容

修改test_LPRNet.py文件下的show函数

def show(img, label, target):
img = np.transpose(img, (1, 2, 0))
img *= 128.
img += 127.5
img = img.astype(np.uint8)

lb = ""
for i in label:
    lb += CHARS[i]
tg = ""
for j in target.tolist():
    tg += CHARS[int(j)]

flag = "F"
if lb == tg:
    flag = "T"
# img = cv2.putText(img, lb, (0,16), cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.6, (0, 0, 255), 1)
img = cv2ImgAddText(img, lb, (0, 0))
#cv2.imshow("test", img)
cv2.imwrite("test.jpg", img)
print("target: ", tg, " ### {} ### ".format(flag), "predict: ", lb)
#cv2.waitKey()
#cv2.destroyAllWindows()
 执行下面命令,执行是正常的,但模型不对,原因是数据集太少。

python test_LPRNet.py --show 1
```
image.png
使用官方给的模型,识别率还是挺好的。
image.png
官方训练集2W多张,自行训练测试。测试增加到1000轮,有部分可以识别了。

相关文章
|
1月前
|
人工智能 API 开发者
用Qwen3+MCPs实现AI自动发布小红书笔记!支持图文和视频
魔搭自动发布小红书MCP,是魔搭开发者小伙伴实现的小红书笔记自动发布器,可以通过这个MCP自动完成小红书标题、内容和图片的发布。
736 41
|
1月前
|
Web App开发 人工智能 JSON
Windows版来啦!Qwen3+MCPs,用AI自动发布小红书图文/视频笔记!
上一篇用 Qwen3+MCPs实现AI自动发小红书的最佳实践 有超多小伙伴关注,同时也排队在蹲Windows版本的教程。
314 1
|
6月前
|
人工智能 自然语言处理 搜索推荐
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
Open Notebook 是一款开源的 AI 笔记工具,支持多格式笔记管理,并能自动将笔记转换为博客或播客,适用于学术研究、教育、企业知识管理等多个场景。
412 0
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
|
9月前
|
人工智能 开发工具 计算机视觉
AI计算机视觉笔记三十:yolov8_obb旋转框训练
本文介绍了如何使用AUTODL环境搭建YOLOv8-obb的训练流程。首先创建虚拟环境并激活,然后通过指定清华源安装ultralytics库。接着下载YOLOv8源码,并使用指定命令开始训练,过程中可能会下载yolov8n.pt文件。训练完成后,可使用相应命令进行预测测试。
|
9月前
|
人工智能 并行计算 测试技术
AI计算机视觉笔记三十一:基于UNetMultiLane的多车道线等识别
该项目基于开源数据集 VIL100 实现了 UNetMultiLane,用于多车道线及车道线类型的识别。数据集中标注了六个车道的车道线及其类型。项目详细记录了从环境搭建到模型训练与测试的全过程,并提供了在 CPU 上进行训练和 ONNX 转换的代码示例。训练过程约需 4 小时完成 50 个 epoch。此外,还实现了视频检测功能,可在视频中实时识别车道线及其类型。
|
1月前
|
开发框架 人工智能 Java
破茧成蝶:阿里云应用服务器让传统 J2EE 应用无缝升级 AI 原生时代
本文详细介绍了阿里云应用服务器如何助力传统J2EE应用实现智能化升级。文章分为三部分:第一部分阐述了传统J2EE应用在智能化转型中的痛点,如协议鸿沟、资源冲突和观测失明;第二部分展示了阿里云应用服务器的解决方案,包括兼容传统EJB容器与微服务架构、支持大模型即插即用及全景可观测性;第三部分则通过具体步骤说明如何基于EDAS开启J2EE应用的智能化进程,确保十年代码无需重写,轻松实现智能化跃迁。
248 39
|
19天前
|
人工智能 数据挖掘
🔔阿里云百炼智能体和工作流可以发布为组件了,AI应用变成“搭积木”
本文介绍了如何通过智能体组件化设计快速生成PPT。首先,创建一个“PPT大纲生成”智能体并发布为组件,该组件可根据用户输入生成结构清晰的大纲。接着,在新的智能体应用中调用此组件与MCP服务(如ChatPPT),实现从大纲到完整PPT的自动化生成。整个流程模块化、复用性强,显著降低AI开发门槛,提升效率。非技术人员也可轻松上手,满足多样化场景需求。
🔔阿里云百炼智能体和工作流可以发布为组件了,AI应用变成“搭积木”
|
1月前
|
人工智能 数据挖掘 大数据
“龟速”到“光速”?算力如何加速 AI 应用进入“快车道”
阿里云将联合英特尔、蚂蚁数字科技专家,带来“云端进化论”特别直播。
78 11
|
2月前
|
开发框架 人工智能 Java
破茧成蝶:传统J2EE应用无缝升级AI原生
本文探讨了技术挑战和解决方案,还提供了具体的实施步骤,旨在帮助企业顺利实现从传统应用到智能应用的过渡。
破茧成蝶:传统J2EE应用无缝升级AI原生
|
19天前
|
数据采集 机器学习/深度学习 人工智能
代理IP:企业AI应用的隐形加速器与合规绞索
代理IP作为企业AI应用的重要基础设施,既是效率提升的加速器,也可能成为合规风险的来源。它通过技术演进重塑数据采集、模型训练与安全防护等核心环节,如智能路由、量子加密和边缘计算等创新方案显著优化性能。然而,全球法规(如GDPR)对数据流动提出严格要求,促使企业开发自动化合规审计系统应对挑战。未来,代理IP将向智能路由3.0、PaaS服务及量子网络方向发展,成为连接物理与数字世界的神经网络。企业在享受其带来的效率增益同时,需构建技术、法律与伦理三位一体的防护体系以规避风险。
42 0

热门文章

最新文章