1. 引入新颖的CNN,可以检测和纠正单一图像中的多个失真的车牌,将纠正后的车牌图片送入ocr方法中,得到最后的车牌文字
2. 对来自不同区域的车牌进行了人工标注:使用一个由真是数据和人工生成的数据组成的车牌进行训练, 并使用与目标区域相似的字体类重新训练ocr网络
3.扩展了现有的OCR方法,针对巴西车牌进行开发。
结果: 不仅仅在巴西车牌上的准确率很高,在欧洲和台湾车牌生也获得了很高的召回率和准确率
PS: 台湾车牌和欧洲车牌是由数组和字母构成的,其实和巴西车牌的构成是一样的,唯一所有不同的是车牌图像的比例可能会有所不同。但这种图像预处理的时候统一设置图片就好了
常见的商业软件大多是在场景受限的情况下对车牌进行识别的,例如停车场、收费站的监控,这些场景都很固定,摄像的角度和车牌 但是对于宽松的场景,比如执法人员手中的相机或者是智能机拍下的图片,照片的倾斜度可能会很高,对于这些商业软件而言,识别起来就很困难。
因此,本论文提出一个完整的ALPR系统,可以在多变的场景下表现良好。
总的来说就是: 目前很多ALPR系统对正面拍摄车牌照片识别效果良好,但是在多变的角度和场景(光线)下车牌往往是倾斜的,导致识别的效果并不如意。因此,本论文提出一个完整的ALPR系统,可以在多变的场景下表现良好。
数据集中存在的倾斜车牌
1. 介绍了一种新颖的神经网络,能够检测出不同场景环境下的车牌;并在OCR之前对变形的进行校正。
2. 利用真实数据合成多样的车牌,用于训练。手动标注的样本了少于200个,并且是从头开始训练网络。
ALPR 的主要任务是 在图像中找到并识别车牌(license plates );通常情况下会分为4个子任务序列:
而子任务3和4可以看做OCR; 所以一共有3个子任务:vehicle detection, license plate detection, OCR. 这篇文章也是按照这三个子任务的顺序进行展开的,如下图所示。
具体的说就是:基于YOLOv3 的车辆识别 --> 车牌的检测和校正--> 车牌的OCR识别:
示例流程
根据经验,较大的输入图像上是可以检测较小的物体,但是这会增加了计算量。车牌属于小目标的检测,通常情况下在有车的图片上,往往会伴随着车牌,(即:有车牌的地方一定能检测出车辆),所以可以先检测车辆。
这是因为在正视图上,车牌的大小和车辆的bounding box的比例较大;而在斜视图或者侧视图上,车牌大小和车辆的比例较小。因此,需要将倾斜的视图调整到正面的视图上,以保持车牌区域的可识别性。简而言之就是:倾斜视角的车牌面积较小,将车牌变成正视图的视角后,车牌面积会增大,从而增加车牌的识别率。
倾斜视角的车牌面积较小,将车牌变成正视图的视角后,车牌面积会增大,从而增加车牌的识别率。
在车牌校正方面,虽然3D姿态估计是方法可以确定校正的尺寸和调整的尺度,但是本文提出了一种基于车辆boundingbox的纵横比(aspect ratio)的一种方法,简单又高效。首先需要设置resizing factor,即当boundingbox的aspect ratio接近于1的时候,影响因子会较小;当aspect ratio 增加的时候,影响因子也会增加。
缩放因子的计算方式如下:
(1)中,Wv和 Hv是识别车辆后的图像大小, Dmin和Dmax是常量,分别是288和608
其中:Wv和Hv是车辆的bounding box的宽度和高度。
注意: 由于Dmin ≤ fsc min(Wv, Hv) ≤ Dmax,所以Dmin和Dmax为调整车辆图片的维度大小划定了范围,经过尝试之后最佳的值是Dmin=288; Dmax=608
fsc代码实现如下:
缩放因子用于计算后期的图像的宽高:
使用 YOLOv3的主要原因是:
1 . 检测速度很快(大约是70 FPS );
2. 识别的准确率较高,在PASCAL VOC数据集中的测试结果是76.8% mPA.
PS :
Yolov3 相比于Faster RCNN 确实很快,但是也有致命的缺陷: 不能识别出特别小的物体。如果在实际应用中需要在一张很大的图像上识别很小的车,建议重新训练
另外,YOLOv2 中具有车牌的物体不仅仅是cars, 还有bus和truck;这两个类别在程序中确被忽略的。
使用YOLOv2 用于车辆检测:本文没有对YOLO进行更改和改进,只是将网络该网络作为车辆检测的工具,将汽车和公交车这两类进行合并,忽略了yolo里面的其他类别。
将检测出的车辆图片裁剪并且进行调整,作为车牌识别的输入。
测出的正样本(车辆),将会被resized ,送入车牌检测模块。resize 因子已经在上一节给出,通过这种缩放计算以后,包含有车辆的图片会被统一成大小为 288*608大小的图片;
车牌本质上是附加在车上的矩形平面物体。为了充分的利用车牌的形状优势,本文提出了一种 扭曲平面检测网络(Warped Planar Object Detection Network., WPOD NET)。该网络可以学习识别不同扭曲程度的车牌,并学习回归仿射变换的系数,将就扭曲的车牌unwarps成正面视图下的矩形形状。WOPD的检测流程如下图所示。
经过WPOD网络之后是一个8通道的特征图(图片中显示的是6通道,应该是8)
在特征图上提取扭曲的车牌,首先会设置固定大小的单元(m, n)
如果该单元的目标概率大于给定的阈值(threshold),那么部分回归参数用于构建放射变换矩阵,将虚拟正方形区域转换成车牌的区域
该网络的结构总共21层卷积,其中14层是内部残差块(ResBlock);所有的卷积核大小均为固定大小的3*3;除了识别块(Detection)以外,其他的激励函数全部是ReLu;包含有4个2*2大小的max pooling,stride=2,这样可以使得输入的维度减少了16倍(2*2*4);最后在识别模块有两个并行的卷积层
具体结构如下图(fig4)所示,左侧是网络的整体结构,右侧是ResBlock和Detection块的结构。
可以看出来,在检测出车牌以后,还会对倾斜的车牌进行校正;现在需要关注的部分有两点:1. WPOD是如何设计的?2. 如何进行车牌校正的?
3. 为什么会在最后一层使用两个并行的卷积层?
检测车牌的整个流程
好,回答第一个问题: WPOD的设计:
网络结构如下,可以看出:整个网络是Conv( 包含res-block ) +Maxpooling +DETECTION构成的; 一共有21个卷积层,其中14个是residualblocks,所有的卷积层的filter/kernal大小都是3*3;并且每个Conv操作都会使用到ReLu;另外有4个Maxpooling的,kernel=2*2, stride=2,
DETECTION上是两个并行的网络(粉红色的区域); 第一个是使用softmax函数去推断概率; 第二个是回归仿射参数,而不需要激活,使用恒等式F(X)=x作为激活函数
WPOD net 结构详情
res_block的实现:
如下图所示,WPOD Net本身是没有纠正车牌的能力;
作者是构建仿射矩阵,将虚拟方框(白色的方框)转换为lp区域。 WPOD net会输出一个8-channel的feature map,以及编码对象的概率和放射变换的参数。为了能够获取扭曲的车牌,首先在box的中心设置一个固定大小的虚框。如果以(m,n)单元为中心的虚框的目标概率大于检测的阈值,说明白色方框覆盖的区域里 有车牌,同时为扭曲的车牌进行仿射变换。
对扭曲车牌检测的效果图:
问题3. 为什么会在最后一层使用两个并行的卷积层?
到现在为止,我们还没有回答这个网络的最关键的问题:文中提到的warp net放射变换参数是从哪里得到的?
网络最后的并行卷积层有着不同的使命:
第一个卷积模块是:用于计算物体的概率的,使用了softmax作为激励函数。
第二个卷积模块是:用于获取仿射参数的,没有使用激励函数
两个卷积学习的目标是根据Loss function 而定的,因此还需要知道loss function 是如何实现的。
第一个卷积模块是:用于计算物体的概率的,使用了softmax作为激励函数。
第二个卷积模块是:获取仿射参数的,没有使用激励函数
假设
问题4. 如何实现仿射变换的?仿射变换恢复的扭曲图片和3D恢复的扭曲图片有什么区别?
1.解释仿射变换
2. 解释仿射变换实现的车牌校正
3. 解释仿射变换与3D扭曲图片之间的区别
这部分字符分割和识别是使用改进的YOLO模型。
数据集是通过使用合成和扩增数据来处理世界各地不同区域的LP特征,在该工作中大大地扩大了训练数据集。 人工创建的数据包括将7个字符的字符串粘贴到纹理背景上,然后执行随机转换,如旋转、平移、噪声和模糊。
车牌数据集的制作流程如下图所示:
制作好的数据如下入所示:
这种综合数据的使用极大地提高了网络的泛化能力,使得完全相同的网络对世界不同地区的LPs都有很好的应用效果。
这部分涉及OCR , 后期会专门设置一个专题阐述OCR的识别算法
这篇论文的实用性应该较高;但就创新性而言,并没有太多改进。值得一提的是对扭曲的车牌进行了仿射变换,使得车牌可以恢复正常矩形的形状 。
在论文的最后,作者给出测试的结果,通过对比5中不同的车牌检测数据集可以看出这篇论文的综合测试的正确率较高。
输出的日志:
最终的识别结果:
-------------------------------------------------------------------------------------------------------------------------------------