1、YOLO历代算法
YOLOv1~YOLOv2:
YOLO(You OnlyLook Once)版本1即基本YOLO,特点是将目标检测转化为回归问题,它是把输入的图像分为网格,每个网格中又有四个参数用来标定网格位置,其中有两个参数表示检测目标的中心,通过计算后当检测的目标与标定的网格达到一定的预测值时,则可以判断该网格为需要检测的目标物体。在网络结构上,YOLOv1有24个卷积层与2个全连接层,使用了大量的1×1卷积来降低上一层的特征空间到下一层,虽然YOLOv1的网络结构较为简单,但其检测方式使得其在目标检测应用中有较高的性能。
在保持YOLO目标检测速度优势的同时,YOLOv2尝试将YOLOv1的mAP值从63.4再提高,也是从这一版本开始,YOLO模型引入了多尺度的训练方法,使输入图像能够应用在大小不一的场景下,并且速度与精度都能较为均衡。另外,在网络结构上,YOLOV2引入了新的网络结构Darknet-19,即19层的卷积神经网络,使用全局平均池进行预测,并且使用了更小的卷积核,可以更好地学习图像特征。
YOLOv3~YOLOv4:
YOLOv3在网络结构上实现了显著的优化,YOLOv3选择了更为强大的Darknet-53作为特征提取网络,这一网络结构包含了53个卷积层,从而提供了更为丰富的特征表示能力。此外,YOLOv3还在网络中引入了残差连接,这一创新进一步提升了网络的性能,解决了深层网络训练中的梯度消失或梯度爆炸问题,帮助网络得以更深、更稳定地进行训练。因此,YOLOv3对比YOLOv2不仅在目标检测任务中表现出更高的精度与性能,还更为稳定。
YOLOv4在YOLOv3 的Darknet-53基础上进行改进,添加了CSP结构,其主干网络为CSPDarkNet53,CSP的添加提高了CNN的学习能力,达到移除计算瓶颈,降低显存的作用。YOLOv4还使用了SPP(Spatial Pyramid Pooling)和PANet(Path Aggregation Network)网络结构,SPP利用不同尺寸的池化操作来提取不同的尺度特征,增加了感受野,并将上下文特征分离了出来,而PANet则通过自底向上的路径增强使得网络能够利用不同层次的特征信息[17]。通过网络结构、数据增强与损失函数等方面的改进,YOLOv4在目标检测任务中表现除了更高的竞争力。
YOLOv5:
YOLOv5与v4的结构较为相似,都采用了CSPDarknet53作为其主要特征提取器,但YOLOv5中设计了两种CSP结构,而YOLOv4仅有主干网络采用CSP结构。在大小上,YOLOv5的每个模型权重大小只有YOLOv4的1/9,这意味着YOLOv5模型远小于YOLOv4,使得更为轻量化的YOLOv5在资源受限的应用场景下更为高效。此外,YOLOv5系列还提供了不同大小的模型版本,如YOLOv5s、YOLOv5m、YOLOv5l和YOLOv5x,它们在模型大小和性能方面都有所不同。这些不同版本的模型可以根据不同的应用场景和需求进行选择。
2、基于YOLOv5的车牌定位
依赖YOLOv5强大的目标检测能力,YOLOv5在车牌定位这一方面有较强的鲁棒性。YOLOv5采用了卷积神经网络(CNN)作为基础,结合网格视角与多尺度预测的方法,即通过将整个图像划分为网格,同时预测边界框和类别,使得模型能够快速准确地检测出图像中的车牌。
在对模型进行车牌定位训练时,YOLOv5首先会通过卷积层提取图像中的特征信息,这些特征信息经过多层网络的传递和处理,最终会转化为对车牌位置和类别的预测。由于YOLOv5还利用多尺度预测技术,使得它能够在尺度不一的特征图上检测目标,从而能够较好的识别不同大小的车牌。此外,YOLOv5采用了一些技术来提高对于车牌定位的鲁棒性。例如,自适应锚框计算技术能够根据车牌实际大小来调整锚框的大小和比例,从而提高检测精度,使其能够在各种复杂的场景下准确地定位车牌。在性能方面,YOLOv5表现出了出色的速度和精度,得益于其高效的网络结构和优化算法,YOLOv5可以在较短的时间内处理大量的图像,还能实现实时目标检测,该模型在保持高精度的同时,能够实现较快的推理速度。这使得YOLOv5十分适用于需要车牌定位的应用场景,能够满足许多实时性要求较高的场景需求。更为重要的是,YOLOv5拥有丰富的参数和配置选项,使用者可以根据实际应用场景需求来调整模型的训练和推理策略,定以此来制模型,提高检测性能。
3、基于PyTorch的模型训练
使用PyTorch进行车牌号识别训练的原理主要涉及卷积神经网络的应用,其主要的步骤有模型设计、模型训练与预测、模型的优化与评估。在模型构建的过程中,核心目标是设计一个高效的卷积神经网络模型,用以从车牌图像中精准地提取特征。这个神经网络结构通常由多个卷积层、池化层以及全连接层等组件构成。而根据具体的任务需求,除了自己构建神经网络外,也可以使用预训练的模型,如ResNet与VGG等作为基础模型并进行微调。模型训练过程则是将预处理后的车牌图像输入到CNN模型中,通过前向传播计算输出,使用合适的损失函数,如如交叉熵损失计算输出与真实标签之间的差异,再使用反向传播算法和优化器(如SGD、Adam等)更新模型的权重,以最小化损失,最后重复模型训练过程,通过迭代训练来提高模型的性能。在此过程中,验证集损失通常会逐渐下降,当验证集损失在连续多个迭代内没有明显下降或验证集准确率在连续多个迭代内没有显著提升时,可以考虑停止训练。这通常意味着模型在提取新特征或改进预测方面的能力已经达到了极限。
在车牌识别任务中,通过模型的前向传播,模型通常会输出每个字符位置的预测编码,这些编码可以是字符的独热编码(one-hot encoding)或其他形式的表示,模型输出的预测编码需要进一步解码为实际的字符序列。对于独热编码,解码过程通常涉及查找与每个编码对应的字符。如果模型输出的是字符的编码(例如,通过嵌入层得到的向量),则需要使用训练时建立的字符到编码的映射关系来找到对应的字符。将解码后的字符按照它们在车牌中的位置顺序排列,形成最终的车牌号码字符串。在模型的优化与评估阶段,这一步的核心目标是针对给定的数据集,寻找最佳的模型参数和结构,以最小化预测误差并提升泛化能力。这一过程主要通过验证集来评估模型性能,包括计算准确率、召回率等关键指标。基于评估结果,可以通过调整模型的参数、结构或训练策略,从而进一步优化其性能。在模型优化的具体方法上,常采用以下几种策略:
首先,权重初始化是模型训练的关键一步,它决定了模型初始的参数值。合适的权重初始化有助于模型更快地收敛到最优解。常见的权重初始化方法包括随机初始化、预训练初始化和Xavier初始化等。
其次,学习率的调整对于模型训练过程至关重要。学习率决定了模型参数更新的步长,通过调整学习率,可以帮助模型在训练过程中更好地平衡探索和利用,避免陷入局部最优解。
此外,正则化是一种有效的模型优化方法,通过在损失函数中加入正则化项,可以惩罚模型的复杂度,从而防止过拟合现象的发生,常用的正则化方法包括L1正则化和L2正则化。
最后,批归一化也是一种提升模型性能的重要技术。它通过对每个批次的输入数据进行归一化,可以加速模型训练并提高稳定性,减少内部协变量偏移问题。
在评估模型性能时,则依赖于一系列关键的性能度量指标,如准确率、精确率、召回率、F1分数以及AUC-ROC等。这些指标有助于全面地评估模型性能,并据此调整超参数、改变模型结构等,以进一步优化模型。
4、基于OpenCV的车牌颜色识别
HSV是OpenCV中常用的一种颜色表示方式。在图像处理任务中,OpenCV允许我们利用HSV颜色空间进行高效的处理与分析。在此空间中,H指的是色调(Hue),S为饱和度(Saturation),而V则代表亮度(Value)。HSV是基于颜色的直观属性所创建的一种颜色空间模型,也被称为六角锥体模型(Hexcone Model)。其中,色调H以角度为单位,其范围是从0°到360°,从红色开始按逆时针方向计算,其中红色对应0°,绿色对应120°,蓝色对应240°。饱和度S则反映颜色与光谱色的接近程度,取值范围在0%至100%之间,数值越高,颜色越饱满。亮度V则衡量颜色的明亮程度,其范围同样是从0%(黑色)到100%(白色)。由于HSV颜色空间具有独特的表达方式和直观的色彩感知特性,它在图像处理、计算机视觉和数字艺术设计等领域得到了广泛应用。相较于RGB颜色模式,它采用红、绿、蓝三原色进行表示,HSV模式提供了更为直观和易于理解的颜色表达方式。通过调整HSV模式下的这三个关键参数,可以方便地选择和调整颜色,这也更符合人类对颜色的感知和认知方式。
5、数据集准备
CCPD2019数据集,一个面向车牌检测与识别的开源资源,由中国科学技术大学精心打造。其主要用途在于支持车牌检测与识别任务,涵盖了大量的车牌图像数据。值得一提的是,该数据集收录的图片数量高达三十余万张,能够为模型的训练提供强大的数据支撑,另外该数据集包含了模糊、倾斜、雨天与雪天等场景下的车牌图片,这将使得训练出来的模型在各种实际场景应用中表现优异。需要注意的是,CCPD2019数据集也存在一定的局限性,例如其中大部分车牌都是燃油车牌,而且主要是安徽省的车牌信息。因此,在本系统的数据集中,还添加了其它省份与新能源车牌图片,该数据集共计200007张车牌图片,每张图片以该车牌号码信息命名保存,方便后续训练,数据集部分车牌数据如下图所示。
6、车牌定位算法
算法包含车牌定位算法与车牌识别训练算法,其中车牌定位算法直接使用YOLOv5的权重。首先需要安装YOLOv5库,随后在代码中加载预训练权重,该权重为.pt格式的文件,加载权重后,模型就具备了进行车牌定位识别的能力。使用YOLOv5的推理功能对输入图像进行车牌定位识别时,通常涉及将图像传递给加载了权重的模型,并获取模型的输出,输出将包括检测到的车牌的位置(边界框)和可能的置信度分数,最后将定位识别的结果展示在原始图像上,如图下所示。
7、字符识别训练算法
在车牌字符识别训练算法的实现过程中,借助PyTorch框架构建神经网络来执行车牌号识别训练。详细的算法流程如下图所示。首先,引入必要的库和模块,包括PyTorch库、神经网络构建模块nn以及其他加载数据集所必需的模块。随后构建神经网络结构,该网络主要包含五个卷积层组,依次为layer1至layer5。其中,layer1至layer4的结构相似,每个都包含一个卷积层、一个ReLU激活函数以及一个最大池化层。卷积层的主要功能是提取图像特征,ReLU激活函数则用于增加网络的非线性,而最大池化层则负责减小特征图的尺寸。至于layer5,首先将特征图进行展平处理,然后依次通过一个全连接层、一个Dropout层(旨在防止过拟合)、一个ReLU激活函数和另一个全连接层,最后的全连接层的输出维度对应于车牌号中可能的字符组合数量。随后构建训练函数,该函数接受数据加载器、模型损失函数和优化器作为参数,并计算模型的预测输出和损失值。最后在主函数中设置好训练周期、学习率与模型保存路径等。
8、 车牌颜色识别算法
基于HSV颜色空间进行车牌颜色的识别,首先明确界定了不同颜色在HSV空间中的范围,即设定了阈值,这些阈值在OpenCV中的定义如下表所示。随后,利用OpenCV库中的函数对输入的图像进行颜色过滤处理。接着,通过分析过滤后结果中非零像素的数量来判定车牌的主要颜色。在算法实现上,定义了HSV空间中黑色、蓝色、绿色和黄色的颜色范围,并根据这些阈值对HSV图像进行颜色过滤,生成相应颜色的掩码,进一步计算每个颜色掩码中非零像素的数量,这一数量直接反映了对应颜色在车牌上的面积占比。通过比较找出非零像素数量最多的颜色,从而确定其为车牌的主要颜色。至此,车牌颜色的识别工作完成。最后,基于这一识别结果,对原始图像进行了位运算处理,输出了仅包含所判断颜色的车牌图像,为后续处理提供了便利。