当前位置: 首页 > news >正文

一站式完成车牌识别任务:从模型优化到端侧部署

交通领域的应用智能化不断往纵深发展,其中最为成熟的车牌识别早已融入人们的日常生活之中,在高速公路电子收费系统、停车场等场景中随处可见。一些企业在具体业务中倾向采用开源方案降低研发成本,但现有公开的方案中少有完成端到端的车牌应用范例

本次飞桨产业实践范例库开源车牌识别场景应用,提供了从技术方案、模型训练优化,到模型部署的全流程可复用方案,降低产业落地门槛。

项目链接

https://github.com/PaddlePaddle/PaddleOCR/tree/dygraph/applications

所有源码及教程均已开源。欢迎大家使用,star鼓励~

基于PaddleOCR的轻量级车牌识别系统

场景难点

本范例解决车牌识别任务,需完成车牌检测模型和车牌识别模型的微调与串联,并部署到端侧设备中。项目包含以下难点:

  • 车牌在图像中的尺度差异大、在车辆上的悬挂位置不固定;
  • 车牌图像质量层次不齐: 角度倾斜、图片模糊、光照不足、过曝等问题严重;
  • 边缘和端测场景应用对模型大小有限制,推理速度有要求。
图1 CCPD绿牌数据集图像

项目方案

针对以上问题,本范例选用PaddleOCR中的超轻量OCR系统PP-OCRv3进行车牌识别系统的开发,通过微调检测和识别模型,在CCPD新能源数据集达到99%的检测精度和94%的识别精度,模型大小为12.8M(检测2.5M+识别10.3M)。基于量化对模型体积进一步压缩到5.8M(1M+4.8M),同时推理速度提升25%。

训练数据 

CCPD(Chinese City Parking Dataset)数据集包含蓝底车牌和新能源车牌,覆盖场景包括各类文字形态(倾斜、模糊)与气候环境(如阴雨天、雪天等),其中新能源车牌训练集数量为5769张。CCPD数据标签体现在图片文件名,其命名规范如图2所示。范例中我们通过转换脚本将上述规则转换为PaddleOCR的数据标注格式并划分数据集。

图2 文件名称命名规则

 模型优化 

在少量数据的情况下,优秀的预训练模型能够带来更好的精度和泛化性。本范例选择PaddleOCR最新发布的PP-OCRv3模型完成数据微调。PP-OCRv3在PP-OCRv2的基础上,端到端指标H-means在中文场景再提升5%, 英文数字模型提升11%,如图3所示

图3 不同模型精度/耗时/大小对比

在具体策略方面,PP-OCRv3在检测部分使用ResidualSE-FPN(残差注意力机制的FPN结构),识别部分使用SVTR_LCNet轻量级文本识别网络,GuidedTraining of CTCAttention损失指导CTC损失训练策略。上述策略的详细解释将在直播课展开。

图4 PP-OCRv3具体策略展示

由于车牌场景均为边端设备部署,因此对速度和模型大小有比较高的要求。采用量化训练的方式能够压缩模型大小、加速模型推理速度。模型量化可以在基本不损失模型精度的情况下,将FP32精度的模型参数转换为Int8精度,减小模型参数大小并加速计算,使用量化后的模型在移动端等部署时更具备速度优势。

综上,对于车牌检测和识别有如下3种方案:

  • PP-OCRv3中英文超轻量预训练模型直接预测
  • 基于PP-OCRv3的策略在CCPD数据集中微调
  • 基于PP-OCRv3的策略在CCPD数据集中微调后量化

最终,检测方案指标如表1所示,识别方案如表2所示。

表1 检测方案指标

表2 识别方案指标

预测部署 

边缘部署和端侧部署是车牌识别的常见部署方式,PaddleLite轻量化推理引擎是飞桨专为手机、IOT端提供的高效推理能力。本范例采用PaddleLite的cpp推理,在骁龙855上完成示例演示,最终端到端预测速度为224ms。

产业实践范例教程,助力企业跨越AI落地鸿沟

飞桨产业实践范例,致力于加速AI在产业落地的前进路径,减少理论技术与产业应用的差距。范例来源于产业真实业务场景,通过完整的代码实现,提供从数据准备到模型部署的方案过程解析,堪称产业落地的“自动导航”。

  • 真实产业场景:与实际具有AI应用的企业合作共建,选取企业高频需求的AI应用场景如智慧城市-安全帽检测、智能制造-表计读数等;
  • 完整代码实现:提供可一键运行的代码,在“AIStudio一站式开发平台”上使用免费算力一键Notebook运行;
  • 详细过程解析:深度解析从数据准备和处理、模型选择、模型优化和部署的AI落地全流程,共享可复用的模型调参和优化经验;
  • 直达项目落地:百度高工手把手教用户进行全流程代码实践,轻松直达项目POC阶段。
http://www.lryc.cn/news/92207.html

相关文章:

  • Linux4.8Nginx Rewrite
  • DHT11温湿度传感器
  • RestTemplate超简单上手
  • 监控系统设计原则及实现目标
  • VulnHub项目:MONEYHEIST: CATCH US IF YOU CAN
  • 对象存储OSS简介,一分钟了解对象存储OSS
  • SpringCloud_微服务基础day2(Eureka简介与依赖导入,服务注册与发现)
  • #tmux# #终端# 常用工具tmux
  • 后端服务架构高性能设计之道
  • Python中的Time和DateTime
  • UNIX网络编程卷一 学习笔记 第十九章 密钥管理套接字
  • excel如何实现识别文本在对应单元格填上数据?
  • Groovy 基本语法
  • 系统学习IT技术的方法与实践
  • 聊聊TCP协议的粘包、拆包以及http是如何解决的?
  • 一百二十、Kettle——用kettle把Hive数据同步到ClickHouse
  • PyTorch 提示和技巧:从张量到神经网络
  • 第五期:字符串的一些有意思的操作
  • 使用Anaconda3结合vscode来实现django项目的建立(绝好的介绍)20230608
  • 【软件测试】软件测试的基本概念和开发模型
  • 接口测试 —— 接口测试定义
  • 2015 年一月联考逻辑真题
  • 基于GD32的定时器不完全详解--定时、级联
  • Clion开发STM32之ESP8266系列(四)
  • 降本增效,StarRocks 在同程旅行的实践
  • INTP型人格适合选择哪些专业?
  • 【LeetCode热题100】打卡第16天:组合总和
  • tinkerCAD案例:1.戒子环
  • RPC接口测试技术-Tcp 协议的接口测试
  • MyBatis Plus基本用法-SpringBoot框架