基于卷积神经网络的交通标志识别系统设计与实现

作者: 李志明 梁莹莹 吴豆豆 谢永盛

基于卷积神经网络的交通标志识别系统设计与实现0

摘要:现如今交通标志识别作为智能驾驶中不可或缺的一部分有着重要的研究意义。为了提高交通标志识别的分类准确度,结合当下流行的YOLOv5卷积神经网络目标检测模型,本文以国内交通标志为例,研究如何运用YOLOv5算法实现交通标志目标检测,同时结合软件开发技术,使用Flask后台框架、Vue前端框架设计了一套基于卷积神经网络的交通标志识别系统,系统包含可交互界面,支持用户上传图片进行实时识别,并返回相应的识别结果,提高了交通标志识别模型的可用性。

关键词:卷积神经网络;交通标志识别;YOLOv5;深度学习;目标检测

中图分类号:TP391 文献标识码:A

文章编号:1009-3044(2025)04-0032-04 开放科学(资源服务) 标识码(OSID) :

0 引言

近些年, 基于深度学习的方法在诸多目标检测算法中得到广泛使用,其中 YOLO 算法因其良好的识别性能而备受关注。本位旨在采用卷积神经网络,结合YOLOv5目标识别模型,通过大量已有的交通标志真实场景图片进行训练,获得指定目标的特征,实现对交通标志的检测和定位。这样不仅可以精准识别复杂的道路环境,帮助使用者做出正确的判断,进而提高智能驾驶的安全性,进一步提高交通运行效率,缓解交通拥堵问题。交通标志识别主要是用于识别前方道路的警示或行人信息,并将信息反馈给相关使用者,以达到调节道路交通流量的目的。

众多学者对交通标志识别进行了深入的研究,同时,YOLOv5作为一种基于卷积神经网络的目标检测算法,在相关目标检测任务中也得到了广泛运用[1]。在国内,毕超等人提出一种提高识别夜间交通标志的方法,该方法仅用于夜间交通标志识别[2]。袁穆佳惠等人提出RI-Model交通标志识别模型,该方法在昏暗、运动模糊等情况下均可以达到较好的识别结果,同时其整个网络结构还有很多改进空间以应对恶劣天气等场景[3]。冯润泽设计了一种两阶段的交通标志识别算法,提升了整体算法的识别精度,其mAP值提升明显[4]。王翰文等人提出改进的 YOLOv5 算法,大幅度降低了模型复杂度和参数量,实现了对交通标志检测精度和检测速度的平衡[5]。周峰等人提出了将多头自注意力机制应用到 YOLOv4-tiny模型的主干网络中,该算法在一定程度上减少模型大小,并带来了检测精度的提升,同时该算法是基于像素级操作,导致计算量较大、推理速度较慢,在检测精度仍需进一步提升[6]。尹靖涵提出了一种使用YOLOv5模型的交通标志识别模型,能够在雾霾等复杂天气下取得较高的识别准确率,解决了面对特殊天气难以识别交通标志的问题[7]。杨佳义设计基于BP神经网络的交通标志检测识别系统,可以准确识别图像中交通标志,目标识别系统快速可靠,能够广泛应用于不同场景,同时需要满足原始图像清晰且有交通标志的情况下,交通识别率才比较理想[8]。金晓康等人将训练完成的深度网络部署在嵌入式设备,增强了该识别系统的可移动性和可用性[9]。温艳等人设计一种基于机器视觉的交通标志识别系统,可以对交通标志进行有效识别,实时性和鲁棒性较好[10]。在国外,最早由Janssen等人提出基于交通标志明显的颜色特征,结合RGB图像特点,对交通标志进行检测识别[11]。在实际情况中,因温度、光照等单一采用RGB思想对交通标志进行识别无法进一步提高识别的准确度。因此,部分学者采用了基于形状特征的交通标志检测方法,该方法能够弥补基于RGB识别交通标志的缺陷,同时也存在实用性不强等缺陷[12]。随着深度学习技术的发展,以卷积神经网络为代表的深度学习算法、模型被广泛地运用在诸多目标识别领域。本文首先介绍了交通标志识别的相关理论基础,然后详细阐述了基于 YOLOv5 的交通标志识别算法,接着介绍了系统的实现过程,最后对全文进行了总结和展望。

1 相关理论基础

1.1 卷积神经网络

卷积神经网络(Convolutional Neural Networks,CNN) 是一种由输入层、卷积层、池化层以及输出层所构成的深度神经网络。当前,卷积神经网络已在图像、语音、文本等分类任务中被广泛运用,它能够有效地提取识别对象特征,从而实现识别与分类。卷积神经网络通过多层的卷积操作对图像特征进行提取,其训练过程可以描述为传入图像、进行卷积、池化并通过全连接,最后返回识别结果。

卷积神经网络结构主要由以下部分构成。

1) 输入层:输入层为CNN第一层,负责接收输入数据,通过对原始数据进行标准化处理,使其符合模型要求。

2) 卷积层:卷积层是CNN的核心,负责提取输入数据的特征。卷积层由多个卷积核(或滤波器) 组成,每个卷积核负责提取输入数据的一个特定特征。同时,卷积层的输入结果是图像相关特征,因此输出结果又被称作特征图。

3) 池化层:池化层用于降低特征图的空间维度,减少参数数量,使最有价值的信息保留下来,防止过拟合。

4) 全连接层:全连接层是CNN的最后一层,负责将特征图转换为最终的分类结果。

卷积神经网络通过多层卷积和池化操作来提取图像特征,并通过全连接层进行分类或回归,它具有特征提取能力强、参数共享和稀疏连接、平移不变性、可视化和解释性强等优点,此外,它选用局部连接的方式使得网络的复杂性得以降低,进一步提高了算法效率。

1.2 目标检测模型

目标检测对于计算机却是一项复杂且艰巨的任务,涉及目标定位、分类等任务。众多学者对图像目标检测展开的研究多涉及Viola-Jones算法[13]等,它们虽然能够实现目标检测功能,但在目标检测识别方面均存在着一定的缺陷,如运行速度慢、易受外界影响、准确率低等。

近年来,基于卷积神经网络的目标检测模型因其准确率高、更新迭代速度快而被广泛运用,它不仅能更加全面地适应现实环境下的目标检测需求,而且在精度和速度上相比传统的图像检测模型均有明显的提升。目前,基于深度学习技术的目标检测算法可以分为两个阶段网络和单阶段网络两类,其中YOLO作为单阶段(one-stage) 网络最具代表性的框架,在目标检测领域得到了广泛应用[14]。本文中,使用版本为YOLOv5的YOLO系列模型,其最大优势在于其精度和速度的提升,可以实时检测图像中的目标,并且适应较为复杂的场景[15]。YOLOv5网络结构的组成分为三个部分:① Backone:主干网络,主要负责对输入图像进行特征提取;② Neck:加强特征提取,负责对特征图进行多尺度特征融合,并把这些特征传递给预测层;③ Head:预测模块及损失函数优化,进行最终的回归预测。在识别过程中,首先是将整张图像划分为若干个网格,每个网格预测出该网格内物体的种类和位置信息,然后根据预测框与真实框之间的IoU值进行目标框的筛选,最终输出预测框的类别和位置信息。

1.3 Flask 框架和Vue 框架

在系统实现方面采用前后端分离实现前期训练模型的调用,在用户上传图片后可实现图片交通标志的检测识别。系统后台采用Flask 框架进行开发。Flask框架是由Python语言实现的一个微型Web开发框架,具有轻量级、易学易用、强大的扩展性等诸多优点[16]。在Flask框架中,每次客户端发送请求时,会创建一个包含客户端方法、请求头、请求数据等信息的Request对象。

系统前端采用主流的Vue框架,Vue框架具有轻量级、灵活性、可复用性、响应式和虚拟DOM等特点, 它的第三方库可以参考使用,功能强大,因此开发效率较高。另外,Vue框架是基于MVVM模式的框架,即Model-View-ViewModel 框架。当Model 层数据发生变化时,ViewModel 层会监测到数据的变化,通知View层进行数据的修改。在这种模式下,能够实现View与Model层之间的解耦。同时,Vue框架还具有如下的特点:① 组件化开发:对于组件化开发而言,即模块化的思想。在组件化开发中,Vue.js能够将各个模块进行拆分,实现了HTML的封装和重用;② 简单易学:具有非常丰富的文档,便于学习和理解。

2 基于YOLOv5的交通标志识别算法研究

2.1 数据集

我国交通标志与国外存在明显差异,本文聚焦于国内场景,故对比筛选使用了TT100K 数据集(Tsinghua⁃Tencent 100K) 。该数据集由清华-腾讯联合实验室整理并公布的,提供的10万张图像包含了30 000个交通标志,图像来源于国内多个城市拍摄的腾讯街景全景图,包括城市道路、乡村道路以及高速公路等诸多生活场景,数据集中照片像素质量较高,涉及的天气情况也较多,整体较为规范,便于后期模型训练,提高准确率。由于数据集过于庞大且部分类别交通标志数量少,本实验仅筛选出TT100K数据集中具有重要语义信息的45种交通标志进行模型训练。为加快训练速度,得到更加实用的交通标志识别模型,并根据项目需要,将TT100K数据集的交通标志分类分为3 类:指示标志(对应原数据集“i”开头的类别) 、禁令标志(对应原数据集“p”开头的类别) 、警告标志(对应原数据集“w”开头的类别) 。

TT100K 数据集的标注文件为annotation.json 文件,其对图像的标注文件以字典的格式储存标注信息。但对于YOLOv5框架而言,需要对数据集格式进行转换,转成YOLOv5能识别的数据集格式,从而在后期训练的过程中能够正确调用上述数据集进行训练。

2.2 创建YAML 文件

在YOLOv5中,YAML作为配置文件,其包含了诸多信息,如模型的结构、参数、训练设置等,同时还分为YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x等4个模型,其主要差异是在模型深度和模型宽度方面,可以结合实际需求采用不同的模型。YAML文件主要由以下3个参数组成:① nc:类别数,取决于实际分类任务中类别的数量;② depth_multiple:控制模型的深度;③ width_multiple:控制卷积核的个数。通过上述参数的调整可以实现不同复杂度的模型设计。

2.3 修改train.py

文件train.py是YOLOv5训练过程的核心脚本,主要功能是负责构建模型、加载数据、训练模型等,文件中包含了配置文件、模型结构等,其具体功能介绍如下。

1) 获取配置参数:在train.py 中,可以通过arg⁃parse库读取配置文件中的具体参数,包含了迭代次数Epoch、学习率Learning_Rate、批次大小Batch_Size等。同时,在该文件中,给出了模型的路径等信息。

2) 构建模型结构:通过train.py中的create_model 函数,构建模型。在构建模型的过程中,会使用模型配置文件中的具体参数,同时也会加载已训练的模型权重。若没有预训练的权重,则权重随机进行初始化。

3) 数据预处理:数据的预处理包含了尺寸调整、标签映射转换、图像增强等,在train.py中,数据的预处理和加载操作通过create_dataloader函数实现。

4) 训练和验证过程:train.py中定义了train函数,用于进行模型的训练和验证过程。训练过程中,train.py会对训练数据进行多次迭代,每个迭代周期称为一个Epoch。在每个Epoch结束时,train.py会对模型在验证集上的表现进行评估,并输出相应的指标,例如平均精度(mAP) 、召回率(Recall) 等。

5) 模型保存和日志输出:train.py会定期保存训练过程中得到的最佳模型权重,并将训练和验证过程中的各种指标输入日志文件中。训练结束后,train.py还会输出最终的测试指标,并保存最终的模型权重文件。

2.4 训练结果

在数据集准备、配置文件修改等工作完成后,便可开始模型训练。训练的实验环境为Windows 10,开发环境为Pycharm 2023,深度学习方面采用了Pytorch 框架。在模型训练的过程中,本文设定Epoch为80,Batch-Size设置为64,同时设置断点保存功能,防止程序中断过程中模型未及时保存造成时间浪费,实际训练过程如图2、图3所示。

3 基于YOLOv5的交通标志识别系统实现

3.1 前台框架

前台界面使用Vue框架实现,Vue可以帮助开发者建立高效的Web应用程序。在Web应用中,用户登录验证是至关重要的一部分。首先,需要创建一个登录表单,该表单应该包括输入框,以便用户可以输入其用户名和密码,若不存在该用户名,则提醒用户需要注册;其次,在Vue实例中添加数据,来存储输入的账号信息,并记录是否登录成功;最后,根据用户是否登录成功来显示不同的内容。登录页面如图4 所示。

经典小说推荐

杂志订阅