汤诺辉,林志坚,陈平平,郭里婷
(福州大学物理与信息工程学院,福建 福州 350108)
随着国民汽车普及率升高,城市交通与汽车管理问题日益突出,智能交通应运而生.其中,车牌识别是智能交通的重要一环.近年来,研究者一直致力于提升车牌识别精度、速率及场景适应性,一方面通过卷积神经网络训练的车牌识别模型提取出更深层次的特征[1],有效解决车牌识别的精度问题.另一方面,研究者认为将检测和识别功能相结合有利于整个识别过程的效率和准确度,文献[2]提出的端到端神经网络和文献[3]提出的路边停车网络可在单一网络中同时实现检测和识别功能.为了进一步提高精度和场景适应性,文献[4]在卷积神经网络的基础上添加空间转换网络模块应对输入图像形变;文献[5-6]用数据增强获取更加丰富的训练集以提升神经网络识别精度;上述采用功能模块和数据增强的方法为本研究优化神经网络提供了新思路.
受网络传输影响,远端服务器端的车牌识别方案在时延方面难以满足实时性要求,在考虑成本和便捷性方面服务器并不适合部署于边缘侧.为解决时延问题,现场可编程逻辑门阵列(field programmable gate array,FPGA)凭借其拥有低功耗、强可靠性、小体积和适合高并行度计算等优势,在边缘设备实现卷积神经网络中备受关注.随着FPGA搭载神经网络的需求不断扩大,为加速神经网络的快速部署,赛灵思公司于2019年推出深度学习处理单元(deep-learning process unit,DPU)软核,此举可缩短用户搭建硬件逻辑的开发周期,加速深度学习推理算法方案部署,从而促进深度学习网络在FPGA端快速实现和应用.目前,研究者仅利用DPU进行网络加速[7],或将赛灵思公司发布部署于DPU的神经网络进行功能实现[8],而赛灵思公司推出的神经网络结构过于复杂冗余,推理速度慢,不能发挥DPU在车牌识别方面的优势.
为此,本研究采用轻量级车牌识别神经网络(license plate recognition network,LPRNet),并根据DPU的要求对LPRNet进行重新设计并优化成SE-LPRNet神经网络,首次将LPRNet神经网络通过DPU部署于FPGA器件,设计出边缘设备FPGA端车牌识别系统.
车牌识别系统硬件架构包括视频传输和神经网络两个部分.视频传输实现视频采集、视频预处理(车牌检测、图像裁剪)、视频输出功能;神经网络实现车牌识别功能.通过自定义插件,实现视频传输与神经网络信息交互.
整个车牌识别系统工作流程为: 1) 利用硬件板上的高清多媒体接口实现视频的输入,从输入源捕捉视频帧缓存,在可编程逻辑侧使用视频接收软核完成对视频流的提取.2)利用视频处理软核与中央处理单元协同合作对视频进行灰度化和滤波等图像处理,实现可裁剪矩形车牌轮廓的功能;再对裁剪后的车牌进行色彩空间转换、视频格式转换和分辨率的缩放等预处理;最后将视频写入内存.3) DPU读取内存中预处理后的输入视频,创建识别任务,利用部署在DPU的神经网络模型对视频帧数据进行识别.将感兴趣区坐标、识别信息输出至内存中.4)自定义插件通过帧缓存读取软核和读取内存中的视频帧数据,获取感兴趣区坐标和识别结果.基于感兴趣区域和识别结果,绘制车牌定位框并打印结果.5)通过视频发送软核输出视频帧缓存,在显示器上显示识别后的视频.
目前,车牌检测主流算法性能已满足应用至城市交通的需求,如Faster-RCNN和YOLO算法在车牌检测中可达到93.56%和97.8%的平均准确率[9].车牌识别算法因天气、角度等多种原因无法达到应用至实际场所的效果,故本研究重心在于识别网络上.经过比较,选取车牌识别算法,如表1所示.Resnet101模型在图像识别模型中识别率最佳,但是模型推理过程的计算量相较于SqueezeNet、LPRnet没有优势,而SqueezeNet模型虽计算量较小,但是模型识别率并不出众;基于Pytorch框架的LPRNet模型体积只有1.7 MB,计算量也适中,搭载于FPGA的推理速度较快,并且识别率也并不逊色于目前较为主流的ResNet、AlexNet等机器学习图像识别模型.因此,选择由英特尔推出的轻量级神经网络LPRNet算法作为运行于DPU的神经网络模型进行车牌识别.而经优化后SE-LPRNet模型参数也仅仅只有3.6 MB,计算量远小于目前大部分主流的模型,运行在FPGA上的推理速度仍然可以满足现实需求,识别率却大幅提高.
表1 机器学习分类算法模型体积对比
随着国内对新能源汽车的重视,具有8位数车牌号的新能源汽车的数量急剧上升,为满足实际需要,车牌识别算法需要同时具备识别两种车牌号的功能.而大部分的车牌识别仅限于对7位数车牌进行识别,且都采用7位字符分割思想.因此,其所采用的损失函数并不适合8位数字符车牌识别.基于此考虑,本研究选取联结主义时间分类损失函数(connectionist temporal classification loss,CTC LOSS)和贪婪算法以满足可同时识别两种类型的车牌的需求[15].CTC LOSS主要是解决神经网络标签和输出不对齐的问题,其优点是不用强制对齐标签且标签可变长,仅需输入序列和监督标签序列即可进行训练,其应用场景还适用于文字识别、验证码识别、手写数字识别、语音识别等领域.
CTC LOSS函数需要对模型可识别的所有字符进行计算,现定义含空白符号的字符集合L′,即
L′=L∪{blank}
(1)
式中:L为神经网络需要进行识别的字符集合.经过B变换,将加入空白符长度为T的字符集合L′经过B变换得到原始L,即
B:L′T→L≤T
(2)
显然对于L的最大长度,有|L|≤T.
通过下式计算输出的条件概率,
(3)
其中:π∈B-1(l)表示经过B变换结果为l的路径π.条件概率的范围在0到1之间,越接近1代表准确率越高.
与大多数监督学习相同,CTC 使用最大似然标准进行训练,故CTC损失函数表达式可归纳为
CTC(x)=-ln(p(l|x))
(4)
本研究设置神经网络输出矩阵为(18,69),矩阵每行69位数值对应着68个包含省份字母数字和空白字符的置信度,从中选取置信度最高的字符,选取出18位字符,通过贪婪算法将空白符和重复字符舍去,最终即可得到识别结果.
相较于传统硬件逻辑设计思路,部署DPU运行神经网络具有易修改,易移植和搭建效率高等优点,然而,目前DPU仅支持卷积和池化等基本操作,不支持乘除运算和全连接层,且对卷积核和池化参数大小有限制.因此,需要将现有神经网络部署于FPGA进行浮点数的定点量化和结构裁剪以适配DPU特性,但与此同时会带来识别精度的损失.
为兼顾识别精度和实时性,本研究将压缩与激励(squeeze and excitation,SE)模块[16]加入LPRNet神经网络中,提出改进型SE-LPRNet网络模型.SE模块分为压缩和激励两个操作,通过学习通道间的依赖性,在通道方向增加注意力机制.该模块通过压缩全局空间信息提取全局上下文信息.为了得到通道间的依赖信息进行激励操作,而激励操作需要满足两个条件: 1) 灵活提取通道间的非线性信息;2) 学习非互斥关系.为此,激励操作选用具有门控机制的sigmoid函数得到权重.为了降低模型的复杂程度并增加泛化能力,在激励操作中增加2个全连接层.第1个全连接层起到降维作用,降维系数为1个超参数,可用于控制中间层个数,保持网络精确度和复杂度之间的平衡;第2个全连接层用于恢复原来维度.最后SE模块将权重乘上原始特征得到不同激活值达到提升有用特征和抑制无用特征的效果.
在适配DPU方面,DPU不支持SE模块中的全连接层,利用内核为1×1的卷积层替换全连接层以达到同样效果.SE模块有多种集成策略,文献[16]将最初设计的集成策略作为SE标准策略,后根据SE模块在神经网络中的位置特征,共提出如图1所示的4种集成设计方案.由于DPU会将SE模块中的求和操作移入到中央处理单元上运行,只能在神经网络末端插入,即只能选择SE标准策略和SE后置策略,根据其性能比较得出SE标准策略可更大程度提高神经网络性能.故本研究采用SE标准策略的集成方式插入到神经网络中,将LPRNet模块与SE模块集成在一块.
基于DPU的支持特性,对LPRNet进行优化改进.LPRNet主要由卷积层、失活层,以及包含上下采样的基础模块构成.一方面,针对识别算法中卷积核、池化参数过大问题,对神经网络卷积核进行重新计算,舍去失活层,通过对数据集及训练方式的改善替代失活层的作用,防止神经网络过拟合现象.对于DPU不支持的除操作和平均操作,则移出DPU,在DPU输出参数进入中央处理单元处理后,利用中央处理单元进行除操作和平均处理,得到与未优化的LPRNet性能相近且适配于DPU的LPRNet神经网络.另一方面,在上述改进的基础上,将SE模块以SE标准策略方式嵌入神经网络中提升神经网络识别性能,提出如图2所示改进型SE-LPRNet神经网络模型.
图1 SE模块集成设计Fig.1 SE module integration design
图2 LPRNet与SE-LPRNet网络结构对比图Fig.2 Comparison of LPRNet and SE-LPRNet network structures
模型训练集和测试集均采用中科大团队建立的中国城市停车场数据集(Chinese city parking dataset,CCPD)中的基础集[3],这是一个用于车牌识别的大型国内停车场车牌数据集.按大约1∶1比例划分训练集和测试集,再对图像中的车牌位置进行裁剪处理,所得输入图像均为94 px × 24 px.其中训练集有105 769张,包含新能源车牌5 769张;测试集有105 002张,包含新能源车牌5 006张.
采用赛灵思Zynq UltraScale+ MPSoC ZCU106开发板作为实验平台.利用Vivado搭建视频传输模块,Petalinux搭建Linux环境,采用软硬协同的方式部署DPU,Vitis编写应用程序,以Pytorch框架训练神经网络模型,优化器选择RMSprop,权重衰减为2×10-5,动量为0.9,批量大小设置为64.总训练步长为2.0万次,设置0~5 000次初始学习率为1×10-3,之后,学习率在5 000~10 000次调整为1×10-4,在10 000~15 000次调整为1×10-5,在15 000~20 000次调整为1×10-6,达到2.0万次后终止训练.
本实验所搭建的车牌识别系统包含逻辑电路、软件平台、神经网络和应用程序4个部分.逻辑电路部分负责搭建系统的硬件逻辑,主要用于部署视频接收发送软核和视频处理软核,实现视频传输和图像处理的功能,并将DPU部署到可编程逻辑侧,为运行神经网络做好硬件基础.软件部分设置Linux为操作系统,为运行应用程序提供环境.神经网络负责车牌识别功能的实现.应用程序负责进行软硬件交互,控制车牌视频或图像输入DPU,处理识别结果并进行输出.
实验步骤如图3所示,分为4步: 1) 通过Vivado软件搭建系统硬件逻辑,设计视频图像传输的硬件电路,生成包含硬件描述信息的XSA文件;2) 使用Petalinux开发套件搭建Linux操作系统,根据XSA文件导入硬件信息,配置设备树等,编译成系统的启动文件、镜像文件和根目录;3) 采用Pytorch框架对模型进行训练,利用Vitis-AI开发工具包对神经网络模型进行量化和编译,得到量化后的神经网络模型;4) 利用Vitis开发环境创建平台工程,导入应用程序所需要的依赖库、支持库、DPU驱动及配置信息,将DPU作为加速器插入到硬件平台中,利用V++进行编译生成配置文件,编写应用程序和自定义插件,通过G++进行交叉编译,最后按照对应分区将编译后的文件存入SD卡中.
图3 实验步骤Fig.3 Experimental steps
为了能更准确地对比各模型之间性能的差异,选取同样采用CCPD测试数据集且目前主流的车牌识别系统进行对比,其中YOLO9000和Faster-RCNN都加入整体卷积网络(holistic convolutional neural network,HC),构成完整的车牌识别系统.而TE2E和RPnet本身即为端对端的车牌识别系统,一同测试LPRNet神经网络与所提的SE-LPRNet神经网络.测试集分为综合测试集和在雨、雪、雾等天气下获取的车牌图像测试集,识别效果如图4所示,其中还包括了新能源车牌的测试效果.
图4 车牌识别效果图Fig.4 Renderings of license plate recognition
选用识别速率v和平均正确率(average precision,AP)为主要衡量指标.识别速率v代表每秒传输的画面数,即画面刷新率,用于衡量识别流畅度和效率,AP综合了查准率和查全率,其计算式为
(5)
其中:NTP为检测到车牌并完全识别正确的车牌个数;NFN为未被检测到的车牌个数;NFP为车牌检测位置错误或识别错误的车牌个数.车牌中所有字符都被正确识别时,系统才可判为真正例.
所有模型采用相同衡量指标进行测试,结果如表2所示.
表2 CCPD测试集车牌识别模型性能对比
实验结果表明:
1) 在综合测试集中,SE-LPRNet模型在精度上比YOLO9000+HC和Faster-RCNN+HC模型高0.4%和1.3%,也比未改进的LPRNet算法高出2.5%.
2) 在识别速率上,SE-LPRNet可以达到236 Fs-1.虽然在识别精度上比TE2E和RPnet模型分别低了0.3%和1.4%,但是速率上相较于上述二者有大幅度的提升,分别高出233和175 Fs-1,更加符合边缘设备端对车牌识别算法的时延性能要求.
3) 在天气测试集中,SE-LPRNet模型在识别精度上明显高于其他模型.说明在不同天气下,SE-LPRNet算法泛化能力更强,可以更好地胜任现实情况的车牌识别.
4) 为了适配DPU,将LPRNet的模型结构进行裁剪,简化神经网络架构.虽提高86 Fs-1,但识别率也降低3.1%和5.8%.本研究优化后得到的SE-LPRNet弥补了适配性问题造成的精度损失,而236 Fs-1的识别速率也可以满足现实需求.
5) SE-LPRNet算法在测试集中还加入新能源车牌,相较于其他算法,SE-LPRNet不仅在普通车牌上表现优异,同时还能在识别新能源车牌上表现出同样优秀的性能,这是目前其他算法还未能做到的.
综合比较可得,SE-LPRNet车牌识别算法在真实情况下表现出较为优越的性能.
表3 不同方法对LPRNet模型效果影响
采用不同方法对模型性能的影响至关重要.本研究通过添加SE模块和对训练数据集进行数据增强,提高LPRNet的识别性能,结果如表3所示.实验结果表明: 1) 不同的SE模块集成策略对本算法具有不同影响.采用后置SE策略的模型识别精度降低3.3%,而采用SE标准策略模型精度提升1.4%,证明SE标准策略可帮助模型提取更多有效特征、抑制无效特征,加强了模型的鲁棒性,有效提高LPRNet的性能.2) 通过添加旋转、高斯白噪声、动作模糊、图像裁剪等数据增强方式让训练集更加贴近真实情况,模型识别精度提高0.8%.证明可通过数据增强使模型泛化能力得到提高.3) 同时采用SE标准策略和数据增强时,模型可获得最高的识别精度(94.1%).
针对边缘设备端难以嵌入车牌识别神经网络模型的问题,基于DPU设计出一种车牌识别系统.在网络结构上,一方面对车牌识别神经网络进行适配性改造,使其可运行于DPU架构;另一方面,通过SE模块嵌入神经网络模型中弥补了为适配DPU而进行修改池化层类型、舍去失活层等操作造成精度损失.将LPRNet搭载于DPU,并将SE模块与LPRNet进行结合以提高识别精度.实验结果表明,在赛灵思的ZCU106开发板上,本研究边缘设备端的车牌识别系统和目前已有的车牌识别算法相比在速率上具有较优性能,在拥有新能源车牌识别功能的情况下,识别率不逊色于其他算法,更加符合实际需求.