YOLOv8 模型进行目标检测训练 小麦叶片病害检测数据集 识别小麦5类病害的检测 建立基于深度学习的小麦病害检测系统
本文介绍了一种基于YOLOv8模型的小麦叶片病害检测方法。数据集包含1547张图像,分为5类病害(叶锈病、健康、散黑穗病、黄锈病、秆锈病),并划分为训练集、验证集和测试集。文章详细说明了数据准备、环境搭建、模型训练和评估流程,包括数据目录结构、YAML配置文件、训练参数设置以及性能评估指标。同时提供了单张图像推理和实时视频检测的代码示例,并建议了数据增强、多尺度训练等优化技巧。该系统可帮助快速识别
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.5mAP@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服务接口。=
更多推荐
所有评论(0)