基于PaddleOCR的车牌识别
车牌识别(Vehicle License Plate Recognition,VLPR) 是计算机视频图像识别技术在车辆牌照识别中的一种应用。车牌识别技术已被广泛用于智能交通的各个领域:
在上述场景下,车牌识别的主要难点如下:
本项目基于Aistudio完成, 具体环境如下:
下载 PaddleOCR代码
安装成功后可看到如下提示:
所使用的数据集为 CCPD和自建黄牌车牌数据集,CCPD车牌数据集包含蓝牌和绿牌两种类型,数据集分布如下:
解压之后数据的分布如下
选用 PaddleOCR 中的 PP-OCRv3中的文本检测模型做为base模型,并且使用 PP-OCRv3 文本检测模型参数作为预训练模型。由于车牌场景均为端侧设备部署,因此对速度和模型大小有比较高的要求,因此还需要采用量化训练的方式进行模型大小的压缩和模型推理速度的加速。模型量化可以在基本不损失模型的精度的情况下,减小模型参数大小并加速计算,使用量化后的模型在移动端等部署时更具备速度优势。
因此,本实验中对于车牌检测有如下3种方案:
开始实验之前先切换到PaddleOCR目录
从下表中下载PP-OCRv3文本检测预训练模型
使用如下命令下载预训练模型
使用如下命令进行PP-OCRv3文本检测预训练模型的评估
执行完成后可看见如下输出:
使用预训练模型进行评估,指标如下所示:
和评估相同,进行训练也需要对部分字段进行设置,具体如下:
在使用预训练模型进行fine-tune时,需要设置如下11个字段
使用如下代码即可启动在CCPD车牌数据集上的fine-tune。
训练过程中可看见如下输出:
训练完成后使用如下命令进行评估
执行完成后可看见如下输出:
使用预训练模型和fine-tune,指标分别如下:
可以看到进行fine-tune能显著提升车牌检测的效果。
要是想在端侧设备上进行部署,我们还需要对模型进行量化以提升模型的运行速度并降低模型体积。
此处使用在线量化训练,如果需要在线量化训练可通过如下命令启动:
量化后指标对比如下
可以看到通过量化训练在精度几乎无损的情况下,降低模型体积60%并且推理速度提升15%。
执行完成后可看见如下输出:
导出后的模型,使用如下命令可使用预测引擎对单张图片进行推理:
执行完成后可看见如下输出:
这里选用 PaddleOCR 中的 PP-OCRv3中的文本识别模型做为base模型,并且使用 PP-OCRv3 文本识别模型参数作为预训练模型。同样使用量化训练减小模型参数大小并加速计算
因此,本实验中对于车牌识别的优化有如下3种方案:
从下表中下载PP-OCRv3文本识别预训练模型
使用如下命令下载预训练模型
使用如下命令进行PP-OCRv3文本识别预训练模型的评估
执行完成后可看见如下输出:
使用预训练模型进行评估,指标如下所示:
从评估日志中可以看到,直接使用PP-OCRv3预训练模型进行评估,acc非常低,但是norm_edit_dis很高。因此,我们猜测是模型大部分文字识别是对的,只有少部分文字识别错误。使用如下命令进行infer查看模型的推理结果进行验证:
执行完成后可看见如下输出:
从infer结果可以看到,车牌中的文字大部分都识别正确,只是多识别出了一个·。针对这种情况,有如下两种方案:
优化后处理
改动前后指标对比:
可以看到,去掉多余的·能大幅提高精度。
和评估相同,进行训练也需要对部分字段进行设置,具体如下:
使用如下命令启动 fine-tune
训练过程中可看见如下输出:
评估
训练完成后使用如下命令进行评估
执行完成后可看见如下输出:
使用预训练模型和fine-tune,指标分别如下:
可以看到进行fine-tune能显著提升车牌识别的效果。
要是想在端侧设备上进行部署,我们还需要对模型进行量化以提升模型的运行速度并降低模型体积。
此处使用PACT在线量化进行训练,如果需要在线量化训练可通过如下命令启动:
量化后指标对比如下:
量化后能降低模型体积53%并且推理速度提升57%,但是由于识别数据过少,量化带来了1%的精度下降。
(此处使用非量化模型)
在实际部署中,我们需要将动态图训练的模型转换为静态图模型进行推理,使用如下命令可以将训练好的模型导出为静态图模型:
执行完成后可看见如下输出:
导出后的模型,使用如下命令可使用预测引擎对单张图片进行推理:
执行完成后可看见如下输出:
检测模型和识别模型分别fine-tune并导出为inference模型之后,可以使用如下命令进行端到端推理。
执行完成后可看见如下输出:
我们分别使用PP-OCRv3中英文超轻量预训练模型在车牌数据集上进行了直接评估和 fine-tune 和 fine-tune +量化3种方案的实验,指标对比如下:
结论
PP-OCRv3的检测模型在未经过fine-tune的情况下,精度和经过 fine-tune 后又较大差距。在使用量化训练后检测模型的精度几乎无损,并且模型大小压缩57%。
PP-OCRv3的识别模型在未经过fine-tune的情况下,在车牌数据集上精度为0%,但是经过分析可以知道,模型大部分字符都预测正确,但是会多预测一个特殊字符,去掉这个特殊字符后,精度就提高了很多。PP-OCRv3识别模型在经过 fine-tune 后识别精度进一步提升。在使用量化训练后识别模型大小压缩55%,精度轻微损失。本次也参考了很多大佬的项目,也又查看PaddleOCR的文档等,通过这次项目经验,也是学到了很多新的知识和BUG,希望和大家一起进步,由于本人备考研究生,没有太多时间训练所以也请见谅。
参考项目和文献:
学员:罗宏立
感谢老师指导,再接再厉
学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>
更多推荐
利用Amazon Bedrock畅玩Claude 3等多种领先模型,抢占AI高地(体验倒计时4小时)
RAPTOR:索引树状 RAG,使用树结构来捕捉文本的高级和低级细节