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

张开发
2026/5/21 14:57:28 15 分钟阅读
YOLOv8 模型进行目标检测训练 小麦叶片病害检测数据集 识别小麦5类病害的检测 建立基于深度学习的小麦病害检测系统
YOLOv8 模型进行目标检测训练 小麦叶片病害检测数据集 识别小麦5类病害的检测 建立基于深度学习的小麦病害检测系统文章目录 一、数据集概览 二、数据准备与组织结构✅ 1. 数据目录结构建议✅ 2. 创建 data.yaml 文件️ 三、环境搭建 四、模型训练使用命令行进行训练参数说明 五、推理与结果展示✅ 单张图像推理✅ 视频流实时检测 六、性能评估 七、模型导出可选 八、推荐训练技巧一、准备环境二、数据组织与模型加载三、构建检测系统1. 单张图片的推理2. 视频流实时检测3. 批量图像检测四、构建 Web API文件名app.py五、六、进阶功能以下文字及代码仅供参考学东西。小麦叶片病害检测数据集5类类别名字分别是:叶锈病、健康、散黑穗病、黄锈病、秆锈病[‘Wheat Brown-rust’, ‘Wheat Healthy’, ‘Wheat Smut’, ‘Wheat-Yellow-rust’, ‘wheat Stem Rust’]图像是1547张其中训练集是1164张验证集测是218张、测试集165张1mAP50 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:5names:[Wheat Brown-rust,Wheat Healthy,Wheat Smut,Wheat-Yellow-rust,wheat Stem Rust]⚠️ 注意类名大小写要统一YOLO 对类别名称大小写敏感建议与标注一致。️ 三、环境搭建安装 Ultralytics YOLOv8 环境# 克隆仓库gitclone https://github.com/ultralytics/ultralytics.gitcdultralytics# 安装依赖pipinstall-rrequirements.txt 四、模型训练使用命令行进行训练yolo traindatadata.yamlmodelyolov8s.ptepochs100batch16imgsz640参数说明参数含义data数据集配置文件路径model使用的预训练模型权重如 yolov8n/s/m/l/xepochs总训练轮次batch批大小根据显存调整imgsz输入图像尺寸默认640x640如果你有 GPU 支持可以自动使用 CUDA 加速训练过程。 五、推理与结果展示✅ 单张图像推理fromultralyticsimportYOLO# 加载最佳模型modelYOLO(runs/train/exp/weights/best.pt)# 推理单张图像resultsmodel(test_images/wheat_leaf_001.jpg)# 显示结果forrinresults:print(r.boxes)# 输出预测框信息annotated_imgr.plot()cv2.imshow(Detection,annotated_img)cv2.waitKey(0)✅ 视频流实时检测defdetect_video(source0):capcv2.VideoCapture(source)whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotated_frameresults[0].plot()cv2.imshow(Real-time Wheat Disease Detection,annotated_frame)ifcv2.waitKey(1)27:# ESC键退出breakcap.release()cv2.destroyAllWindows() 六、性能评估使用验证命令评估 mAP、Recall、Precision 等指标yolo valdatadata.yamlmodelruns/train/exp/weights/best.ptimgsz640输出包括mAP0.5mAP0.5:0.95Precision / Recall 曲线F1-score 七、模型导出可选将模型导出为 ONNX、TensorRT 或 OpenVINO 等格式以便部署yoloexportmodelruns/train/exp/weights/best.ptformatonnx支持格式onnx,engine,coreml,tflite,pb,pt等 八、推荐训练技巧技巧说明数据增强使用 Mosaic、HSV、Flip 提高泛化能力多尺度训练--multi-scale可提升小目标检测效果类别不平衡处理黄锈病/秆锈病样本可能较少建议使用 focal loss 或重采样策略自定义锚框如果某些病害分布特殊可重新聚类生成 anchor为了基于训练好的权重建立一个深度学习小麦病害检测系统我们可以使用YOLOv8模型来实现。这个系统将能够识别并标注出图像中的小麦病害类型。以下是构建该系统的详细步骤。一、准备环境确保你已经安装了必要的依赖库pipinstallultralytics opencv-python numpy flask二、数据组织与模型加载假设你的训练数据集和验证数据集已经被正确标注并且你已经有了训练好的 YOLOv8 权重文件例如best.pt。我们将使用这些权重来初始化我们的检测系统。三、构建检测系统1. 单张图片的推理下面是一个简单的 Python 脚本示例用于加载训练好的模型并对单张图片进行推理fromultralyticsimportYOLOimportcv2# 加载训练好的模型modelYOLO(runs/train/exp/weights/best.pt)# 替换为你自己的路径defdetect_image(image_path):# 推理resultsmodel(image_path)# 获取绘制后的图像annotated_imageresults[0].plot()# 显示结果cv2.imshow(Wheat Disease Detection,annotated_image)cv2.waitKey(0)cv2.destroyAllWindows()if__name____main__:image_pathtest_images/wheat_leaf_001.jpg# 替换为你要测试的图片路径detect_image(image_path)2. 视频流实时检测如果你想对视频流或摄像头进行实时检测可以使用以下代码defdetect_video(source0):capcv2.VideoCapture(source)whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotated_frameresults[0].plot()cv2.imshow(Real-time Wheat Disease Detection,annotated_frame)ifcv2.waitKey(1)27:# ESC键退出breakcap.release()cv2.destroyAllWindows()if__name____main__:detect_video()# source0 表示摄像头sourcevideo.mp4 表示视频文件3. 批量图像检测如果你想对一批图像进行批量处理可以参考以下代码importos image_foldertest_images/output_folderoutput/os.makedirs(output_folder,exist_okTrue)forimg_fileinos.listdir(image_folder):ifimg_file.endswith(.jpg)orimg_file.endswith(.png):img_pathos.path.join(image_folder,img_file)resultsmodel(img_path)annotated_imgresults[0].plot()output_pathos.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.pyfromflaskimportFlask,request,jsonifyimportbase64importnumpyasnpimportcv2fromultralyticsimportYOLO appFlask(__name__)modelYOLO(runs/train/exp/weights/best.pt)app.route(/detect,methods[POST])defdetect():datarequest.json.get(image)# base64编码的图像img_bytesbase64.b64decode(data)img_npnp.frombuffer(img_bytes,dtypenp.uint8)imgcv2.imdecode(img_np,flags1)resultsmodel(img)annotated_imgresults[0].plot()_,buffercv2.imencode(.jpg,annotated_img)response_database64.b64encode(buffer).decode(utf-8)returnjsonify({result_image:response_data})if__name____main__:app.run(host0.0.0.0,port5000)五、目标建议本地运行Python 脚本直接运行打包成exe使用pyinstaller边缘设备部署导出 ONNX/TensorRT 并部署在 Jetson 等设备上服务器部署使用 Flask/Django 构建 API 服务六、进阶功能功能实现方式 病害面积估算根据 bounding box 大小估算 日志记录记录每次检测时间、位置、结果 RTSP 流媒体支持支持网络摄像头接入 统计图表使用 Dash 或 Streamlit 展示检测统计结果通过以上步骤你可以构建一个基于 YOLOv8 的小麦病害检测系统。该系统不仅能识别并标注图像中的病害类型还能根据需要扩展为实时监控系统或提供Web服务接口。

更多文章