车牌识别1:License Plate Detection and Recognition in Unconstrained Scenarios阅读笔记

(1)简介

论文下载地址:License Plate Detection and Recognition in Unconstrained Scenarios [pdf
github 的项目地址:alpr-unconstrained

工程主页:alpr-datasets

视频效果: Demi Lovato Rock in Riio Lisboa 2018

本文选自ECCV2018的论文《License Plate Detection and Recognition in Unconstrained Scenarios  ( 复杂| 无约束 场景下的车牌检测和识别)》。该论文不进给出了一套完整的车配识别系统( Automatic License Plate Recognition system,ALPR system)的解决方案,而且提供了在无约束(Unconstrained Scenarios)场景下的识别算法, 很好的解决了实际生活中的车牌识别问题。

(2)motivation:

目前很多ALPR系统对正面拍摄车牌照片识别效果良好,但是在多变的角度和场景(光线)下车牌往往是倾斜的,导致识别的效果并不如意。


数据集中存在的倾斜车牌


基于此,这篇文章提出了一种完整的ALPR系统,可以在各种场景下具有良好的表现。在这篇文章的贡献主要有两个:

1. 介绍了一种新颖的神经网络,能够检测出不同场景环境下的车牌;并在OCR之前对变形的进行校正

2. 利用真实数据合成多样的车牌,用于训练。手动标注的样本了少于200个,并且是从头开始训练网络


(2)实现方法

ALPR 的主要任务是 在图像中找到并识别车牌(license plates );通常情况下会分为4个子任务序列:

1. 车辆检测(vehicle detection) ; 

 2.  车牌检测(  license plate detection); 

3. 字符分割( character segmentation)

4. 字符识别( character recognition)

而子任务3和4可以看做OCR;  所以一共有3个子任务:vehicle detection, license plate detection, OCR.  这篇文章也是按照这三个子任务的顺序进行展开的,如下图所示。文章中的ALPR系统分为: 基于YOLOv3 的车辆识别 --> 车牌的检测和校正--> 车牌的OCR识别。

示例流程


车辆的检测


考虑车辆的检测的需要使用的较少的时间,于是借用了YUOLOv3的模型与darknet框架进行检测的; 使用 YOLOv3的主要原因是: 1 . 检测速度很快(大约是70 FPS );  2. 识别的准确率较高,在PASCAL VOC数据集中的测试结果是76.8% mPA.  在这篇文章中,将YOLOv3直接拿来使用,同时忽略了除了cars以外的其他类别;

PS : 

Yolov3 相比于Faster RCNN 确实很快,但是也有致命的缺陷: 不能识别出特别小的物体。如果在实际应用中需要在一张很大的图像上识别很小的车,建议重新训练

另外,YOLOv3 中具有车牌的物体不仅仅是cars, 还有bus和truck;这两个类别在程序中确被忽略的。

原文:

原文解释


对于检测出的正样本,将会被resized 之后,送入车牌检测模块。resize的计算方式如下:

计算resize 因子:


(1)中,Wv和Hv是识别车辆后的图像大小, Dmin和Dmax是常量,分别是288和608

通过这种缩放计算以后,包含有车辆的图片会被统一成大小为 288*608大小的图片;


车牌的检测和校正

(不知道校正这个词用的对不对,贴出原文:License Plate Detection and Unwarping )

在车牌的检测模块中,作者提出了一种基于CNN 的物体检测网络: Warped Planar Object Detection Network,WPOD网络, 该网络是从YOLO\ SSD\ STN中获得灵感,但是并没有计算spatial transformations,我想可能是减少时间复杂度。

WOPD的检测流程如下:

可以看出来,在检测出车牌以后,还会对倾斜的车牌进行校正;现在需要关注的部分有两点:
1. WPOD是如何设计的?
2. 如何进行车牌校正的?

检测车牌的整个流程


好,回答第一个问题: WPOD的设计:

网络结构如下,可以看出在最后一层的DETECTION上又两个并行的网络,具体看下图或论文;

另一个两点是loss function的计算方式有所改变。

WPOD的细节

整个WPOD net的训练样本有196张,可以算得上是小样本了。这193张图片中,有105张是从Cas数据集中筛选的,有40张来自SSIC数据集,52张来自AOLP数据集。这些选出的车牌图片包含了欧洲、美国、巴西和台湾的车牌;


训练数据样本


车牌的校正过程,文章没有提,我想开源代码里面应该会有的;最近刚看完检测部分的代码

所识别和校正后的车牌图片(车牌的识别在OCR部分)


OCR

用于文字的切割和识别的网络是基于YOLO进行修改的;这部分值得一提的是样本生成的方法;

PS:  这里如果使用CRNN的话,效果可能会更好;尤其是当车牌存在语义关系的时候,例如:中文车牌就具有语义关系,车牌的第一位是汉字,第二位是大写字母, 后几位是数字加字母的情况;



生成车牌数据的流程



结果



备注:

loss 的计算方式和车牌的校正方法, 这两个应该在在阅读代码的时候找到对应的程序片段;

待理解以后,会写出对loss的理解


敬请期待~



by 2018/11/14