- Published on
LPRNet:端到端车牌识别网络
LPRNet:端到端车牌识别网络
什么是 LPRNet?
LPRNet 是一种端到端的车牌识别方法,由 Intel 团队于 2018 年提出。与传统方案不同,LPRNet 直接对整张车牌图片进行识别,输出完整的字符序列,无需中间的字符分割步骤。
核心特点
| 特点 | 说明 |
|---|---|
| 无需字符分割 | 端到端识别,避免分割误差累积 |
| 无 RNN 设计 | 全卷积网络,推理速度快 |
| 轻量高效 | 计算量小,适合嵌入式部署 |
| 实时性能 | CPU 上毫秒级推理,GPU 上更快 |
背景:传统车牌识别的局限
传统车牌识别通常采用先分割后识别的策略:
- 车牌定位 → 2. 字符分割 → 3. 单字符识别 → 4. 后处理
这种方法存在几个问题:
- 分割误差累积:字符分割错误会直接导致识别失败
- 对图像质量敏感:光照不均、倾斜、污损等场景下分割困难
- 计算开销大:多阶段处理增加延迟
LPRNet 通过端到端设计解决了这些问题。
网络设计思路
LPRNet 的核心设计围绕两个问题展开:
1. 如何在不分割字符的情况下识别?
LPRNet 使用全卷积网络处理输入图像,输出一个特征序列,每个位置对应图像中的一个局部区域。网络通过宽卷积核(1×13)捕捉字符间的上下文关系,使得每个位置的特征能够感知相邻字符的信息,从而直接预测该位置属于哪个字符。
由于输入宽度(如 94 像素)通常大于字符序列长度(如 7-8 个字符),网络输出的是一个冗余的特征序列,其中多个连续位置可能对应同一个字符。
2. 如何将冗余序列映射为真实字符?
LPRNet 采用 CTC 损失函数来解决对齐问题。CTC 的核心思想是:
- 引入一个空白符,表示“当前位置没有字符”
- 允许网络输出冗余的字符序列,CTC 会自动学习如何压缩重复字符、删除空白符
- 最终输出序列通过去重 + 去空白得到真实字符
例如,网络输出 [京, 京, 空, A, A, A, 1, 1, 空, 2],经 CTC 解码后得到 京A12。
关键技术创新
宽卷积替代 RNN
传统序列识别方案通常使用双向 LSTM 来捕捉上下文,但 RNN 存在以下问题:
- 推理速度慢,难以实时
- 对嵌入式设备不友好
- 训练时容易出现梯度问题
LPRNet 使用 1×13 的大尺寸卷积核替代 RNN,利用卷积的局部感受野捕捉字符间的依赖关系。这种方式:
- 计算量远小于 RNN
- 全卷积结构便于硬件加速
- 训练稳定,收敛速度快
Spatial Transformer 模块(可选)
LPRNet 支持在输入端加入空间变换网络,该模块可以:
- 自动检测车牌倾斜角度
- 通过仿射变换校正图像
- 提升倾斜车牌的识别准确率
该模块在训练初期需要关闭,待网络稳定后再开启,否则会影响收敛效果。
网络结构概览
LPRNet 的整体结构遵循以下设计原则:
- 轻量级 Backbone:基于卷积块堆叠的特征提取网络
- 多阶段下采样:逐步压缩空间尺寸,减少计算量
- 宽卷积上下文建模:替代 RNN 进行序列特征提取
- 分类头输出:输出特征序列的字符概率分布
网络的输入尺寸通常为 94×24 或 96×48 像素(宽×高),输出为每个位置的字符类别概率。
字符集设计
LPRNet 需要预先定义字符集,通常包含:
- 省份简称:京、津、沪、渝、冀、晋、辽、吉、黑、苏、浙、皖、闽、赣、鲁、豫、鄂、湘、粤、琼、川、贵、云、陕、甘、青、台、蒙、桂、宁、新、藏
- 字母:A-Z(排除 I 和 O,避免与数字混淆)
- 数字:0-9
- 空白符:CTC 所需的 blank 符号
不同国家/地区的字符集有所不同,需要根据实际应用场景定制。
训练策略
数据预处理
- 图像归一化:将像素值缩放到合理范围
- 数据增强:随机旋转(±5°)、缩放、平移、亮度调整等
- 尺寸统一:所有输入图像缩放到固定尺寸(如 94×24)
训练阶段
训练过程分为两个阶段:
预热阶段(前约 5000 轮):
- 不使用 STN 模块
- 让网络先学习基础特征
联合训练阶段:
- 开启 STN 模块
- 端到端联合优化
- 学习率逐步衰减
优化器与损失
- 优化器:Adam,适合稀疏梯度场景
- 损失函数:CTC Loss,自动处理序列对齐
- 正则化:Dropout(通常设为 0.5)防止过拟合
推理过程
LPRNet 的推理分为以下步骤:
- 输入预处理:车牌图像缩放到网络输入尺寸
- 前向推理:网络输出特征序列的概率分布
- CTC 解码:将概率序列转换为字符序列
- 贪婪解码:每帧取最大概率字符
- 去重合并:移除连续重复字符
- 去除空白:删除 blank 符号
- 后处理:根据车牌规则过滤无效结果
整个过程无需任何非极大值抑制或复杂解码,非常适合实时应用。
性能表现
推理速度
- CPU 环境:单张车牌推理约 1.3 毫秒
- GPU 环境:单张车牌推理约 3 毫秒
- 端到端处理:包含检测和识别的完整流程可达实时
准确率
在公开数据集(如 CCPD、CLPD)上,LPRNet 的字符识别准确率可达 95% 以上,在复杂场景(倾斜、光照变化、污损)下表现优于传统分割方案。
模型轻量
- 计算量:约 0.34 GFLOPs
- 参数量:约 33 万
- 模型大小:约 1.3 MB(FP32)
这使得 LPRNet 非常适合部署在边缘设备、摄像头、嵌入式系统上。
适用场景
- 智能交通:卡口监控、电子警察、停车场管理
- 移动端应用:手机拍照识别车牌
- 安防监控:门禁系统、小区管理
- 低功耗设备:树莓派、Jetson Nano 等边缘设备
局限性
尽管 LPRNet 表现出色,但在某些场景下仍有局限:
- 极端倾斜:超过 30° 的大角度倾斜可能影响识别
- 严重遮挡:字符被部分遮挡时,端到端模型难以恢复
- 超长车牌:某些特殊车牌(如拖挂车)字符数超过训练范围
- 夜间低光照:需要配合预处理或增强模块
与其他方法的对比
| 方法 | 是否分割 | 是否使用 RNN | 端到端 | 推理速度 | 部署难度 |
|---|---|---|---|---|---|
| 传统分割+分类 | 是 | 否 | 否 | 中等 | 高 |
| CRNN+CTC | 否 | 是 | 是 | 慢 | 中等 |
| LPRNet | 否 | 否 | 是 | 快 | 低 |
总结
LPRNet 的核心贡献在于:
- 证明了无需 RNN 也能进行有效的序列预测,通过宽卷积实现上下文建模
- 端到端设计消除了字符分割的依赖,避免了分割误差传播
- 轻量级架构使其适合边缘部署,在 CPU/嵌入式设备上实现实时推理
- CTC Loss 优雅地解决了序列对齐问题,无需人工标注字符位置
LPRNet 为车牌识别提供了一种简洁、高效、可落地的解决方案,至今仍被广泛应用于各类实际系统中。
THE END