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个不同的分类器,模型参数多。
总的来说这篇文章针对是针对车牌识别任务提出来的,很优秀,可迁移性较低。