基于Unet神经网络的车牌定位系统

2023-04-06 06:37潘梓阳叶宁
电脑知识与技术 2023年5期

潘梓阳 叶宁

关键词:Unet神经网络;车牌提取;损失函数;神经网络深度

0 引言

车牌智能识别在停车场管理、刑事侦破、交通安全智能化、智慧城市建设等方面都有着长足意义。如果能够开发出一套有效的车牌识别算法,不仅可以减少大量人力物力,而且可以结合嵌入式技术,与传统监控摄像系统结合,将监视到的车牌数据实时上传服务器云端,获得更加具有时效性的车辆时空信息。

目前采用的车牌内容识别方法主要有模板匹配与CNN网络算法等,但无论采用何种算法,都必须先提取出图像中车牌区域才能获得较好的效果。因此,如果要实现车牌内容的智能识别,必须先找到一种可靠的车牌区域提取方法。为了解决这一问题,本文采用改进后的Unet网络进行图片的语义分割。从损失函数和神经网络深度两方面对普通Unet神经网络进行改进,采用Photoshop软件手动标注800张含有车牌的图像作为数据集,对改进后的Unet网络进行训练,最终识别准确率达到94%以上,loss函数下降至2左右,训练效果良好。

1 研究现状

雷德超等人[1]采用的车牌区域提取方法主要是轮廓检测法,该方法的依据是我国车牌为矩形并具有统一的长宽比例。这种方法较为成熟,但具有很大的局限性:很多时候车牌图像的拍摄角度不甚理想,导致图中车牌的轮廓并非矩形,这说明此方法泛化性不佳;并且此算法需要采用图像灰度、腐蚀、膨胀等操作,对照片的亮度、清晰度等条件具有苛刻要求。

除了以上说明的边缘检测方法,目前已有的车牌分割方法还包括明月星等人[2]提出的聚类方法,王明吉[3]等人采用的YOLO算法等,但这些已有算法都存在一定问题:聚类方法仍是一种传统算法,其泛化性和稳定性不高;YOLO算法虽然是一种神经网络算法,但是需要大量数据集进行训练才能得到较好的效果。

为了开发出具有良好泛化性、稳定性的车牌分割系统,不妨从人工智能领域寻找思路。语义分割(Se?mantic Segmentation)是图像处理和机器视觉一个重要分支。语义分割就是按照“语义”给图像上目标类别中的每一点打一个标签,使得不同种类的东西在图像上被区分开来,这为解决车牌位置提取问题提供了新思路。

文献[7]和阚希[4]等人在开发移动端车牌系统的过程中采用了普通Unet神经网络来分割车牌区域,但原文中并未给出Unet网络训练的详细参数(如损失函数变化)等情况。为了验证本文提出改进方法的有效性,在下文会首先给出普通Unet神经网络在自制数据集上的训练详细情况,再进行改进后神经网络的训练,以便进行对比验证改进方法的有效性。

2 算法介绍

Unet 算法是一种语义分割算法,由Ronneberger 发表于2015年,是比较先进热门的人工智能算法之一。Unet神经网络属于是全卷积神经网络(FCN) 的一种变体,最早应用于各种医学图像的处理之中。

图1是Unet神经网络的结构示意图,图中的横向短箭头(除最右上角的外)表示3×3卷积,以实现特征提取;横向长箭头表示skip-connection,实现特征融合;向下箭头表示池化操作,用于降低维度;向上箭头表示上采样,用于维度恢复;最右上角的横向箭头表示1×1卷积,即输出结果。

本文对此神经网络进行两方面改进:1) 针对原有网络层数较浅的问题,加深神经网络层数,以便在训练中提取更深层次的特征;2) 采用Huber loss代替均方误差(MSE) 作為损失函数指导网络训练,以避免模型在使用均方误差作为损失函数时为降低损失函数强行使用奇异点进行拟合。

3 算法适应性

Unet神经网络最初用于医学图像的处理中,如张雷等人[5]将其运用在视网膜血管的分割问题中。由于医学图像语义简单且结构稳定,因此高级语义信息和低级特征都显得很重要,使得Unet特征融合结构起到了很大作用;同时,由于医学图像较少,采用大规模架构会导致参数过多,很容易在训练集不够的情况下产生过拟合现象,因此Unet神经网络采取了小型架构,缩小200% 后神经网络参数量仅在7M 左右,小巧轻便。

时至今日,Unet神经网络作为一种在图像语义分割中有重要地位的算法,应用范围早已不限于医学图像,周思雨等人[6]将其应用于冶金相关研究中。而车牌作为一种语义简单、结构稳定的图像,也非常适合采用Unet神经网络进行处理;由于车牌的特殊性,很难找到大量的车牌图像用于模型训练,Unet结构即使在训练集数量较少时也能有着不错的性能,这为人工搜集数据、标注训练集提供了可行性。

4 对Unet 神经网络的改进

从Unet神经网络的特殊结构可以发现,适当加深神经网络层数可以有效提升网络效果,这是由于神经网络层数越多越能更有效地提取更大量的细节信息进行学习。但是,原有的Unet网络层数较少,针对自制的、相对数据量较小的训练集,需要较长时间才能得到理想的学习效果。为了解决这一问题,笔者在原有神经网络上加深一层,多进行一次池化四次卷积,并对应增加一次上采样,以增加神经网络对细节信息的学习情况。

普通Unet神经网络采用均方误差(MSE) 作为损失函数指导神经网络训练。这种损失函数存在一个问题,即为了满足损失函数下降的条件,可能对偏离正常样本的特异点做出比较大的反应。在本次训练中,笔者只有自制的800张图片数据集,样本存在较大随机性,若采用均方误差作为损失函数训练,很可能出现过拟合现象,不利于模型的泛化运用。而平均绝对误差(MAE) 可以克服均方误差(MSE) 的缺点,但是由于此函数的特殊性质,导致在误差大和误差小时保持同等速度下降,训练速度很慢,无法满足数据集时常更新的商业需求,并且此函数在某些位置甚至不可导,无法指导模型训练。

本文采用的损失函数是Huber loss函数,这种损失函数集合了MSE和MAE两种函数的优势,原理是:首先设置一个超参数δ,若实际值和预测值之差的绝对值在δ以内,则采用MSE作为损失函数;若绝对值大于δ,则采用类MAE函数作为损失函数。这样既能满足损失函数快速下降的要求,又能防止特异点对训练产生干扰;曾有研究证明,当超参数δ=1.35时,有效性可以达到95%,效果好于另外两种损失函数。

5 准备训练数据集

进行神经网络的训练,需要先制作训练数据集,由于车牌数据的特殊性,很难直接找到开源的训练数据集。但得益于Unet神经网络即使在训练集较少的情况下也能有比较好的训练效果的特点,可以采用手动方法自行标注数据集。

笔者搜集到了800张车牌图片,为了提升神经网络的训练效率,将这些车牌图片统一为512×512的正方形图片;采用Photoshop软件对其进行手动标注,标注方法如下:将图像中车牌区域设置为RGB色号为(255,255,255) 的纯白色,将图像中其他区域设置为RGB色号为(0,0,0) 的纯黑色即可,标注效果如下。

6 训练过程

本项目代码全部采用Python 编写,采用Tensor?Flow框架,使用GPU进行模型训练,使用Pycharm开发工具,开发环境为:Windows 10操作系统,内存为16GB,采用Intel(R) Core(TM) i7-10870H CPU @2.20GHz 2.21 GHz处理器,显卡为英伟达3060。

BATCH_SIZE 即一次训练所抓取的数据样本数量,合理设置BATCH_SIZE可以使得系统GPU满载运行,提升训练效率,并且可以使得梯度下降方向更为准确;如果BATCH_SIZE设置过小,训练很容易出现过拟合现象,而如果设置过大,可能会出现由于内存限制导致训练失败的情况;本次训练BATCH_SIZE设置为5,考虑到商业应用中数据集需要经常更新的情况,训练轮数不宜设置过大,本文设置为40轮。

为了验证改进方法的有效性,本文采用传统Unet 网络和改进后Unet 网络分别在自制数据集上进行训练。

图4~图5两张图横轴均为训练輪数,可以看到,随着训练的进行,损失函数值不断减少,而训练准确率不断增加。loss函数是神经网络中常用的函数,表示“损失函数”。“损失”就是所有样本“误差”的总和,通常会在根据某个样本的误差调整网络权重后,计算整体样本的损失函数值,来判定网络是否已经训练到了可接受的状态。损失函数的作用,就是计算神经网络每次迭代的前向计算结果与真实值的差距,从而指导下一步的训练向正确的方向进行。因此loss的值越小代表神经网络的泛化能力越强,越能够适应多种情况下的分割任务。

相比于loss函数,accuracy函数比较好理解,表示通过Unet神经网络自主标注出的二值化图像与手动标注的二值化图像相对比,吻合程度的量化值,就是训练的准确率。为了证明本文所做改进的有效性,将改进前和改进后网络的训练准确率于同一张图显示,方便对比。

从图6中可以明显看出,在整个训练过程中改进后模型的准确率均优于改进前的模型。改进后的模型在第四轮训练后开始稳定上升,并且于第20轮左右基本稳定,40轮训练过后模型准确率可达94%,效果良好。而改进前的模型整个训练过程并不稳定,甚至出现了准确率上升后迅速下降的情况,体现了MSE函数作为损失函数时,模型可能由于特异点的存在产生过拟合现象;模型直到第20轮训练才开始出现准确率稳定上升的情况,此时改进后的模型准确率已经趋于稳定。综上所述,改进后模型的准确程度优于未改进的传统Unet模型,结合损失函数来说,改进后模型损失函数于第10轮后便没有非常大幅度的变化,可以推测改进后模型在较少轮数的训练中即能获得稳定且准确的预测性能,符合商业应用上数据集训练的需求。

7 预测效果

笔者采用绿色边框来标出车牌区域,效果如图6。

可以看出,系统基本准确标注出了车牌所在的区域。接下来,笔者尝试角度不理想状态下的情况。

由图7可以看出,在角度不理想情况下,系统仍旧可以准确标记出车牌位置,说明系统具有一定泛化性。

由图8可以看出,本系统对图像中有多张车牌的情况依旧能做出正确的标记,贴近实际情境中的需求。

8 预测结果分析

通过多次测试,本系统训练后能够较为准确地标记出图像中的车牌位置,对角度不理想或拍摄光照条件不理想状态下的图片依旧具有有效性,同时,对多个车牌同时出现的情况也具有较好的效果。但是,由于本系统训练采用的数据集绝大多数车牌都是蓝牌,因此对其他颜色的拍照则不具备标注能力,后续工作中预计采用更多样化颜色的车牌数据集对系统进行训练,应该能够解决这一问题。

9 结论

本文对Unet神经网络从损失函数和网络深度两方面进行改进,采用改进后Unet神经网络作为核心算法,采用自制的800张图片数据集作为训练集为模型进行训练,训练轮数为40轮,识别准确率约为94%,满足商业数据库更新需求,优于传统Unet神经网络;训练后的系统对不同角度、不同拍摄条件下的图片均有较好的标注能力,具有一定泛化性,且对计算机硬件需求不高,运行速度快,体量较小(约7M),可以应用于嵌入式系统、云端系统之中。