如何使用yolov8训练使用—小麦病害数据集 小麦病害检测数据集 目标检测 12类 899张(也可以数据增强),8_1_1比例划分 可以直接用于模型训练 YOLO适用的txt格式

小麦 病害检测数据集 nc=12在这里插入图片描述

0: Crown and Root Rot 根冠腐烂
1: Leaf Rust 叶锈病
2: HealthyWheat 健康小麦
3: Wheat Loose Smut 小麦散斑,又名小麦黑穗病
4: Powdery Mildew 小麦白粉病
5: Wheat cyst nematode 小麦孢囊线虫病
6: Wheat scab 小麦赤霉病
7: Wheat Red Spider 小麦红蜘蛛
8: Wheat stalk rot 小麦茎基腐
9: Wheat Take-all 小全蚀病
10: wheat sharp eyespot 小麦纹枯病
11: Wheat Aphids 小麦蚜虫病

共899张(也可以数据增强),8:1:1比例划分,(train:719张,val:90张,test:90张。标注文件为YOLO适用的txt格式。可以直接用于模型训练。

【数据集背景】:在这里插入图片描述

小麦病害检测的研究背景主要关注于提高小麦产量和品质,保障粮食安全。传统的人工巡查耗时费力,且无法实时、精准地监测各类病害。基于目标检测的智能检测系统可以快速识别小麦的多种病害,如根冠腐烂、叶锈病和小麦白粉病等。这种方法不仅提升了检测效率,还能在病害初期采取防治措施,有效降低病害扩散,减少农药使用,促进小麦的健康生长,推动现代农业的发展。在这里插入图片描述
小麦病害检测数据集,并提供基于YOLOv8的训练代码。这个数据集包含899张图像,标注了12类检测目标。标注格式为YOLO格式,可以直接用于深度模型训练。

1. 数据集介绍

数据集目录结构

假设你的数据集已经准备好,并且分为训练集、验证集和测试集。数据集目录结构如下:

wheat_disease_dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
├── labels/
│   ├── train/
│   ├── val/
│   └── test/
└── data.yaml
数据集标注格式

YOLO格式的标注文件是TXT文件,每行表示一个目标,格式如下:

class_id center_x center_y width height

其中:

  • class_id 是类别的索引(从0开始)。
  • center_xcenter_y 是目标框中心点的归一化坐标。
  • widthheight 是目标框宽度和高度的归一化值。

2. 数据集配置文件 (data.yaml)

创建一个data.yaml文件,配置数据集的路径和类别信息:

path: ./wheat_disease_dataset  # 数据集路径
train: images/train  # 训练集图像路径
val: images/val  # 验证集图像路径
test: images/test  # 测试集图像路径

nc: 12  # 类别数
names: 
  - Crown and Root Rot  # 根冠腐烂
  - Leaf Rust  # 叶锈病
  - HealthyWheat  # 健康小麦
  - Wheat Loose Smut  # 小麦散斑,又名小麦黑穗病
  - Powdery Mildew  # 小麦白粉病
  - Wheat cyst nematode  # 小麦孢囊线虫病
  - Wheat scab  # 小麦赤霉病
  - Wheat Red Spider  # 小麦红蜘蛛
  - Wheat stalk rot  # 小麦茎基腐
  - Wheat Take-all  # 小全蚀病
  - wheat sharp eyespot  # 小麦纹枯病
  - Wheat Aphids  # 小麦蚜虫病

3. 训练脚本 (train.py)

from ultralytics import YOLO

def train_model(data_yaml_path, model_config, epochs, batch_size, img_size, augment):
    # 加载模型
    model = YOLO(model_config)

    # 训练模型
    results = model.train(
        data=data_yaml_path,
        epochs=epochs,
        batch=batch_size,
        imgsz=img_size,
        augment=augment
    )

    # 保存模型
    model.save("runs/train/wheat_disease/best.pt")

if __name__ == "__main__":
    data_yaml_path = 'wheat_disease_dataset/data.yaml'
    model_config = 'yolov8n.yaml'  # 你可以选择不同的YOLOv8模型配置,如yolov8s.yaml, yolov8m.yaml等
    epochs = 100
    batch_size = 16
    img_size = 640
    augment = True

    train_model(data_yaml_path, model_config, epochs, batch_size, img_size, augment)

4. 预测脚本 (predict.py)

import cv2
import torch
from ultralytics import YOLO

def predict_image(image_path, model_path, img_size=640):
    # 加载模型
    model = YOLO(model_path)

    # 读取图像
    image = cv2.imread(image_path)
    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    # 进行预测
    results = model(image_rgb, size=img_size)

    # 处理预测结果
    for result in results:
        boxes = result.boxes.xyxy.cpu().numpy()
        scores = result.boxes.conf.cpu().numpy()
        labels = result.boxes.cls.cpu().numpy().astype(int)

        for box, score, label in zip(boxes, scores, labels):
            x1, y1, x2, y2 = map(int, box)
            class_name = [
                'Crown and Root Rot',
                'Leaf Rust',
                'HealthyWheat',
                'Wheat Loose Smut',
                'Powdery Mildew',
                'Wheat cyst nematode',
                'Wheat scab',
                'Wheat Red Spider',
                'Wheat stalk rot',
                'Wheat Take-all',
                'wheat sharp eyespot',
                'Wheat Aphids'
            ][label]
            color = (0, 255, 0) if label == 2 else (0, 0, 255)
            cv2.rectangle(image, (x1, y1), (x2, y2), color, 2)
            cv2.putText(image, f'{class_name} {score:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2)

    # 显示图像
    cv2.imshow('Prediction', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == "__main__":
    image_path = 'path_to_your_image.jpg'
    model_path = 'runs/train/wheat_disease/best.pt'
    predict_image(image_path, model_path)

5. 运行脚本

  1. 训练模型

    python train.py
    
  2. 进行预测

    python predict.py
    

6. 详细解释

数据集配置文件 (data.yaml)
  • path: 数据集的根目录路径。
  • train: 训练集图像的路径。
  • val: 验证集图像的路径。
  • test: 测试集图像的路径。
  • nc: 类别数。
  • names: 类别名称列表。
训练脚本 (train.py)
  1. 导入依赖项

    • from ultralytics import YOLO:导入YOLOv8模型。
  2. 定义训练函数

    • train_model:加载模型,设置训练参数,训练模型,并保存最佳模型。
  3. 主函数

    • 设置数据集路径、模型配置、训练参数等。
    • 调用train_model函数进行训练。
预测脚本 (predict.py)
  1. 导入依赖项

    • import cv2:导入OpenCV库。
    • import torch:导入PyTorch库。
    • from ultralytics import YOLO:导入YOLOv8模型。
  2. 定义预测函数

    • predict_image:加载模型,读取图像,进行预测,处理预测结果,并显示带有标注的图像。
  3. 主函数

    • 设置图像路径和模型路径。
    • 调用predict_image函数进行预测。

7. 注意事项

  1. 数据集路径:确保数据集路径正确,特别是data.yaml文件中的路径。
  2. 模型配置:可以选择不同的YOLOv8模型配置,如yolov8s.yaml, yolov8m.yaml等,根据你的计算资源和需求选择合适的模型。
  3. 图像大小img_size可以根据实际需求调整,通常使用640或1280。
  4. 数据增强augment参数控制是否启用数据增强,可以在训练过程中提高模型的泛化能力。

8. 数据增强

为了增加数据集的多样性,可以使用数据增强技术。YOLOv8在训练过程中默认支持多种数据增强方法,如随机裁剪、翻转、颜色抖动等。如果需要自定义数据增强,可以参考YOLOv8的文档进行配置。

总结

通过以上步骤,你可以构建一个基于YOLOv8模型的小麦病害检测系统。train.py用于训练模型,predict.py用于加载训练好的模型并进行预测。希望这些信息对你有帮助!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值