目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
最新最全计算机专业毕设选题精选推荐汇总
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于卷积神经网络的轨道部件(扣件、轨枕、钢轨)缺陷检测算法研究
选题意义背景
随着我国城市化进程的不断加快,轨道交通作为城市公共交通的重要组成部分,在缓解城市交通压力、提高市民出行效率、促进经济发展等方面发挥着越来越重要的作用。据统计,中国内地城市轨道交通运营线路总长度已超过10000公里,运营线路达到300余条,覆盖了全国大部分省会城市和经济发达地区的地级市。轨道交通的快速发展不仅带来了交通便利性的提升,也对轨道设施的安全性和可靠性提出了更高的要求。

轨道部件作为轨道交通系统的重要组成部分,其健康状态直接影响到列车的运行安全和乘客的生命财产安全。轨道部件主要包括钢轨、轨枕、扣件等,长期在列车荷载、环境侵蚀和自然老化等因素的作用下,这些部件会出现各种缺陷,如钢轨的接缝、波磨、划痕、凹陷和剥离,轨枕的裂纹和掉块,扣件的断裂和松动等。如果这些缺陷不能被及时发现和处理,可能会导致轨道变形、列车脱轨等严重安全事故。因此,对轨道部件进行定期检测和维护,确保其处于良好的工作状态,对于保障轨道交通的安全运行具有重要意义。

传统的轨道部件缺陷检测主要依靠人工巡检,检测人员通过肉眼观察或使用简单的检测工具对轨道部件进行检查。这种检测方式不仅效率低下,劳动强度大,而且受检测人员的经验和状态影响较大,容易出现漏检和误检的情况。随着计算机技术和人工智能技术的发展,基于机器视觉的自动化检测技术逐渐应用于轨道部件缺陷检测领域,成为传统人工检测的重要补充和替代方案。早期的自动化检测技术主要基于传统的图像处理方法,如边缘检测、阈值分割、特征提取和分类等。这些方法通常需要手动设计特征提取器和分类器,对于复杂场景下的轨道部件缺陷检测效果有限。近年来,随着深度学习技术的兴起和发展,特别是卷积神经网络在计算机视觉领域的成功应用,基于深度学习的轨道部件缺陷检测技术取得了突破性进展。相比于传统方法,深度学习方法能够自动学习图像中的深层特征,具有更强的特征表达能力和更好的泛化性能,在复杂环境下的轨道部件缺陷检测中表现出明显优势。
数据集
数据获取
本项目使用的数据集为自制数据集,主要通过以下方式获取:
-
现场采集:研究团队与某城市轨道交通运营公司合作,在该公司的试验线路上使用高清相机采集了大量轨道部件图像。采集过程中,相机安装在轨道智能巡检车上,跟随巡检车以不同速度(如40km/h、80km/h、120km/h)运行,确保采集的图像能够覆盖不同工况下的轨道部件状态。
-
数据共享:通过与其他研究机构和轨道交通运营企业合作,获取了部分已标注的轨道部件缺陷数据集,作为补充数据。
-
数据筛选:对采集和获取的原始图像进行筛选,剔除成像不清晰、曝光过度或不足、轨道部件缺失等质量较差的图像,确保数据集的质量。
数据格式与数据规模
本项目的数据集主要包含三种类型的图像:轨道部件整体图像、轨枕缺陷图像和钢轨缺陷图像。这些图像均以JPEG格式存储,分辨率根据采集设备的不同有所差异,一般为1920×1080或2560×1440像素。
数据规模方面,经过筛选和处理后,数据集的具体构成如下:
-
轨道部件整体图像:用于训练和测试轨道部件缺陷区域定位模型,共包含3800张图像。其中,训练集2660张,测试集1140张。这些图像包含了不同类型的轨道部件(钢轨、轨枕、扣件)在不同环境和工况下的状态。
-
轨枕缺陷图像:用于训练和测试轨枕缺陷检测模型,共包含1700张图像。其中,原始训练集700张,通过数据增强后扩展到1400张,测试集300张。这些图像主要包含轨枕掉块和裂纹两种缺陷类型。
-
钢轨缺陷图像:用于训练和测试钢轨缺陷分类模型,共包含4500张图像。其中,训练集3600张,测试集900张。这些图像包含了正常钢轨和五种缺陷类型(接缝、波磨、划痕、凹陷、剥离)的钢轨。
类别定义
为了便于模型的训练和评估,本项目对数据集进行了详细的类别定义:
-
轨道部件缺陷区域定位:目标类别包括三种:
- 钢轨(rail):轨道的主体部分,用于支撑和引导列车运行
- 轨枕(sleeper):支撑钢轨的结构部件,传递列车荷载到道床
- 扣件(fastener):连接钢轨和轨枕的部件,固定钢轨位置
-
轨枕缺陷检测:缺陷类别包括两种:
- 轨枕掉块(gap):轨枕表面混凝土脱落形成的块状缺陷
- 轨枕裂纹(fissure):轨枕表面出现的细微裂缝

-
钢轨缺陷分类:缺陷类别包括六种:
- 正常钢轨(normal):无明显缺陷的钢轨
- 接缝(joint):钢轨连接处的缝隙
- 波磨(corrugation):钢轨表面波浪形的磨损
- 划痕(scratch):钢轨表面的划痕损伤
- 凹陷(dent):钢轨表面的凹陷损伤
- 剥离(spalling):钢轨表面材料的剥离损伤
数据分割策略
为了保证模型的训练效果和泛化能力,本项目采用了以下数据分割策略:
-
分层抽样:根据不同类型的轨道部件和缺陷类别,采用分层抽样的方法进行数据分割,确保训练集和测试集中各类别的样本比例大致相同,避免因样本不均衡导致模型性能下降。
-
比例分配:对于轨道部件整体图像,训练集和测试集的比例为7:3;对于轨枕缺陷图像,原始训练集和测试集的比例约为2.3:1,经过数据增强后训练集扩大到1400张;对于钢轨缺陷图像,训练集和测试集的比例为4:1,且各类别在训练集和测试集中的数量分别为600张和150张,确保样本均衡。
-
交叉验证:在模型训练过程中,采用k折交叉验证的方法评估模型性能,避免因单次分割可能带来的偶然性,提高实验结果的可靠性。
数据预处理
为了提高模型的训练效果和鲁棒性,本项目对数据集进行了一系列预处理操作:
-
图像缩放:根据模型的输入要求,将不同分辨率的原始图像统一缩放到固定尺寸,如640×640像素(用于目标检测)或224×224像素(用于图像分类)。
-
数据增强:为了扩充训练数据、避免模型过拟合,采用了多种数据增强方法:
- 几何变换:包括尺度缩放、随机平移、随机翻转(水平或垂直)、旋转变换等
- 颜色变换:包括亮度调整、对比度增强、色调变换、饱和度调整等
- 噪声添加:向图像中添加适量的高斯噪声或椒盐噪声,模拟真实环境中的噪声干扰
- Mosaic增强:将四张不同的图像进行随机旋转和缩放并合成一张图像,用于目标检测模型的训练
- Mixup增强:通过线性插值的方式将两张不同的图像混合成新的样本,用于图像分类模型的训练
-
图像标注:使用专业的图像标注工具LabelImg对数据集进行标注,标注内容包括目标类别和位置信息(边界框坐标或像素级分割掩码)。对于目标检测任务,标注格式为YOLO格式,即每个目标的类别索引和归一化的中心坐标、宽度和高度;对于图像分类任务,标注格式为类别标签。
-
数据清洗:对标注数据进行检查和清洗,纠正错误标注,删除重复或无效的样本,确保数据集的质量和一致性。
-
数据标准化:对输入图像进行标准化处理,将像素值转换到0-1之间,并减去均值、除以标准差,使数据分布更加均匀,有利于模型的训练和收敛。
通过上述数据预处理操作,不仅扩充了训练数据的规模和多样性,还提高了数据的质量和一致性,为后续的模型训练和评估奠定了良好的基础。
功能模块介绍
轨道部件缺陷区域定位模块
轨道部件缺陷区域定位模块是整个轨道部件缺陷检测系统的基础,其主要功能是从输入的轨道图像中自动识别和定位钢轨、轨枕和扣件等关键部件的区域,为后续的缺陷检测和分类提供准确的区域信息。该模块需要在复杂的背景环境下,快速、准确地定位不同类型的轨道部件,具有较高的实时性和准确性要求,轨道部件缺陷区域定位模块采用目标检测的技术路线,基于改进的YOLOv3-tiny算法实现。其技术流程主要包括以下几个步骤:

-
图像输入:接收原始的轨道部件图像,作为模型的输入。
-
特征提取:通过改进的YOLOv3-tiny主干网络提取图像中的特征信息。主干网络采用Darknet-19结构,包含多个卷积层、批归一化层和激活函数,能够有效地提取图像的深度特征。
-
特征融合:利用特征金字塔网络(FPN)对不同尺度的特征进行融合,增强模型对多尺度目标的检测能力。FPN通过自顶向下的路径和横向连接,将高层特征的语义信息与低层特征的细节信息相结合,提高特征表达能力。
-
目标预测:基于融合后的特征图,预测目标的类别、置信度和边界框坐标。YOLOv3-tiny使用多个尺度的特征图进行预测,每个特征图被划分为多个网格,每个网格负责预测一定区域内的目标。
-
非极大值抑制:对预测结果进行非极大值抑制(NMS)处理,去除冗余的边界框,保留最有可能的目标检测结果。
-
结果输出:输出轨道部件的类别、位置和置信度信息,为后续的缺陷检测和分类提供区域建议。
轨枕缺陷检测模块
轨枕缺陷检测模块的主要功能是对轨道部件缺陷区域定位模块输出的轨枕区域进行进一步分析,识别和定位轨枕表面的缺陷,如掉块和裂纹等。该模块需要解决轨枕缺陷尺寸较小、裂纹细微难以检测等问题,具有较高的检测精度要求,轨枕缺陷检测模块采用基于改进YOLOv5s的目标检测技术路线,根据轨道部件缺陷区域定位模块输出的轨枕位置信息,从原始图像中截取轨枕区域作为输入;通过改进的YOLOv5s主干网络提取轨枕区域的特征信息。主干网络包含CBS模块(卷积层、批归一化层和SiLU激活函数)、SPPF模块(空间金字塔池化快速版)和CSP1_n模块(跨阶段部分连接)等,能够有效地提取轨枕缺陷的特征;在主干网络的最后一个CSP残差块之后添加SE(Squeeze-and-Excitation)注意力模块,通过计算通道权重,提高模型对轨枕缺陷区域的关注度,抑制背景信息的干扰;利用改进的特征融合结构,将主干网络的浅层特征通过跳跃连接引入到颈部网络,增强对小尺寸缺陷的检测能力。同时,使用特征加权融合模块(CB)计算不同特征的重要性,实现特征的有效融合;基于融合后的特征图,预测轨枕缺陷的类别、置信度和位置信息;对预测结果进行非极大值抑制等后处理操作,输出最终的轨枕缺陷检测结果:

-
SE注意力模块集成:在YOLOv5s的主干网络中集成SE注意力模块,通过全局平均池化、两个全连接层和Sigmoid激活函数,计算每个通道的重要性权重,然后对输入特征图进行加权,突出轨枕缺陷区域的特征信息。
-
特征融合结构改进:借鉴双向特征金字塔网络的思想,改进YOLOv5s的特征融合结构。将主干网络的浅层特征(40×40尺度)通过跳跃连接直接引入到颈部网络的P2模块,增加浅层特征信息的利用。同时,使用特征加权融合模块替代原有的通道相加模块,根据特征的重要性进行自适应融合。
-
数据增强策略:采用Mosaic数据增强方法,将四张不同的轨枕缺陷图像进行随机旋转和缩放并合成一张新的训练样本,丰富训练数据的多样性,提高模型对小目标的检测能力。
-
模型训练与调优:使用轨枕缺陷数据集对改进后的YOLOv5s模型进行训练,设置合适的训练参数,如批次大小、学习率、训练周期等。训练过程中,采用余弦退火策略和Warm-Up方法调整学习率,使用SGD优化器更新模型参数。
-
性能评估与优化:使用测试集对训练好的模型进行评估,分析模型在不同类型轨枕缺陷检测中的表现,针对不足之处进行进一步的优化和改进。
钢轨缺陷分类模块
钢轨缺陷分类模块的主要功能是对轨道部件缺陷区域定位模块输出的钢轨区域进行分类,识别钢轨是否存在缺陷以及具体的缺陷类型,如接缝、波磨、划痕、凹陷和剥离等。该模块需要解决钢轨缺陷类别繁杂、容易相互混淆等问题,具有较高的分类精度要求,钢轨缺陷分类模块采用基于改进MobileNetv3-large的图像分类技术路线,根据轨道部件缺陷区域定位模块输出的钢轨位置信息,从原始图像中截取钢轨区域作为输入,对截取的钢轨区域图像进行预处理,包括统一尺寸缩放、数据增强、标准化等操作,使其满足模型的输入要求,通过改进的MobileNetv3-large网络提取钢轨图像的特征信息。网络包含多个Bneck模块(倒残差模块),每个模块由深度可分离卷积、SE注意力模块和激活函数等组成,能够有效地提取钢轨缺陷的特征,将提取的特征通过全局平均池化和全连接层进行分类,输出钢轨缺陷的类别概率分布,根据分类结果,输出钢轨的缺陷类型或正常状态:

-
网络结构轻量化:对MobileNetv3-large的网络结构进行轻量化改进,减少28×28、14×14和第一个7×7尺度特征图对应的残差模块数量,使每个尺度特征图下仅保留两个残差模块,删除冗余特征图,降低模型的复杂度。
-
Mixup数据增强:在模型训练过程中,采用Mixup数据增强方法,通过随机抽取两个样本并线性插值的方式生成虚拟样本,扩充训练分布,提高模型的泛化能力,避免过拟合。
-
卷积层和BN层合并:在模型推理阶段,将卷积层和BN层进行合并计算,减少推理过程中的计算量和内存访问次数,提高检测速度。合并计算的核心思想是将两个线性操作合并为一个,通过重新计算卷积核权重和偏置,实现相同的输出结果。
-
模型训练:使用钢轨缺陷分类数据集对改进后的MobileNetv3-large模型进行训练。训练过程中,采用SGD优化器,设置合适的学习率、动量和权值衰减等参数,使用余弦函数调整学习率,提高训练的稳定性和收敛速度。
-
模型评估与对比:使用测试集对训练好的模型进行评估,并与其他分类方法(如传统的SIFT+SVM、HOG+SVM、LBP+SVM以及其他卷积神经网络模型)进行对比,验证改进方法的有效性。
系统集成与部署模块
系统集成与部署模块的主要功能是将上述三个功能模块进行集成,形成一个完整的轨道部件缺陷检测系统,并根据实际应用场景进行部署和优化。该模块需要解决模块间的协同工作、数据流转和性能优化等问题,确保整个系统能够高效、稳定地运行,系统集成与部署模块采用模块化设计的技术路线,其技术流程主要包括以下几个步骤:
-
模块接口设计:定义各功能模块之间的接口规范,确保模块间的数据流转顺畅。接口设计包括输入输出格式、数据类型、通信协议等。
-
数据流设计:设计整个系统的数据流转流程,从图像采集到缺陷检测结果输出的全过程。数据流设计需要考虑实时性、准确性和可靠性等因素。
-
性能优化:针对系统的性能瓶颈进行优化,如模型压缩、计算加速、内存优化等,提高系统的实时性能和资源利用率。
-
部署适配:根据不同的部署环境(如服务器、嵌入式设备、边缘计算设备等),对系统进行适配和优化,确保其能够在目标环境中高效运行。
-
测试验证:对集成后的系统进行全面的测试验证,包括功能测试、性能测试、稳定性测试等,确保系统能够满足实际应用的需求。
算法理论
深度学习基础理论
卷积神经网络(CNN)是一种专门用于处理具有网格结构数据的深度学习模型,在计算机视觉领域取得了巨大的成功。CNN的核心思想是通过卷积操作自动提取输入数据的特征,减少模型的参数量,提高训练效率。CNN的基本组成部分包括:

-
卷积层:卷积层是CNN的核心组件,通过卷积核与输入特征图的卷积操作,提取局部特征信息。卷积操作具有局部连接、权值共享和位移不变性等特点,能够有效地减少模型的参数量,提高特征提取的效率。
-
激活函数:激活函数用于引入非线性变换,使网络能够拟合复杂的非线性关系。常用的激活函数包括ReLU、Leaky ReLU、SiLU、h-swish等。ReLU激活函数的表达式为:f(x) = max(0, x),能够有效缓解梯度消失问题,加速网络训练。
-
池化层:池化层用于对特征图进行降采样,减少特征图的维度,降低计算复杂度,同时保持特征的不变性。常用的池化操作包括最大池化和平均池化。
-
批归一化层:批归一化层用于对特征图进行归一化处理,使数据分布更加稳定,加速网络训练,缓解梯度消失问题。批归一化的计算过程包括计算均值和方差、归一化处理、缩放和平移等步骤。
-
全连接层:全连接层用于将特征图转换为一维向量,并通过矩阵运算进行分类或回归任务。全连接层的参数量较大,但具有较强的特征表达能力。
目标检测是计算机视觉中的一项重要任务,旨在从图像中识别和定位多个目标。目标检测算法主要分为两阶段检测算法和单阶段检测算法两大类。

-
两阶段检测算法:两阶段检测算法首先生成目标候选区域,然后对候选区域进行分类和边界框回归。典型的两阶段检测算法包括R-CNN系列(如Faster R-CNN、Mask R-CNN等)。这类算法具有较高的检测精度,但计算复杂度较高,实时性能较差。
-
单阶段检测算法:单阶段检测算法直接从图像中预测目标的类别和位置,无需生成候选区域。典型的单阶段检测算法包括YOLO系列、SSD、RetinaNet等。这类算法具有较高的实时性能,但检测精度相对较低。
YOLO系列是一种经典的单阶段目标检测算法,其核心思想是将目标检测问题转化为回归问题,通过单次前向传播直接预测目标的类别和位置。YOLO系列算法具有以下特点:
- 端到端训练:整个检测过程可以端到端训练,简化了训练流程。
- 实时性能好:检测速度快,能够满足实时应用的需求。
- 全局上下文信息利用:在检测过程中考虑整个图像的上下文信息,减少背景误检。
图像分类是计算机视觉中的基础任务,旨在将输入图像分类到预定义的类别中。近年来,基于深度学习的图像分类算法取得了巨大的成功,典型的模型包括AlexNet、VGG、GoogLeNet、ResNet、MobileNet等。MobileNet系列是一类专为移动设备和嵌入式设备设计的轻量化卷积神经网络,通过深度可分离卷积、线性瓶颈结构等技术,在保持较高分类精度的前提下,显著减少了模型的参数量和计算复杂度。MobileNetv3-large是MobileNet系列的最新版本,通过NAS(Neural Architecture Search)技术搜索最优网络结构,并结合SE注意力机制和h-swish激活函数,进一步提高了模型的性能和效率。深度可分离卷积是MobileNet系列的核心技术,它将标准卷积分解为深度卷积和逐点卷积两个步骤,大幅减少了计算量和参数量。
改进YOLOv5s算法理论
SE注意力机制是一种有效的通道注意力机制,通过显式地建模通道间的依赖关系,提高模型对重要特征的关注度,抑制无用特征的干扰。SE注意力模块主要包括三个操作:挤压(Squeeze)、激励(Excitation)和缩放(Scale)。
-
挤压操作:通过全局平均池化,将输入特征图的空间维度压缩为1,得到1×1×C的特征向量,其中C是通道数。
-
激励操作:通过两个全连接层和激活函数,学习通道间的依赖关系,生成通道权重向量。
-
缩放操作:将通道权重向量与输入特征图逐通道相乘,实现对特征图的缩放。
在YOLOv5s中添加SE注意力模块的主要目的是提高模型对轨枕缺陷区域的关注度,抑制背景信息的干扰,从而提高缺陷检测的精度。
双向特征金字塔网络(BiFPN)是一种改进的特征融合结构,通过双向信息流和加权特征融合,提高特征融合的效率和效果。传统的特征金字塔网络(FPN)通过自顶向下的路径将高层特征的语义信息传递到低层,而BiFPN在此基础上增加了自底向上的路径,实现了高层语义信息和低层细节信息的双向流动。同时,BiFPN还引入了特征加权融合机制,根据特征的重要性进行自适应融合。在YOLOv5s中改进特征融合结构的主要目的是加强浅层特征信息的利用,提高对小尺寸轨枕缺陷的检测能力。具体改进包括:
-
跳跃连接:将主干网络的浅层特征(40×40尺度)通过跳跃连接直接引入到颈部网络的P2模块,增加浅层特征信息的利用。
-
特征加权融合:使用特征加权融合模块(CB)替代原有的通道相加模块,根据特征的重要性进行自适应融合。CB模块的计算原理为:
MobileNetv3-large算法
Mixup是一种有效的数据增强方法,通过线性插值的方式将两张不同的图像混合成新的样本,扩充训练分布,提高模型的泛化能力,避免过拟合在训练过程中,Mixup通过增加真实数据的训练误差,降低模型在训练样本上的拟合程度,从而提高模型对未知数据的泛化能力。同时,Mixup还能够对不同类别之间的领域关系进行建模,使样本间的领域线性化,弱化模型在预测训练样本之外产生的不适应性。卷积层和BN层是深度学习模型中的常用组件,在训练过程中,BN层通过归一化处理卷积层的输出,确保网络各层输入和输出的数据分布不会产生较大变化,有利于网络的快速收敛和缓解梯度消失。然而,在推理过程中,BN层的存在会增加计算量和内存访问次数,降低模型的推理速度。卷积层和BN层合并计算的核心思想是:在推理过程中,将卷积层和BN层的参数合并,将两个线性操作合并为一个,从而减少计算量和内存访问次数,提高推理速度。

核心代码介绍
改进YOLOv3-tiny的SPP模块实现
SPP(空间金字塔池化)模块是改进YOLOv3-tiny算法的核心组件之一,其主要功能是通过在不同尺度上对特征图进行池化操作,然后将池化结果拼接,实现多尺度特征的有效融合,扩大模型的感受野,提高对不同尺度目标的检测能力。该模块在YOLOv3-tiny的主干网络末端添加,通过跳跃连接与原始特征图相结合,能够有效提升特征表达能力。SPP模块的设计思路是使用多个不同大小的池化核(5×5、9×9、13×13)对输入特征图进行最大池化操作,然后将这些池化结果与原始特征图进行拼接,形成新的特征表示。这样做的好处是能够捕获不同尺度的上下文信息,对于检测不同大小的轨道部件(如钢轨、轨枕、扣件)具有重要作用。
python
class SPP(nn.Module):
def __init__(self, c1, c2, k=(5, 9, 13)):
super(SPP, self).__init__()
c_ = c1 // 2 # hidden channels
self.cv1 = Conv(c1, c_, 1, 1) # 1×1卷积,降低通道数
self.cv2 = Conv(c_ * (len(k) + 1), c2, 1, 1) # 1×1卷积,融合特征
self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k])
def forward(self, x):
x = self.cv1(x) # 先通过1×1卷积降低通道数
# 拼接原始特征图和不同池化核的池化结果
return self.cv2(torch.cat([x] + [m(x) for m in self.m], 1))
SPP模块的基本结构和前向传播过程。具体解析如下:
-
初始化函数(init):
c1:输入特征图的通道数c2:输出特征图的通道数k:池化核大小的元组,默认为(5, 9, 13)- 首先计算隐藏层的通道数
c_,设为输入通道数的一半 - 创建两个卷积层:
cv1用于将输入特征图的通道数降低到c_,cv2用于融合拼接后的多尺度特征 - 使用
nn.ModuleList创建多个最大池化层,池化核大小分别为k中的值,步长为1,padding为池化核大小的一半,这样可以保持特征图的尺寸不变
-
前向传播函数(forward):
- 首先通过
cv1对输入特征图x进行1×1卷积,降低通道数 - 然后将原始特征图x与经过各个池化层处理后的特征图进行拼接(在通道维度)
- 最后通过
cv2对拼接后的特征图进行1×1卷积,融合多尺度特征,并将通道数调整为c2
- 首先通过
通过这种设计,SPP模块能够有效融合不同尺度的特征信息,提高模型对多尺度目标的检测能力。在YOLOv3-tiny中添加该模块后,能够显著提升对轨道部件的检测精度,特别是对小目标的检测效果。
改进YOLOv5s的SE注意力模块实现
SE注意力模块是改进YOLOv5s算法的核心组件之一,其主要功能是通过显式地建模通道间的依赖关系,提高模型对轨枕缺陷区域的关注度,抑制背景信息的干扰。该模块在YOLOv5s的主干网络末端添加,能够有效提升模型对轨枕细微缺陷的检测能力。SE注意力模块的设计思路分为三个步骤:
- 挤压(Squeeze):通过全局平均池化,将输入特征图的空间维度压缩为1,得到通道级的全局特征
- 激励(Excitation):通过两个全连接层和激活函数,学习通道间的依赖关系,生成通道权重
- 缩放(Scale):将通道权重与输入特征图逐通道相乘,实现对特征图的自适应缩放
python
class SEAttention(nn.Module):
def __init__(self, c1, r=4):
super(SEAttention, self).__init__()
# c1为输入通道数,r为降维比率
self.avgpool = nn.AdaptiveAvgPool2d(1) # 全局平均池化
self.fc1 = nn.Conv2d(c1, c1 // r, 1, bias=False) # 第一个全连接层(用1×1卷积实现)
self.relu = nn.ReLU(inplace=True)
self.fc2 = nn.Conv2d(c1 // r, c1, 1, bias=False) # 第二个全连接层(用1×1卷积实现)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
# 保存原始输入
b, c, _, _ = x.size()
# Squeeze操作:全局平均池化
y = self.avgpool(x).view(b, c, 1, 1)
# Excitation操作:两个全连接层和激活函数
y = self.fc1(y)
y = self.relu(y)
y = self.fc2(y)
y = self.sigmoid(y)
# Scale操作:将通道权重与输入特征图相乘
return x * y
这段代码实现了SE注意力模块的基本结构和前向传播过程。具体解析如下:
-
初始化函数(init):
c1:输入特征图的通道数r:降维比率,默认为4,用于控制第一个全连接层的输出通道数- 创建全局平均池化层
avgpool,用于将任意大小的输入特征图转换为1×1×c1的特征向量 - 创建两个1×1卷积层
fc1和fc2,分别作为第一个和第二个全连接层 - 创建ReLU激活函数和Sigmoid激活函数,用于引入非线性变换
-
前向传播函数(forward):
- 首先获取输入特征图的批量大小
b和通道数c - 执行Squeeze操作:通过
avgpool对输入特征图进行全局平均池化,然后通过view方法调整形状为(b, c, 1, 1) - 执行Excitation操作:先通过
fc1将通道数降低到c1//r,然后通过ReLU激活函数引入非线性,接着通过fc2将通道数恢复到c1,最后通过Sigmoid激活函数生成0-1之间的通道权重 - 执行Scale操作:将生成的通道权重
y与原始输入特征图x逐通道相乘,实现对特征图的自适应缩放
- 首先获取输入特征图的批量大小
通过这种设计,SE注意力模块能够自动学习通道间的依赖关系,为重要的通道分配较大的权重,为不重要的通道分配较小的权重,从而提高模型对关键特征的关注度。在YOLOv5s中添加该模块后,能够显著提升对轨枕缺陷区域的关注度,有效抑制背景信息的干扰,提高轨枕缺陷检测的精度。
改进MobileNetv3-large的网络结构实现
改进MobileNetv3-large的网络结构是本项目中钢轨缺陷分类模块的核心,其主要功能是通过减少网络中的冗余模块和特征图,降低模型的复杂度,提高推理速度,同时保持较高的分类精度。该改进主要针对MobileNetv3-large的深层部分,通过减少残差模块的数量,删除冗余特征图,实现模型的轻量化。改进思路主要包括以下几点:
- 分析网络各层特征图的相似性,识别冗余特征图
- 减少28×28、14×14和7×7尺度特征图对应的残差模块数量
- 每个尺度特征图下仅保留两个残差模块,且卷积核步长分别设置为2和1
- 在模型推理阶段,合并卷积层和BN层,进一步提高推理速度
python
class MobileNetV3LargeModified(nn.Module):
def __init__(self, num_classes=6):
super(MobileNetV3LargeModified, self).__init__()
# 构建改进后的MobileNetv3-large网络结构
self.features = nn.Sequential(
# 初始卷积层
ConvBNReLU(3, 16, kernel_size=3, stride=2),
# 2倍下采样特征图(112×112)
InvertedResidual(16, 16, kernel_size=3, stride=2, use_se=False, activation='RE'),
# 4倍下采样特征图(56×56)
InvertedResidual(16, 24, kernel_size=3, stride=2, use_se=False, activation='RE'),
# 8倍下采样特征图(28×28)- 仅保留两个残差模块
InvertedResidual(24, 40, kernel_size=5, stride=2, use_se=True, activation='RE'),
InvertedResidual(40, 40, kernel_size=5, stride=1, use_se=True, activation='RE'),
# 16倍下采样特征图(14×14)- 仅保留两个残差模块
InvertedResidual(40, 80, kernel_size=3, stride=2, use_se=False, activation='HS'),
InvertedResidual(80, 80, kernel_size=3, stride=1, use_se=False, activation='HS'),
# 32倍下采样特征图(7×7)- 仅保留两个残差模块
InvertedResidual(80, 160, kernel_size=5, stride=2, use_se=True, activation='HS'),
InvertedResidual(160, 160, kernel_size=5, stride=1, use_se=True, activation='HS'),
# 最后的卷积层
ConvBNReLU(160, 960, kernel_size=1, stride=1),
)
# 分类头
self.avgpool = nn.AdaptiveAvgPool2d(1)
self.classifier = nn.Sequential(
nn.Linear(960, 1280),
nn.Hardswish(inplace=True),
nn.Dropout(0.2),
nn.Linear(1280, num_classes),
)
def forward(self, x):
x = self.features(x)
x = self.avgpool(x)
x = x.view(x.size(0), -1)
x = self.classifier(x)
return x
def fuse_conv_bn(self):
"""合并卷积层和BN层"""
for m in self.modules():
if isinstance(m, ConvBNReLU) and hasattr(m, 'conv') and hasattr(m, 'bn'):
# 获取卷积层和BN层的参数
conv = m.conv
bn = m.bn
# 计算合并后的卷积核权重和偏置
w = conv.weight
mean = bn.running_mean
var_sqrt = torch.sqrt(bn.running_var + bn.eps)
gamma = bn.weight
beta = bn.bias
# 合并计算
if conv.bias is not None:
b = conv.bias
else:
b = torch.zeros_like(mean)
w = w * (gamma / var_sqrt).reshape([conv.out_channels, 1, 1, 1])
b = (b - mean) / var_sqrt * gamma + beta
# 替换为合并后的卷积层
m.conv = nn.Conv2d(
conv.in_channels, conv.out_channels, conv.kernel_size,
conv.stride, conv.padding, conv.dilation, conv.groups, bias=True
)
m.conv.weight.data = w
m.conv.bias.data = b
# 删除BN层
m.bn = None
改进的MobileNetv3-large网络结构,包括网络定义、前向传播和卷积层与BN层合并功能。具体解析如下:
-
初始化函数(init):
num_classes:分类类别数,默认为6(对应钢轨的正常状态和5种缺陷类型)features:网络的特征提取部分,由多个卷积层和倒残差模块(InvertedResidual)组成- 改进点:减少了28×28、14×14和7×7尺度特征图对应的残差模块数量,每个尺度仅保留两个残差模块
classifier:网络的分类部分,由全局平均池化、全连接层、激活函数和Dropout层组成
-
前向传播函数(forward):
- 输入图像首先通过
features部分提取特征 - 然后通过
avgpool进行全局平均池化,得到1×1×960的特征向量 - 接着通过
view方法将特征向量展平为一维 - 最后通过
classifier部分进行分类,输出类别概率分布
- 输入图像首先通过
-
fuse_conv_bn方法:
- 该方法用于在模型推理阶段合并卷积层和BN层,提高推理速度
- 遍历网络中的所有模块,寻找包含卷积层和BN层的ConvBNReLU模块
- 计算合并后的卷积核权重和偏置
- 替换原有的卷积层和BN层为合并后的卷积层
通过这种设计,改进的MobileNetv3-large网络在保持较高分类精度的前提下,显著降低了模型的参数量和计算复杂度,提高了推理速度。在钢轨缺陷分类任务中,该模型能够以更快的速度和更高的精度识别钢轨的缺陷类型,满足实时检测的需求。
重难点和创新点
研究重点
本项目的研究重点主要包括以下几个方面:
-
轨道部件缺陷区域定位:如何快速、准确地从复杂背景的轨道图像中定位钢轨、轨枕和扣件等关键部件,是整个缺陷检测系统的基础和难点。由于轨道沿线的环境复杂多变,背景干扰较大,传统的目标检测算法在检测精度和速度上难以满足要求。
-
轨枕微小缺陷识别:轨枕缺陷通常尺寸较小,特别是轨枕裂纹较为细微,传统的目标检测算法容易出现漏检和误检的情况。如何提高模型对微小缺陷的检测能力,是轨枕缺陷检测的重点和难点。
-
钢轨多类别缺陷分类:钢轨缺陷类型繁多且容易相互混淆,如波磨和划痕的特征较为相似,在图像亮度较弱时容易造成误判。如何准确区分不同类型的钢轨缺陷,是钢轨缺陷分类的重点和难点。
创新点
本项目的主要创新点包括:
-
改进的YOLOv3-tiny算法:在YOLOv3-tiny的主干网络末端添加SPP模块,扩大模型的感受野,提高对多尺度目标的检测能力;同时采用基于BN层γ系数的通道剪枝算法对模型进行压缩,在保持检测精度的前提下,减小模型的参数量和计算复杂度。
-
基于SE注意力机制的YOLOv5s算法:在YOLOv5s的主干网络中添加SE注意力模块,提高模型对轨枕缺陷区域的关注度,抑制背景信息的干扰;同时借鉴双向特征金字塔网络的思想,改进特征融合结构,加强浅层特征信息的利用。
-
轻量化的MobileNetv3-large算法:对MobileNetv3-large的网络结构进行轻量化改进,减少深层部分的残差模块数量,删除冗余特征图;同时在训练过程中使用Mixup数据增强方法扩充训练分布,在推理阶段合并卷积层和BN层提高检测速度。
-
多模块协同检测系统:设计了一个完整的轨道部件缺陷检测系统,包括轨道部件缺陷区域定位、轨枕缺陷检测和钢轨缺陷分类三个主要模块,实现了对多种轨道部件缺陷的高效检测。系统各模块之间通过明确的接口进行交互,数据流转顺畅,能够满足实时检测的需求。
总结
本项目研究了基于卷积神经网络的轨道部件缺陷检测算法,针对轨道部件缺陷检测中的关键问题和技术难点,提出了一系列改进和优化方法,取得了较好的研究成果。
-
通过对轨道部件缺陷特征和检测难点的分析,设计了轨道部件缺陷检测的总体方案,将检测任务分为轨道部件缺陷区域定位和缺陷检测两个部分。针对轨道部件缺陷区域定位问题,研究了一种基于改进YOLOv5s的轨道部件缺陷区域定位算法,通过添加SPP模块和采用通道剪枝算法,在提高检测精度的同时,降低了模型的复杂度,为后续的缺陷检测和分类奠定了基础。
-
针对轨枕细微裂纹和端部掉块缺陷检测的问题,研究了一种基于改进YOLOv5s的轨枕缺陷检测算法。通过在主干网络中添加SE注意力模块和改进特征融合结构,提高了模型对轨枕缺陷区域的关注度和特征信息的利用效率,有效提高了轨枕缺陷检测的精度。
-
钢轨多类别缺陷分类的问题,研究了一种基于改进MobileNetv3-large的钢轨缺陷检测算法。通过网络结构轻量化改进、Mixup数据增强和卷积层与BN层合并计算等方法,在保持较高分类精度的前提下,显著提高了模型的推理速度,满足了实时检测的需求。
本项目的研究成果不仅为轨道部件缺陷检测提供了一种有效的解决方案,也为深度学习技术在轨道交通领域的应用提供了有益的参考。未来的研究工作可以进一步优化模型结构,提高模型的鲁棒性和泛化能力;探索少样本学习、迁移学习等技术,解决小样本缺陷检测的问题;研究多模态融合检测方法,结合图像、声音、振动等多种信息,提高缺陷检测的准确性和可靠性。
参考文献
1\] Chen Z X, Wang Q H, He Q, et al. CUFuse: Camera and Ultrasound Data Fusion for Rail Defect Detection\[J\]. IEEE Transactions on Intelligent Transportation Systems, 2022, 23(11): 21971-21983. \[2\] X. Wang, J. Zhang, Y. Wang, et al. Defect Detection of Track Fasteners Based on Pruned YOLO V5 Model\[C\]//2022 IEEE 11th Data Driven Control and Learning Systems Conference (DDCLS). Chengdu, China: IEEE, 2022: 391-395. \[3\] Zheng Y J, Wu S R, Liu D, et al. Sleeper Defect Detection Based on Improved YOLO V3 Algorithm\[C\]//2020 15th IEEE Conference on Industrial Electronics and Applications (ICIEA). Kristiansand, Norway: IEEE, 2020: 955-960. \[4\] Ni X F, Ma Z J, Liu J, et al. Attention Network for Rail Surface Defect Detection Via Consistency of Intersection-over-Union(Iou)-Guided Center-Point Estimation\[J\]. IEEE Transactions on Industrial Informatics, 2021, 18(3): 1694-1705. \[5\] Tu Z W, Wu S R, Kang G Q, et al. Real-Time Defect Detection of Track Components: Considering Class Imbalance and Subtle Difference between Classes\[J\]. IEEE Transactions on Instrumentation and Measurement, 2021, 70: 1-12.