YOLOv8 模型进行目标检测训练 小麦叶片病害检测数据集 识别小麦5类病害的检测 建立基于深度学习的小麦病害检测系统

以下文字及代码仅供参考学东西。
小麦叶片病害检测数据集在这里插入图片描述

5类
类别名字分别是:叶锈病、健康、散黑穗病、黄锈病、秆锈病
[‘Wheat Brown-rust’, ‘Wheat Healthy’, ‘Wheat Smut’, ‘Wheat-Yellow-rust’, ‘wheat Stem Rust’]在这里插入图片描述

图像是1547张,其中训练集是1164张,验证集测是218张、测试集165张在这里插入图片描述
1
mAP50 =0.772

小麦叶片病害检测数据集,含 5 类病害,共 1547 张图像。该数据集已经划分为训练集、验证集和测试集,适合用于目标检测或分类任务。使用 YOLOv8 进行目标检测训练

在这里插入图片描述

📊 一、数据集概览

属性 内容
数据集名称 小麦叶片病害检测数据集(Wheat Leaf Disease Detection Dataset)
图像总数 1547 张
训练集 1164 张
验证集 218 张
测试集 165 张
标注格式 YOLO txt(每个图像对应一个 .txt 文件)
类别数 5 类
类别名称 Wheat Brown-rust, Wheat Healthy, Wheat Smut, Wheat-Yellow-rust, wheat Stem Rust

🧱 二、数据准备与组织结构

✅ 1. 数据目录结构(建议)

确保图像同学你的数据集按如下结构组织:

wheat_disease_dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
├── labels/
│   ├── train/
│   ├── val/
│   └── test/

每张图片都有对应的 .txt 文件,内容为:

class_id x_center y_center width height

其中:

  • class_id = 0: Wheat Brown-rust(叶锈病)
  • class_id = 1: Wheat Healthy(健康)
  • class_id = 2: Wheat Smut(散黑穗病)
  • class_id = 3: Wheat-Yellow-rust(黄锈病)
  • class_id = 4: wheat Stem Rust(秆锈病)

✅ 2. 创建 data.yaml 文件

创建一个名为 data.yaml 的配置文件,用于 YOLOv8 训练:

train: wheat_disease_dataset/images/train/
val: wheat_disease_dataset/images/val/
test: wheat_disease_dataset/images/test/

nc: 5
names: ['Wheat Brown-rust', 'Wheat Healthy', 'Wheat Smut', 'Wheat-Yellow-rust', 'wheat Stem Rust']

⚠️ 注意:类名大小写要统一,YOLO 对类别名称大小写敏感,建议与标注一致。


🛠️ 三、环境搭建

安装 Ultralytics YOLOv8 环境:

# 克隆仓库
git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics

# 安装依赖
pip install -r requirements.txt

🚀 四、模型训练

使用命令行进行训练:

yolo train data=data.yaml model=yolov8s.pt epochs=100 batch=16 imgsz=640
参数说明:
参数 含义
data 数据集配置文件路径
model 使用的预训练模型权重(如 yolov8n/s/m/l/x)
epochs 总训练轮次
batch 批大小(根据显存调整)
imgsz 输入图像尺寸(默认640x640)

如果你有 GPU 支持,可以自动使用 CUDA 加速训练过程。


🔍 五、推理与结果展示

✅ 单张图像推理:

from ultralytics import YOLO

# 加载最佳模型
model = YOLO('runs/train/exp/weights/best.pt')

# 推理单张图像
results = model('test_images/wheat_leaf_001.jpg')

# 显示结果
for r in results:
    print(r.boxes)  # 输出预测框信息
    annotated_img = r.plot()
    cv2.imshow("Detection", annotated_img)
    cv2.waitKey(0)

✅ 视频流实时检测:

def detect_video(source=0):
    cap = cv2.VideoCapture(source)
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        results = model(frame)
        annotated_frame = results[0].plot()

        cv2.imshow("Real-time Wheat Disease Detection", annotated_frame)
        if cv2.waitKey(1) == 27:  # ESC键退出
            break

    cap.release()
    cv2.destroyAllWindows()

📈 六、性能评估

使用验证命令评估 mAP、Recall、Precision 等指标:

yolo val data=data.yaml model=runs/train/exp/weights/best.pt imgsz=640

输出包括:

  • mAP@0.5
  • mAP@0.5:0.95
  • Precision / Recall 曲线
  • F1-score

📦 七、模型导出(可选)

将模型导出为 ONNX、TensorRT 或 OpenVINO 等格式以便部署:

yolo export model=runs/train/exp/weights/best.pt format=onnx

支持格式:onnx, engine, coreml, tflite, pb, pt


🧪 八、推荐训练技巧

技巧 说明
数据增强 使用 Mosaic、HSV、Flip 提高泛化能力
多尺度训练 --multi-scale 可提升小目标检测效果
类别不平衡处理 黄锈病/秆锈病样本可能较少,建议使用 focal loss 或重采样策略
自定义锚框 如果某些病害分布特殊,可重新聚类生成 anchor

为了基于训练好的权重建立一个深度学习小麦病害检测系统,我们可以使用 YOLOv8 模型来实现。这个系统将能够识别并标注出图像中的小麦病害类型。以下是构建该系统的详细步骤。

一、准备环境

确保你已经安装了必要的依赖库:

pip install ultralytics opencv-python numpy flask

二、数据组织与模型加载

假设你的训练数据集和验证数据集已经被正确标注,并且你已经有了训练好的 YOLOv8 权重文件(例如 best.pt)。我们将使用这些权重来初始化我们的检测系统。

三、构建检测系统

1. 单张图片的推理

下面是一个简单的 Python 脚本示例,用于加载训练好的模型并对单张图片进行推理:

from ultralytics import YOLO
import cv2

# 加载训练好的模型
model = YOLO('runs/train/exp/weights/best.pt')  # 替换为你自己的路径

def detect_image(image_path):
    # 推理
    results = model(image_path)
    
    # 获取绘制后的图像
    annotated_image = results[0].plot()
    
    # 显示结果
    cv2.imshow("Wheat Disease Detection", annotated_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == "__main__":
    image_path = 'test_images/wheat_leaf_001.jpg'  # 替换为你要测试的图片路径
    detect_image(image_path)
2. 视频流实时检测

如果你想对视频流或摄像头进行实时检测,可以使用以下代码:

def detect_video(source=0):
    cap = cv2.VideoCapture(source)
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        results = model(frame)
        annotated_frame = results[0].plot()

        cv2.imshow("Real-time Wheat Disease Detection", annotated_frame)
        if cv2.waitKey(1) == 27:  # ESC键退出
            break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    detect_video()  # source=0 表示摄像头,source='video.mp4' 表示视频文件
3. 批量图像检测

如果你想对一批图像进行批量处理,可以参考以下代码:

import os

image_folder = 'test_images/'
output_folder = 'output/'

os.makedirs(output_folder, exist_ok=True)

for img_file in os.listdir(image_folder):
    if img_file.endswith('.jpg') or img_file.endswith('.png'):
        img_path = os.path.join(image_folder, img_file)
        results = model(img_path)
        annotated_img = results[0].plot()
        output_path = os.path.join(output_folder, img_file)
        cv2.imwrite(output_path, annotated_img)

print("✅ Batch detection completed, results saved to output/")

四、构建 Web API

如果你希望将系统封装为远程服务接口,可以使用 Flask 构建 RESTful API。

文件名:app.py
from flask import Flask, request, jsonify
import base64
import numpy as np
import cv2
from ultralytics import YOLO

app = Flask(__name__)
model = YOLO('runs/train/exp/weights/best.pt')

@app.route('/detect', methods=['POST'])
def detect():
    data = request.json.get("image")  # base64编码的图像
    img_bytes = base64.b64decode(data)
    img_np = np.frombuffer(img_bytes, dtype=np.uint8)
    img = cv2.imdecode(img_np, flags=1)

    results = model(img)
    annotated_img = results[0].plot()

    _, buffer = cv2.imencode('.jpg', annotated_img)
    response_data = base64.b64encode(buffer).decode('utf-8')
    
    return jsonify({"result_image": response_data})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

五、

目标 建议
本地运行 Python 脚本直接运行
打包成exe 使用 pyinstaller
边缘设备部署 导出 ONNX/TensorRT 并部署在 Jetson 等设备上
服务器部署 使用 Flask/Django 构建 API 服务

六、进阶功能

功能 实现方式
🎯 病害面积估算 根据 bounding box 大小估算
📊 日志记录 记录每次检测时间、位置、结果
📡 RTSP 流媒体支持 支持网络摄像头接入
📈 统计图表 使用 Dash 或 Streamlit 展示检测统计结果

通过以上步骤,你可以构建一个基于 YOLOv8 的小麦病害检测系统。该系统不仅能识别并标注图像中的病害类型,还能根据需要扩展为实时监控系统或提供Web服务接口。=


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐