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/cu1182. 数据集结构
确保你的数据集目录结构如下:
wheat_disease_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.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=16model=yolov11s.pt: 使用官方预训练模型(假设存在)data=data.yaml: 配置文件路径epochs=100: 训练轮数imgsz=640: 输入图像尺寸batch=16: 批量大小(根据显存调整)
训练完成后,会在runs/detect/train/weights/目录下生成best.pt和last.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 的小麦病害检测系统,可以用于农业科研、病害防治等实际场景中。如需添加更多功能(如导出检测结果、数据库记录、多语言支持等),也可以继续拓展。