目录
前言
课题背景和意义
实现技术思路
一、算法理论基础
1.1 YOLOv5
1.2 目标检测算法
1.3 注意力机制
二、 数据集
2.1 数据集
2.2 数据扩充
三、实验及结果分析
3.1 实验环境搭建
3.2 模型训练
最后
大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
对毕设有任何疑问都可以问学长哦!
选题指导:
最新最全计算机专业毕设选题精选推荐汇总
大家好,这里是海浪学长毕设专题,本次分享的课题是
基于深度学习的苹果叶病虫害识别目标检测系统
随着农业现代化的推进,果园管理中对苹果叶病虫害的识别和防治需求日益增长。基于深度学习的苹果叶病虫害识别目标检测系统,结合了计算机视觉和机器学习技术,可以实现对苹果叶病虫害的自动识别和定位,提高果园管理的智能化水平,对于提升农业生产的效率和质量,具有重要的现实意义和深远的社会影响。该课题的研究,对于推动人工智能技术在农业领域的应用,具有重要的理论和实践价值。
YOLOv5结构由四个部分组成:输入端、骨干网络部分、多尺度特征融合部分和预测端。在输入端,YOLOv5可以使用信号增强手段如Mosaic、自适应锚框算法和自适应图像压缩等对输入信号进行预处理。Mosaic数据增强技术通过随机压缩、编辑和排布等方法将多张数据重新拼接,从而提高数据样本的丰富性和系统的泛化性能。YOLOv5默认使用3个锚框来检测不同大小的目标,这些锚框的参数范围对应特征图的尺度。自适应锚框是通过计算预测框值与实际框值之差,并利用数据迭代方法获得最佳的锚框值。自适应图像压缩将不同尺寸的特征图像统一缩放到相应的尺寸。
骨干网络(Backbone)由四个部分组成:Focus、卷积模块CBS、瓶颈层CSP(cross-stage partial network)模块以及空间金字塔池化(Spatial Pyramid Pooling, SPP)。Focus模块通过隔列切片操作将高分辨率特征图拆分成多个低分辨率的特征图,然后再拼接在一起。CBS基本模块由卷积层、批归一化和SiLU激活函数组成。CSP残差结构能够增加深层网络中层间反向传播的梯度值,避免梯度消失问题,并加快推理速度。SPP模块通过一个卷积层和三个多尺度最大池化层进行多尺度特征融合。
多尺度特征融合(Neck)主要使用特征金字塔网络(Feature Pyramid Networks, FPN)结构进行自上而下的语义特征提取增强,以及路径聚合网络(Path Aggregation Networks, PAN)结构进行自底向上的定位特征增强,实现了不同尺寸目标特征信息的融合,解决了多尺度问题。
预测端头部网络(Head)采用三种损失函数分别计算分类、定位和置信度损失,并通过非极大抑制(Non-Maximum Suppression, NMS)去除检测框的重叠,提高多目标检测的能力。
1.2 目标检测算法针对植物叶片病虫害检测任务中存在的背景干扰、待检测病斑被遮挡和尺寸小等问题,对YOLOv5模型进行了四点改进。首先,在骨干网络部分改进了SPPF层,使用改进后的SPPF替代原有的SPP层,并引入了BoTNet结构来替换相应的CSP结构,以增加有效信息与位置感知的关联。其次,引入了改进的卷积块注意力模块(CBAM),提高了神经网络对特征区域的识别能力,并将有效的位置信息添加到YOLOv5网络中,从而使模型更加精准地定位和识别感兴趣的目标特征。然后,对Neck中的特征金字塔部分的CSPLayer层进行改进,采用ConvNext结构,增强了对语义特征的提取能力,提高了特征提取的精准度。最后,在预测部分改进了损失函数,使用α-IoU替代现有的IoU损失计算方式。
空间金字塔池化(Spatial Pyramid Pooling, SPP)是一种将任意大小的图片转换成网络所需的固定大小特征向量的技术,它可以减少对候选区域的重复卷积计算,从而减少计算冗余。SPP的结构首先经过一个卷积层,然后分别经过三个不同大小的最大池化层,并将它们的结果进行拼接,最后再经过一个卷积层。
通过将SPP替换为改进后的SPPF(Spatial Pyramid Pooling Fusion),其作用是相同的,但后者的效率更高。SPP需要指定三个最大池化层,池化核大小分别为5×5、9×9、13×13,而SPPF只需要指定三个大小为5×5的最大池化层。在结构上,串行使用两个5×5大小的最大池化层和一个9×9大小的最大池化层的计算结果与串行使用三个最大池化层和一个13×13大小的最大池化层的计算结果是相同的。然而,SPPF在计算量上比SPP更小,并且在效率上更快。
CBAM是一种即插即用且易于使用的注意力机制,由通道域和空间域组成。通道域关注不同通道上特征点的权重,通过权重对不同通道进行乘法运算,增强网络对关键通道的注意力。首先,特征图进入通道域,然后进行全局最大池化(GAP)和全局平均池化(GMP)操作,在宽度和高度上对特征图进行池化,并利用多层感知器(MLP)计算不同通道的注意力权重。接下来,使用Sigmoid函数对这些权重进行归一化处理,并将每个通道的权重乘以原始输入特征图,以获得更准确的结果。CBAM中的通道域采用全连接层,压缩通道特征的空间维度,从而降低模型的复杂性。
为了减少通道域感兴趣信息的丢失并提高病变识别网络的准确性,本研究引入了改进的CBAM。改进的CBAM使用了ECA-Net替代原有的通道域,同时保留了原始的空间域。ECA-Net模块采用了一种不降维的局部跨通道交互策略,有效避免了降维对通道注意力学习效果的影响。通过对每个特征图求均值,从一个H×W×C的特征图变成一个1×1×C的特征图,并通过大小为K的一维卷积实现局部跨通道交互,其中卷积核大小K代表了局部跨信道交互的覆盖率。
由于现有的公开数据集难以满足本研究的需要,我们决定通过网络爬取的方式收集大量的苹果叶图片,并制作了一个全新的、专门针对苹果叶病虫害识别的数据集。这个数据集包含了各种苹果叶病虫害的照片,包括病斑、虫蛀等。通过这种自制的数据集,我们能够更准确、更有效地训练模型,提高系统的识别准确性。
为了进一步提高模型的泛化能力和鲁棒性,我们对收集到的数据集进行了扩充。扩充方法包括旋转、翻转、缩放、裁剪等,以增加数据的多样性和模型的适应性。通过对数据集进行细致的预处理和扩充,我们的系统在实际应用中表现出了良好的识别效果和稳定性。
本研究在Windows 10操作系统上进行实验,使用了AMD Ryzen 7 5800H作为CPU型号,以及RTX 3060作为GPU型号。深度学习框架选用了PyTorch 1.10.0版本,并使用了CUDA 11.4版本框架来加速计算。
3.2 模型训练在目标检测领域,评估网络性能的指标通常包括以下几个方面:平均精确率均值(mean average precision,mAP)、模型大小和计算量(GFLOPS)。
mAP是一个综合考量精确率(Precision,P)和召回率(Recall,R)的指标,用于评估模型的有效性。精确率是指正确被预测为某类目标(如病斑)占所有预测为该类目标的比例,召回率是指正确被预测为某类目标占实际上所有该类目标的比例。mAP可以反映模型在各个类别上的性能表现。模型大小是衡量模型对硬件内存需求的指标。在严格的硬件资源限制或复杂环境下,需要使用轻量级模型来满足硬件设备的存储需求。计算量反映了模型对硬件设备计算单元的要求。在硬件资源有限的情况下,较小的计算量可以更好地适应硬件设备的计算能力。相关代码示例:
import torch
from torchvision.models.detection import FasterRCNN
from torchvision.models.detection.rpn import AnchorGenerator
model = FasterRCNN(backbone=None, num_classes=2)
images = torch.randn(10, 3, 224, 224)
targets = [{'boxes': torch.tensor([[10, 10, 50, 50], [100, 100, 150, 150]]), 'labels': torch.tensor([0, 1])}] * 10
outputs = model(images, targets)
model_size = sum(p.numel() for p in model.parameters()) / 1e6 # 模型参数数量的大小,单位为MB
input_size = (1, 3, 224, 224)
input_data = torch.randn(input_size)
flops = torch.cuda.FloatTensor(1).zero_()
model = model.cuda()
model.eval()
def count_flops_hook(module, input, output):
flops[0] += torch.Tensor([input[0].shape[2] * input[0].shape[3] * output.shape[1] *
output.shape[2] * output.shape[3] * module.kernel_size[0] *
module.kernel_size[1] * 2 / 1e9])
model.apply(lambda module: setattr(module, 'count_flops_hook', None))
model.apply(lambda module: setattr(module, 'count_flops_hook', count_flops_hook))
model(input_data.cuda())
gflops = flops.item()
print("mAP:", mAP)
print("模型大小(MB):", model_size)
print("计算量(GFLOPS):", gflops)
海浪学长项目示例:
我是海浪学长,创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!
相关知识
基于深度学习的病虫害智能化识别系统
基于深度学习的农作物病虫害识别系统
基于YOLOv8深度学习的水稻害虫检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
毕业设计:基于深度学习的农作物病虫害识别系统 深度卷积 人工智能 机器视觉
毕业设计:基于深度学习的野生花卉识别分类算法系统 目标检测
基于YOLOv8深度学习的智能玉米害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
基于YOLOv8深度学习的智能小麦害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
深度学习在植物病害目标检测的科研进展
基于深度学习的柑橘病虫害动态识别系统研发
基于深度学习和迁移学习的识花实践
网址: 毕业设计:基于深度学习的苹果叶病虫害识别系统 目标检测 https://m.huajiangbk.com/newsview417642.html
上一篇: 吉祥花坛迎新年!五一公园、雕塑公 |
下一篇: 基于深度学习的常见作物病虫害识别 |