周世杰,李顶根
(1.华中科技大学 中欧清洁与可再生能源学院,湖北 武汉 430074;2.华中科技大学 能源与动力工程学院,湖北 武汉 430074)
智能交通系统[1](intelligent traffic system,ITS)是将计算机技术、传感器技术、图像处理技术、通信技术等相关技术结合使用到交通运输的管理体系,从而建立起来一种高效、实时、精准的综合运输与管理系统。车牌作为车辆的一个身份标识,在智能交通系统中有着至关重要的作用,系统通过车牌对车辆进行区分从而进行辨认以及管理。因此,车牌识别技术在智能交通系统中显得尤为重要。
Jian Yang等[2]开发了一个包括图像采集、车牌定位、字符分割和字符识别的系统,改进了二值图像定位方法,使用模板匹配方法进行字符识别,该方法对车牌面积超过总图像1/5的图像能进行很好的识别。Feng Gao等[3]提出了一种结合了垂直边缘检测、车牌颜色信息和数学形态学的车牌定位方法以及基于BP神经网络的字符识别方法,结果表明定位准确率为96.5%,识别准确率为90.5%。Dun等[4]利用垂直边缘和滑动窗口相结合的方式对车牌进行检测,并用深度学习的方法进行字符检测,准确率为83.29%。刘建国等[5]基于AlexNet提出了一种车牌识别算法,该算法车牌识别准确率达到96.7%。张娜等[6]在图像预处理、车牌定位、字符分割的基础上,采用改进的BP神经网络对字符识别,准确率达到96.15%。这些车牌识别技术对图像中车牌面积有很高的要求,不涉及到大场景下多车道车辆的车牌识别。
本文提出了一种基于卷积神经网络的大场景下车牌识别方法,可以识别大场景下图片里多车道的车辆车牌。该方法分两步完成车牌识别,首先以textboxes++[7]为基础网络架构进行修改,以修改后的网络作为前端车牌检测网络。检测到车牌后,对车牌进行裁剪并送入后端识别网络进行识别,后端识别网络采用CRNN[8]框架。网络训练在自行采集的大场景图片中完成,总体识别准确率达到94%,可以对一张图片中多车道的车辆车牌进行检测与识别。
本文的研究对象为大场景下的图像,目前网上开源的车牌数据集EasyPR[9]为小场景下的图像,不包含多车道的图片,而且车辆占据图片中大多数的比例,因此不符合本文的要求。为了解决此问题,实验室分配多人分不同时段使用GoPro相机在不同地点进行数据的采集工作。采集的图像样例如图1所示。
图1 车牌检测数据集示例(4车道及3车道图片示例)
图片包含多个车道的车辆,采集的数据中不全是4车道,也含有双车道、3车道的图像,图片中车牌的分辨率保证在150×30左右。实验室最终采集了5000张图片,并对图片进行标注工作,将图片中的车牌标注出来。随后在5000张图片中随机选取1000张作为测试集,其它4000张图片作为车牌检测网络的训练集。
后端车牌识别网络的数据集由从实验室实地采集的5000张图片中裁剪出的车牌图片组成,对于采集的过于模糊的车牌我们未将其放在数据集内,本文也暂时没有考虑对过于模糊的车牌进行处理。与此同时,在有车牌底框、背景的情况下生成了10 000张车牌图片,生成车牌的过程中会进行倾斜、加噪声、添加背景等操作。自主生成的 10 000 张车牌图片作为预训练数据集,后端的车牌识别网络先在该10 000张图片中进行训练得到预训练模型,然后在该模型的基础上用实际场景下5000张图片中车牌的裁剪图片进行训练,从而得到最终的车牌识别模型。
前端车牌检测网络以textboxes++网络架构为基础进行修改,网络的整体结构如图2所示。该网络以VGG-16[10]的前13层为基础网络,同时将VGG网络后面的两层全连接层(fc6以及fc7)替换为卷积层(conv6以及conv7),然后在后面额外添加8层卷积层(从conv8_1到conv11_2),接着选取整体结构中的7个卷积层连接到“车牌框层”,该层也是卷积层,将在后面对该层做详细介绍。最后在“车牌框层”后面使用非极大值抑制(non-maximum suppression,NMS)。该车牌检测网络为全卷积网络,总共有23层卷积层。
“车牌框层”为卷积层,在前面7个不同的卷积层的输出特征图上做检测,预测车牌存在的概率以及包围框的坐标信息。然后通过后面的非极大值抑制筛选出最正确的预测。不同于textboxes++的网络结构,本文将第10层、第13层、第15层、第16层、第18层、第20层以及最后的第23层卷积层连接到“车牌框层”,与此同时考虑到我们采集的数据中车牌在图片中的分辨率保证在150×30左右,该卷积层的卷积核采用1×5大小。
图2 车牌检测网络结构
“车牌框层”的输出为分类分数和坐标信息,损失函数由两部分组成,分类损失(Lconf)以及定位损失(Lloc)。令x为默认框和真实框匹配的系数,xij=1表示在满足阈值的情况下默认框i与真实框j相匹配,否则xij=0。 令c为预测的置信度,l为预测的车牌框,g为实际的车牌框,则损失函数表达式为
(1)
式中:N为与真实车牌框匹配的默认框的数量,α在文中设置为0.2,分类损失Lconf采取2分类softmax损失函数
(2)
(3)
定位损失Lloc为预测车牌框(l)与实际车牌框(g)之间的smooth L1[11]损失,令默认框(d)中心坐标为cx、cy,宽为w,高为h,则定位损失计算式为
(4)
(5)
(6)
车牌识别网络采取CRNN网络结构,它包括3个部分:卷积层、循环层以及转录层。卷积层由标准的卷积神经网络模型中的卷积层和池化层组成,它从输入的图像经过卷积后得到的特征图上提取出特征序列。循环层由一个深度双向LSTM循环神经网络构成,预测特征序列中的每一个特征向量的标签分布。转录层基于词典中的标签序列将LSTM循环神经网络预测的特征序列转化为最终的结果。网络的具体配置见表1,其中f,k,s,p分别表示卷积核的个数,卷积核的尺寸,步长以及填充。
本文采用识别准确率(accuracy)来对网络模型进行评估,识别准确率是正确识别的样本数与总样本数的比值
(7)
式中: TP=true positives, TN=true negatives, FP=false positives, FN=false negatives。 不同于传统意义上的TP、TN、FP、FN,本方法中的识别准确率要求既能检测到车牌也能准确识别,即TP表示图片中有车牌被检测到且准确识别出来;TN表示图片内没有车牌,检测时没有误检所以也没有识别;FP表示图片内有车牌没有检测出来或者检测出来后识别错误;FN表示图片内有车牌但是没有检测出来。我们对提出的改进的网络结构在实验室做的数据集上进行了实验,网络模型的训练均在实验室服务器上完成,服务器CPU及GPU配置型号为:Intel(R)Xeon(R) CPU E5-2620 v4;GTX1080Ti。服务器共有两块CPU,每块有8个核心,16个逻辑处理器;两块GPU,每块GPU显存为11 G。在训练集上训练收敛后,将模型在测试集上进行实验。该方法的实验结果在表2中呈现出来,与此同时,为了比较本文提出的方法和一些已有的方法,表2也包含了其它车牌识别方法的准确率等信息。
表1 车牌识别网络结构
表2 车牌识别方法对比
从表2中可以看出,本文提出的方法的总体识别准确率为94%,不是最高的,但是本文提出的方法是针对大场景下的图片,图中包含多个车道,而且计算准确率的时候要求图中所有车牌均准确检测识别出来,否则都算识别出错,而其它方法并不具备此条件,其它方法的高识别准确率是针对于普通场景而言(普通场景如图3所示),对于大场景下的车辆图片进行车牌识别的时候无法正确检测及识别出来。
图3 普通场景
本文提出的车牌识别方法的效果如图4所示。图4左下角部分为整体效果。为了更加直观地反映识别效果,特别对车牌部分进行了局部放大(箭头指向部分为局部放大图)。从图中可以看到本文提出的方法对于大场景中的4个车道上的车辆车牌进行了很好的检测与识别。图5为数据集中3车道图片识别效果。
图4 车牌识别效果(箭头表示局部放大)
图5 3车道车牌识别效果(箭头表示局部放大)
为了更加细致地了解本文提出的方法对不同车道数情况的识别效果,特意将测试集中的4车道和3车道图片挑选出来单独进行识别,并单独分别进行识别准确率的计算。计算结果见表3,4车道的车牌识别准确率为89%,而3车道的车牌识别准确率达到96%。3车道图片的车牌识别准确率比4车道图片的车牌识别准确率高出很多,为此将数据集中的4车道的图片拿出来和3车道进行对比,发现3车道图片中车牌的清晰度比4车道高出很多,而且实验室采集的4车道图片中虽然车道线只标出了4条车道,但车道两边的延伸很多,完全超出了4车道的范围,这是造成4车道图片车牌识别准确率低的原因之一。另外经过对4车道图片数据的认真盘查后发现,很多图片中车牌的首个汉字或者其中一些字母比较模糊,特征不够明显,这也造成了识别的困难。为此把测试集中4车道图片中车牌号比较模糊的图片去除后重新进行实验,此时4车道图片车牌识别的准确率也能够达到95%。数据集中也包含正拍的双车道图片(车辆在图中占据大部分,车牌清晰可见),本文提出的方法在这些图片中的识别准确率达到98%,文中不对该类型图片进行展示。
表3 本文方法在不同车道数下的识别率
针对大场景下的车牌识别问题,本文提出了一种基于卷积神经网络的车牌识别方法,可以对图片中多车道的车辆车牌进行检测识别。为了完成该研究课题,实验室专门采集了大场景下的车牌数据集,并在该数据集上进行了实验,实验结果表明,整体的车牌识别准确率为94%。当将数据集中的4车道和3车道的图片单独拿出来并将车牌比较模糊难以辨认的图片剔除后,分别进行实验的时候,4车道图片的车牌识别准确率为95%,3车道图片车牌的识别准确率为96%。这些数据表明本文提出的方法能很好地应用到大场景下多车道的车牌识别问题中去。