pytorch实现车牌端到端识别 - CCPD论文、原理、程序解读

Song • 1969 次浏览 • 0 个回复 • 2019年02月24日

OCR——CCPD论文、原理、程序解读

摘要: ECCV2018接收,中科院发表,做车牌检测+识别;并公布了一个相当大的中文车牌数据集,大约12GB,约250K张车牌图片。

1. 数据集

Chinese City Parking Dataset (CCPD)大约有12GB,约250K张独立的车牌图片,具有不同的背景,不同的拍摄角度,不同的时间,不同逆光程度。总结:样本多,样本样式丰富。数据如图:

数据集

2. 网络模型

现在很多车牌识别算法将整个任务分为两部分:检测+识别,还有的分成三部分:检测+分割+识别。论文分析了一下上述框架的弊端,提出了一个端到端的网络Roadside Parking net (RPnet) 同时17年的这篇论文《Towards end-to-end car license plates detection and recognition with deep neural networks》也是一个端到端的网络(未公开代码),但是采用了区域建议网络(RPN)和双向LSTM(BLSTM)速度较慢,而RPnet只主要采用了卷积和全连接层,在P400上能做到60fps

2.1 网络结构

网络结构

  • 检测:车牌检测部分,未采用目标检测的思路,而是直接做的一个目标回归,所以,只能从一张图片中检测出一个目标,不能是多个目标;同时,对于没有目标的图片,依然会输出一个目标区域。
  • 识别:识别部分,利用检测网络第2,4,6层卷积层提取到的特征,crop分割出读数区域,接着分别对3个不同维度的特征做区域自适应池化,将车牌区域的特征变成8 ∗ 16 ∗ 64, 8 ∗ 16 ∗ 160 and 8 ∗ 16 ∗ 192,然后合并成8×16×416,然后向量化为53248维的向量特征,再将特征送入7个不同的分类器(为啥是7个?因为,国内的车牌统一为7位),第1位为38类,表示省份;第2位25类,车牌的英文;后面就是数字和英文35类,同时,这里采用了5个不同的分类器。不知道是否可以用同一个(可以提高推理速度)。
  • 训练:训练时模型采用了两步训练的策略,即先单独训练检测模型,再载入检测模型,同时训练检测部分和识别部分。
  • 损失函数:

    • 检测回归部分:L1loss

    L1loss

    • 字符识别部分:交叉熵

    交叉熵

2.2 结果

论文和Cascade + HC,SSD300,YOLO9000等算法做了对比,结果: 结果

3. 总结

3.1 优点

  • 一个足够大,足够丰富的数据集
  • 在车牌检测任务中提出了一个端到端的网络
  • 精度和速度都还行(从论文来看)

    3.2 缺点

  • 不能做一张图片中有多车牌的检测和识别
  • 对于没有车牌的图片也会输出检测结果
  • 检测部分不支持旋转检测
  • 识别部分不支持不定长字符的识别;使用了7个不同的分类器,模型参数多。

总的来说这篇文章针对是针对车牌识别任务提出来的,很优秀,可迁移性较低。

Reference

  1. https://github.com/detectRecog/CCPD
  2. OCR——CCPD论文、原理、程序解读

原创文章,转载请注明 :pytorch实现车牌端到端识别 - CCPD论文、原理、程序解读 - pytorch中文网
原文出处: https://ptorch.com/news/236.html
问题交流群 :168117787
提交评论
要回复文章请先登录注册
用户评论
  • 没有评论
Pytorch是什么?关于Pytorch! pytext - Facebook AI开源的基于PyTorch的自然语言建模NLP框架