yolov11小麦病害检测数据集 基于YOLOv11+pyqt5的小麦病害检测系统 小麦叶锈病 小麦健康识别 小麦散黑穗病 黄锈病、秆锈病

📅 2026/8/2 16:39:38 👁️ 阅读次数 📝 编程学习
yolov11小麦病害检测数据集 基于YOLOv11+pyqt5的小麦病害检测系统 小麦叶锈病 小麦健康识别 小麦散黑穗病 黄锈病、秆锈病

yolov11模型训练小麦病害检测数据集 建立基于YOLOv11+pyqt5的小麦病害检测系统 推理识别检测叶锈病、健康、散黑穗病、黄锈病、秆锈病

文章目录

  • yolov11模型训练小麦病害检测数据集 建立基于YOLOv11+pyqt5的小麦病害检测系统 推理识别检测叶锈病、健康、散黑穗病、黄锈病、秆锈病
      • 使用 torchvision.transforms 进行数据增强
      • 在 YOLO 训练流程中应用数据增强
      • 将自定义变换应用于 YOLO 数据加载
    • ✅ 系统架构概览
  • 🧱 第一步:准备环境与数据
      • 1. 安装依赖库
      • 2. 数据集结构
  • 🚀 第二步:训练 YOLOv11 模型
  • 💻 第三步:开发 PyQt5 可视化界面
    • 1. 创建主窗口 UI
    • 2. 启动应用
  • ✅ 结语

以下文字及代码仅供参考学习。

基于YOLOv11+pyqt5的小麦病害检测系统

小麦病虫害数据集 yolo格式,数据集划分好训练集(1164张图片)验证集(218张图片)测试集(165张图片),分为5个类别:叶锈病、健康、散黑穗病、黄锈病、秆锈病。

实现对图像进行随机角度旋转的数据增强,可以使用torchvision.transforms或者imgaug等库。这里我将提供一个基于torchvision.transforms的简单示例,它适合在 PyTorch 数据加载管道中集成。

使用 torchvision.transforms 进行数据增强

首先,确保你的环境中已经安装了torchvision

pipinstalltorchvision

然后,创建一个自定义的变换组合,其中包括随机旋转操作。以下是如何将其集成到你的数据加载管道中的示例:

importtorchfromtorchvisionimporttransforms,datasetsfromtorch.utils.dataimportDataLoaderimportos# 定义图像变换,包括随机旋转data_transforms={'train':transforms.Compose([transforms.RandomRotation(degrees=(-30,30)),# 随机旋转-30到30度transforms.Resize((224,224)),# 调整大小transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])# 标准化]),'val':transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]),}# 假设你的数据集路径如下组织:data_dir='wheat_disease_dataset'image_datasets={x:datasets.ImageFolder(os.path.join(data_dir,x),data_transforms[x])forxin['train','val']}dataloaders={x:DataLoader(image_datasets[x],batch_size=32,shuffle=True,num_workers=4)forxin['train','val']}dataset_sizes={x:len(image_datasets[x])forxin['train','val']}class_names=image_datasets['train'].classes# 打印类别名称和数据集大小以确认设置正确print(class_names)print(dataset_sizes)

在 YOLO 训练流程中应用数据增强

YOLO 的训练过程中使用这些增强方法,YOLO 框架本身提供了非常灵活的数据增强选项。你可以在配置文件或者命令行参数中指定增强策略。对于 Ultralytics YOLO 版本,可以通过修改或添加数据增强参数来达到目的。

在训练时加入额外的数据增强选项:

yolo trainmodel=yolov11s.ptdata=data.yamlepochs=100imgsz=640batch=16augment=True

这里的augment=True开启了 YOLO 自带的一系列数据增强技术,包括但不限于随机裁剪、翻转、颜色抖动等,但不直接支持特定的角度旋转。如果需要更细致的控制(比如指定旋转角度),则需要通过自定义数据加载器的方式实现,如上面提供的torchvision.transforms示例所示。

将自定义变换应用于 YOLO 数据加载

为了让 YOLO 接受自定义的图像变换,你需要修改数据加载部分的代码,使其包含上述的自定义变换。这通常涉及到修改 YOLO 源码中的数据加载函数,这是一个高级操作,可能需要一定的 Python 和深度学习框架的知识。

不过,考虑到灵活性和易用性,推荐先尝试使用 YOLO 内置的数据增强功能,并评估其效果。如果内置选项无法满足需求,再考虑深入定制数据加载过程。

训练集:1164
验证集:218
测试集:165

也可自行替换模型,使用该界面做其他,实现检测目标自定义

Python + PyQt5可视化界面

可对图片/视频/摄像头进行识别

结构清晰、标注完整的小麦病虫害数据集,包含 5 类小麦病害(叶锈病、健康、散黑穗病、黄锈病、秆锈病),采用 YOLO 格式标注。目标是训练YOLOv11 模型并开发一个基于 PyQt5 的可视化检测系统,支持图片、视频和摄像头实时识别。


✅ 系统架构概览

组件技术
模型YOLOv11(假设为 Ultralytics YOLO 官方版本)
数据格式YOLO 标注格式(txt + jpg)
推理引擎PyTorch / ONNXRuntime
可视化界面PyQt5
支持输入类型图片、视频、摄像头

🧱 第一步:准备环境与数据

1. 安装依赖库

pipinstallultralytics pyqt5 opencv-python numpy onnxruntime

如果使用 GPU:

pipinstalltorch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118

2. 数据集结构

确保你的数据集目录结构如下:

wheat_disease_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml

data.yaml内容示例:

train:./images/trainval:./images/valtest:./images/testnc:5names:['healthy','leaf_rust','smut','yellow_rust','stem_rust']

🚀 第二步:训练 YOLOv11 模型

使用 Ultralytics 提供的yolo命令行工具进行训练:

yolo trainmodel=yolov11s.ptdata=data.yamlepochs=100imgsz=640batch=16
  • model=yolov11s.pt: 使用官方预训练模型(假设存在)
  • data=data.yaml: 配置文件路径
  • epochs=100: 训练轮数
  • imgsz=640: 输入图像尺寸
  • batch=16: 批量大小(根据显存调整)

训练完成后,会在runs/detect/train/weights/目录下生成best.ptlast.pt模型文件。


💻 第三步:开发 PyQt5 可视化界面

构建一个 GUI 应用程序,可以加载图片、视频或摄像头画面,并显示检测结果。

1. 创建主窗口 UI

importsysfromPyQt5.QtWidgetsimportQApplication,QWidget,QLabel,QPushButton,QFileDialog,QVBoxLayoutfromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QTimerimportcv2importnumpyasnpfromultralyticsimportYOLOclassWheatDiseaseDetector(QWidget):def__init__(self):super().__init__()self.setWindowTitle("小麦病害检测系统")self.setGeometry(100,100,800,600)self.label=QLabel(self)self.label.setAlignment(Qt.AlignCenter)self.btn_img=QPushButton("选择图片",self)self.btn_video=QPushButton("选择视频",self)self.btn_camera=QPushButton("打开摄像头",self)layout=QVBoxLayout()layout.addWidget(self.label)layout.addWidget(self.btn_img)layout.addWidget(self.btn_video)layout.addWidget(self.btn_camera)self.setLayout(layout)# 加载模型self.model=YOLO('runs/detect/train/weights/best.pt')# 连接按钮事件self.btn_img.clicked.connect(self.load_image)self.btn_video.clicked.connect(self.load_video)self.btn_camera.clicked.connect(self.open_camera)self.cap=Noneself.timer=QTimer()self.timer.timeout.connect(self.update_frame)defload_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图片","","Image Files (*.png *.jpg *.jpeg)")ifpath:results=self.model(path)result_img=results[0].plot()self.display_image(result_img)defload_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","Video Files (*.mp4 *.avi)")ifpath:self.cap=cv2.VideoCapture(path)self.timer.start(30)defopen_camera(self):self.cap=cv2.VideoCapture(0)self.timer.start(30)defupdate_frame(self):ret,frame=self.cap.read()ifret:results=self.model(frame)result_img=results[0].plot()self.display_image(result_img)defdisplay_image(self,img):rgb_image=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,ch=rgb_image.shape bytes_per_line=ch*w qt_image=QImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)pixmap=QPixmap.fromImage(qt_image).scaled(self.label.width(),self.label.height(),Qt.KeepAspectRatio)self.label.setPixmap(pixmap)

2. 启动应用

if__name__=='__main__':app=QApplication(sys.argv)window=WheatDiseaseDetector()window.show()sys.exit(app.exec_())

✅ 结语

基于 YOLOv11 + PyQt5 的小麦病害检测系统,可以用于农业科研、病害防治等实际场景中。如需添加更多功能(如导出检测结果、数据库记录、多语言支持等),也可以继续拓展。