跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 YOLOv8 的无人机枸杞树病害检测数据集与训练方案

无人机枸杞树病害检测数据集包含 1539 张航拍 RGB 图像,分为健康作物与病害作物两类。数据按训练集 1083 张、验证集 304 张、测试集 152 张划分,采用 YOLO 标注格式。文章提供完整的 YOLOv8 训练配置,包括 data.yaml 文件编写、Python 训练脚本参数优化、命令行快速启动方式以及模型评估与推理代码。支持单图检测与批量报告生成,适用于智慧农业场景下的病虫害自动巡检任务。

接口猎人发布于 2026/4/5更新于 2026/10/25100 浏览
基于 YOLOv8 的无人机枸杞树病害检测数据集与训练方案

无人机枸杞树病害检测数据集

数据集概览

项目内容
数据集名称无人机枸杞树病害检测数据集
总图像数1,539 张(航拍 RGB 图像)
类别数量2 类
类别标签0: healthy(健康作物), 1: stressed(病害作物)
病害类型点片状发病区、连片扩散区、叶片卷曲、病斑面积占比高、初期病斑、局部黄化、大面积枯萎、组织坏死等
数据划分训练集(train):1,083 张;验证集(val):304 张;测试集(test):152 张
标注格式YOLO 格式(.txt 文件,归一化坐标)
兼容模型YOLOv5 / YOLOv6 / YOLOv8 / YOLOv11 等

类别信息

类别索引类别名称描述
0healthy(健康作物)表示没有受到病害影响的枸杞树区域。
1stressed(病害作物)包括点片状发病区、连片扩散区、叶片卷曲程度、病斑面积占比、初期病斑、局部黄化、大面积枯萎、组织坏死等多种病害情况。

目录结构(标准 YOLO 格式)

确保你的数据组织如下:

goji_blight_dataset/
├── images/
│   ├── train/ # 1083 张
│   ├── val/ # 304 张
│   └── test/ # 152 张
├── labels/
│   ├── train/ # 对应 .txt 标签
│   ├── val/
│   └── test/
└── data.yaml # 配置文件(必须)

data.yaml 配置文件

创建 goji_blight_dataset/data.yaml:

# goji_blight_dataset/data.yaml
train: ./images/train
val: ./images/val
test: ./images/test
nc: 2
names: ['healthy', 'stressed']

⚠️ 路径为相对路径,与训练脚本同级。

YOLOv8 完整训练代码(Python)

保存为 train_goji_blight.py:

# -*- coding: utf-8 -*-
"""
无人机枸杞树病害检测 - YOLOv8 训练脚本
支持:2 类目标检测(healthy / stressed)
"""
import os
from ultralytics import YOLO
import torch

# -----------------------------
# 1. 检查数据集路径是否存在
# -----------------------------
dataset_path = "goji_blight_dataset"
if not os.path.exists(dataset_path):
    raise FileNotFoundError(f"❌ 数据集路径 '{dataset_path}' 不存在!请检查目录结构。")

# -----------------------------
# 2. 自动选择设备(GPU/CPU)
# -----------------------------
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(f"🚀 使用设备:{device}")

# -----------------------------
# 3. 加载预训练 YOLOv8 模型
# -----------------------------
# 推荐使用 yolov8s(平衡速度与精度),若部署到边缘设备可用 yolov8n
model = YOLO('yolov8s.pt')  # 首次运行会自动下载权重

# -----------------------------
# 4. 开始训练(关键参数已优化)
# -----------------------------
results = model.train(
    # 数据配置
    data=os.path.join(dataset_path, 'data.yaml'),  # 指向 data.yaml
    # 训练参数
    epochs=100,  # 训练轮数(100 足够收敛)
    imgsz=1280,  # 输入图像尺寸(提升小病斑检出率)
    batch=16,  # 批大小(RTX 3060 可设 16~32)
    name='goji_yolov8s_1280',  # 实验名称,结果保存在 runs/detect/ 下
    device=device,
    # 数据增强(针对航拍作物图像定制)
    hsv_h=0.015,  # 色调扰动(模拟不同光照)
    hsv_s=0.7,  # 饱和度(应对绿/黄/枯色变化)
    hsv_v=0.5,  # 亮度(应对阴影/强光)
    degrees=10.0,  # 旋转 ±10°(模拟无人机偏航)
    translate=0.1,  # 平移 10%
    scale=0.5,  # 缩放(模拟飞行高度变化)
    mosaic=1.0,  # ✅ 必开!将小病斑拼接到新背景,提升召回率
    mixup=0.1,
    flipud=0.0,  # 不上下翻转(农田通常不倒置)
    fliplr=0.5,  # 左右翻转(合理)
    # 训练策略
    patience=20,  # 早停:20 轮验证损失无改善
    save_period=10,  # 每 10 轮保存一次 checkpoint
    workers=8,  # 数据加载线程数
    cache=False  # 若内存充足可设 True 加速训练
)
print("✅ 训练完成!")
print(f"📌 最佳模型路径:runs/detect/goji_yolov8s_1280/weights/best.pt")

命令行快速训练(可选)

yolo detect train \
data=goji_blight_dataset/data.yaml \
model=yolov8s.pt \
epochs=100 \
imgsz=1280 \
batch=16 \
name=goji_yolov8s_1280 \
device=0

模型评估(测试集性能)

# evaluate_model.py
from ultralytics import YOLO

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

# 在测试集上评估
metrics = model.val(
    data='goji_blight_dataset/data.yaml',
    split='test'  # 指定使用 test 集
)

# 打印关键指标
print("📊 测试集评估结果:")
print(f" [email protected] : {metrics.box.map50:.4f}")
print(f" [email protected]:0.95: {metrics.box.map:.4f}")
print(f" Precision : {metrics.box.mp:.4f}")
print(f" Recall : {metrics.box.mr:.4f}")

💡 预期性能:[email protected] > 0.85(高质量航拍数据集)Recall > 0.80(避免漏检病害区域)

推理脚本(单图 + 批量)

1. 单图推理并保存结果

# infer_single.py
from ultralytics import YOLO

model = YOLO('best.pt')  # 替换为你的 best.pt 路径

# 推理单张图像
results = model.predict(
    source='goji_field.jpg',  # 输入图像路径
    conf=0.3,  # 置信度阈值(病害检测可设低些)
    iou=0.45,  # NMS IoU 阈值
    save=True,  # 保存带框图像到 runs/detect/...
    show=False  # 不显示窗口
)
print("✅ 检测结果已保存!")

2. 批量处理并生成病害报告

# infer_batch_report.py
from ultralytics import YOLO
import os
import pandas as pd

model = YOLO('best.pt')
input_dir = 'field_images/'  # 待检测图像目录
output_dir = 'detected_results/'
os.makedirs(output_dir, exist_ok=True)
report = []

for img_name in os.listdir(input_dir):
    if img_name.lower().endswith(('.jpg', '.png', '.jpeg')):
        img_path = os.path.join(input_dir, img_name)
        results = model.predict(img_path, conf=0.3, save=True)
        for r in results:
            # 统计每张图的病害区域数量
            stressed_count = sum(1 for cls in r.boxes.cls if int(cls) == 1)
            healthy_count = len(r.boxes) - stressed_count
            report.append({
                'image': img_name,
                'healthy_regions': healthy_count,
                'stressed_regions': stressed_count,
                'total_detections': len(r.boxes)
            })

# 保存 CSV 报告
df = pd.DataFrame(report)
df.to_csv(os.path.join(output_dir, 'goji_health_report.csv'), index=False)
print(f"✅ 病害统计报告已生成:{output_dir}/goji_health_report.csv")

目录

  1. 无人机枸杞树病害检测数据集
  2. 数据集概览
  3. 类别信息
  4. 目录结构(标准 YOLO 格式)
  5. data.yaml 配置文件
  6. gojiblightdataset/data.yaml
  7. YOLOv8 完整训练代码(Python)
  8. -- coding: utf-8 --
  9. -----------------------------
  10. 1. 检查数据集路径是否存在
  11. -----------------------------
  12. -----------------------------
  13. 2. 自动选择设备(GPU/CPU)
  14. -----------------------------
  15. -----------------------------
  16. 3. 加载预训练 YOLOv8 模型
  17. -----------------------------
  18. 推荐使用 yolov8s(平衡速度与精度),若部署到边缘设备可用 yolov8n
  19. -----------------------------
  20. 4. 开始训练(关键参数已优化)
  21. -----------------------------
  22. 命令行快速训练(可选)
  23. 模型评估(测试集性能)
  24. evaluate_model.py
  25. 加载最佳模型
  26. 在测试集上评估
  27. 打印关键指标
  28. 推理脚本(单图 + 批量)
  29. 1. 单图推理并保存结果
  30. infer_single.py
  31. 推理单张图像
  32. 2. 批量处理并生成病害报告
  33. inferbatchreport.py
  34. 保存 CSV 报告

更多推荐文章

查看全部
  • npm 安装 OpenClaw 遇到 Git 错误及权限问题处理
  • iPad 端 Obsidian 结合 Gitee 实现 Git 同步实战
  • 华为 OD 机试:分割均衡字符串
  • 无线联邦学习:在保护隐私的无线网络中,让 AI 协同进化
  • GLM-4.7-Flash 本地 AI 编码助手部署指南
  • VSCode 集成 Copilot MCP 快速上手指南
  • 大模型实战:深入解析 LLaMA 核心算子 RMSNorm 开发
  • 分治算法实战:归并排序与数组逆序对详解
  • ZYNQ PS-PL 架构解析:ARM 与 FPGA 融合设计及通信机制
  • 生成式 AI 与大语言模型(LLM)原理简明教程
  • 英伟达与 GitHub 免费获取大模型 API Key 方法指南
  • Java 实体类为何不建议使用 is 前缀命名?以 is_deleted 为例
  • C++ 基础教程:从 Hello World 到变量类型
  • 高德地图离线部署方案:获取瓦片数据与私有化调用
  • Java Web 自研框架 18 年架构决策复盘与核心思路
  • GitHub Copilot Pro 学生免费认证与 VS Code 集成指南
  • 机器人动力学:牛顿欧拉法推导与详解
  • C++ 二叉搜索树 (BST) 详解:原理、核心操作与实战实现
  • Bing Webmaster 工具使用指南:站点验证与收录提交
  • 应届生无项目经验,求职碰壁该如何应对?

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online