目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的机场跑道裂痕检测系统
设计思路
一、课题背景与意义
跑道道面的危害主要包括异物(FOD)和跑道裂缝,严重危及飞行安全,对跑道道面裂缝的检测直接关系到飞行起降安全。为了保证飞机安全起飞降落,需要及早地检测出跑道道面的裂缝。
二、算法理论原理
2.1 卷积神经网络
卷积神经网络(CNN)由许多神经元所构成,其结构如图2.1所示;它包括了多层构造,分别是输入层、卷积层、非线性层(激活函数)、池化层、全连接层和输出层。就目标检测而言,输入层为卷积神经网络输入图像像素矩阵。紧接着送入各层通过设置权值进行计算。
卷积的目的主要是用来获得图像的特性,卷积层由多个卷积计算单元所构成,而各个卷积计算单元的参数都是利用反向传播算法最优化而获得的。卷积运算可以保持像素之间的空间关系。
池化层也就是Pooling层,池化层也叫采样层,大多跟在卷积运算的后面,通过降低权重参数数量,在进行池化的采样过程中主要使用特征降维算法,通过减少数据和参数的数量,降低了建模拟合,并且增加了建模的容错度,目前常用的池化方法主要有平均池化方法(mean pooling)、最大池化(max pooling)以及金字塔池化(spp pooling)。
2.2 YOLOv5算法
Yolov5首先把输入图像整张作为网络的输入,并把输入图像划分为多个N×N大小相同的网格,如果裂缝中心出现在其中一个网格中,那么该网格就负责检测该处的裂缝。
原始的Yolo的候选框方式存在严重缺陷。宽度和高度完全不受限制,这容易导致梯度失控、不稳定。Yolov5修补了此错误,同时还确保中心点保持不变,因此Yolov5当前的方程式将锚点的倍数从最小0限制为最大4,并且锚框目标匹配也更新为基于宽度和高度倍数,标称上限阈值超参数为4.0。
最后通过非极大值抑制(NMS)之后,设置相应的置信度阈值,最后框选出最大置信度的锚框,得到了裂缝的预测框。Yolov5的网络结构分为四部分:输入(Input)、主干网络(Backbone)、Neck模块、输出(Head)。
Yolov5主要的创新点有:
(1) 输入使用Mosaic数据增强。
(2) 自适应图片压缩技术。
(3)主干网络增加了切片结构和特征结构
(4)Neck架构使用了FPN+PAN
三、检测的实现
3.1 数据集
基于卷积神经网络的目标检测方法需要从大量样本中学习目标特征。如果样本不具有代表性,则很难选择好的特征。使用的数据集源自互联网采集。共采集到3200多张裂缝图片,在研究人员不断训练和测试的基础上,机器学习的训练集比上测试集等于4比1能达到更好的效果,所以把2560张图片作为训练集,640张图片作为测试集。
深度学习需要从大量样本中学习目标的特征,虽然在3200多张数据集的情况下进行网络训练取得了较好的结果,但是网络训练效果没有达到最优,由于数据集数据量少,便开始对数据集进行扩充,具体为对数据图像进行旋转、加噪、亮度、裁剪、平移操作。
3.2 实验环境搭建
模型最先使用Google-Colab进行训练,它提供强大GPU的算力并且免费访问,不需要进行环境配置。将Yolov5算法部署在Windows10专业版64位操作系统,算法采用的深度学习框架为Pytorch,Pytorch是由Facebook公司研发,支持Python、C++、Javascript多种计算机语言,Pytorch拥有更快的处理速度,编译器采用Pycharm。
3.3 实验及结果分析
在添加数据集和解压数据集后,设置Yolov5权重文件和训练次数(epoch)后开始训练,此次训练在线上进行,考虑到电脑分配的性能,采用未扩展的原始数据进行训练:
在使用Google-Colab进行网络训练时,若训练epoch次数过多会面临中断训练的风险,无法得到训练结果,与模型权重。
经过新的训练后得到了两个权重文件:
训练效果得到些许的改善,第二次训练模型的Box,Objectness,Classification三个损失均比第一次训练结果曲线图像略微平滑,并且召回率的波动起伏没有图3.19的大,mAP@0.5和mAP@0.5:0.95图像曲线也比第一次训练平滑,并且mAP提高了30%。
在进行裂缝检测时,如果能将裂缝长度进行量化处理,可以将危险程度分级,因此设计了裂缝像素长度计算模型。
c1和c2分别表示对角线两点的坐标,通过c2的横坐标减去c1的横坐标再取绝对值,c2的纵坐标减去c1的纵坐标再取绝对值,最后根据勾股定理可得对角线像素距离
部分代码如下:
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 编译模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 加载数据集并进行预处理
train_data = load_train_data()
train_labels = load_train_labels()
test_data = load_test_data()
test_labels = load_test_labels()
# 进行数据预处理,如图像增强、归一化等
# 训练模型
model.fit(train_data, train_labels, epochs=10, batch_size=32, validation_data=(test_data, test_labels))
# 使用模型进行预测
predictions = model.predict(test_data)
# 对预测结果进行后处理和可视化
visualize_predictions(predictions, test_labels)
实现效果图样例
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!