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


以下文字及代码仅供参考学习。
在这里插入图片描述

基于YOLOv11+pyqt5的小麦病害检测系统
在这里插入图片描述

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

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

使用 torchvision.transforms 进行数据增强

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

pip install torchvision

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

import torch
from torchvision import transforms, datasets
from torch.utils.data import DataLoader
import os

# 定义图像变换,包括随机旋转
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])
                  for x in ['train', 'val']}
dataloaders = {x: DataLoader(image_datasets[x], batch_size=32, shuffle=True, num_workers=4)
               for x in ['train', 'val']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'val']}
class_names = image_datasets['train'].classes

# 打印类别名称和数据集大小以确认设置正确
print(class_names)
print(dataset_sizes)

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

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

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

yolo train model=yolov11s.pt data=data.yaml epochs=100 imgsz=640 batch=16 augment=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. 安装依赖库

pip install ultralytics pyqt5 opencv-python numpy onnxruntime

如果使用 GPU:

pip install torch 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/train
val: ./images/val
test: ./images/test

nc: 5
names: ['healthy', 'leaf_rust', 'smut', 'yellow_rust', 'stem_rust']

🚀 第二步:训练 YOLOv11 模型

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

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

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


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

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

1. 创建主窗口 UI

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QFileDialog, QVBoxLayout
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qt, QTimer
import cv2
import numpy as np
from ultralytics import YOLO

class WheatDiseaseDetector(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 = None
        self.timer = QTimer()
        self.timer.timeout.connect(self.update_frame)

    def load_image(self):
        path, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "Image Files (*.png *.jpg *.jpeg)")
        if path:
            results = self.model(path)
            result_img = results[0].plot()
            self.display_image(result_img)

    def load_video(self):
        path, _ = QFileDialog.getOpenFileName(self, "选择视频", "", "Video Files (*.mp4 *.avi)")
        if path:
            self.cap = cv2.VideoCapture(path)
            self.timer.start(30)

    def open_camera(self):
        self.cap = cv2.VideoCapture(0)
        self.timer.start(30)

    def update_frame(self):
        ret, frame = self.cap.read()
        if ret:
            results = self.model(frame)
            result_img = results[0].plot()
            self.display_image(result_img)

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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐