
精准农业和杂草管理自动化除草机器人、智能农业监控系统中如何使用深度学习YOLOV8模型训练农业杂草检测数据集文章目录杂草检测数据集信息表数据集概述类别标签及标注数量统计表数据集特点总结✅ 一、系统环境搭建CUDA Anaconda Python1. 确认 CUDA 驱动GPU 加速2. 安装 AnacondaPython 包管理器3. 创建 Python 虚拟环境4. 安装必要依赖✅ 二、数据集结构与 data.yaml 配置目录结构data.yaml 文件内容✅ 三、调用 YOLOv8 官方预训练模型进行训练✅ 四、推理代码单图 / 批量 / 视频1. 单张图像推理2. 批量图像推理3. 视频检测如无人机巡田视频4. 实时摄像头检测OpenCV✅ 五、模型评估验证集 测试集1. 在验证集上评估2. 在测试集上独立评估最终性能✅ 六、可视化与分析1. 使用中文标签显示2. 查看训练曲线✅ 七、模型导出ONNX / TensorRT / TFLite杂草检测数据集信息表数据集概述项目内容数据集名称杂草检测数据集总图像数量9,257 张标注格式YOLO 格式.txt、VOC 格式.xml目标类别数8 类应用场景杂草识别、农业监控、自动化除草系统类别标签及标注数量统计表类别编号英文标签中文名称标注数量实例数0shameplant含羞草2,7111crab-grass马唐草1,3362nut-grass香附子1,5813asthma-plant千根草1,5894hagonoy藿香蓟2,4805goatweed豚草1,4666dog’s-tongue狗舌草1,5407beggars-tick鬼针草1,424总计————14,128注标注数量为所有图像中各类目标的边界框总数。数据集特点总结✅多类别覆盖包含 8 种常见的杂草类型适用于精准农业和杂草管理。✅双格式支持 YOLO 和 VOC 两种主流标注格式便于不同模型架构的应用与训练。✅大规模数据9,257 张图像适合深度学习模型的训练和验证。✅高标注密度平均每张图像包含约1.53 个目标框14,128 ÷ 9,257有助于复杂场景下的目标检测任务。✅实际应用导向合用于开发自动化除草机器人、智能农业监控系统等。1使用 YOLOv8 训练 → 推理 → 评估 → 部署** 的完整全流程确保你可以快速上手并训练出高精度的杂草识别模型。✅ 一、系统环境搭建CUDA Anaconda Python1. 确认 CUDA 驱动GPU 加速nvidia-smi确保输出中显示 CUDA 版本 ≥ 11.8推荐 12.1如未安装请前往 NVIDIA 官网 安装对应驱动。2. 安装 AnacondaPython 包管理器前往 https://www.anaconda.com/products/distribution 下载并安装 AnacondaWindows / Linux / macOS。3. 创建 Python 虚拟环境# 创建名为 weed_detection 的环境conda create-nweed_detectionpython3.9# 激活环境conda activate weed_detection4. 安装必要依赖# 安装 PyTorch以 CUDA 11.8 为例pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118# 安装 YOLOv8 官方库pipinstallultralytics opencv-python numpy matplotlib tqdm scikit-learn pandas pillow# 可选TensorBoard 可视化pipinstalltensorboard# 验证 GPU 是否可用python-cimport torch; print(torch.cuda.is_available())# 应输出 True✅ 二、数据集结构与data.yaml配置目录结构weed_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml✅ 确保图像与.txt标注文件一一对应使用 YOLO 格式归一化坐标data.yaml文件内容# data.yamltrain:./weed_dataset/images/trainval:./weed_dataset/images/valtest:./weed_dataset/images/test# 类别数量nc:8# 英文类别名称必须与 label 文件中的 class ID 一致names:-shameplant# 含羞草-crab_grass# 马唐草-nut_grass# 香附子-asthma_plant# 千根草-hagonoy# 藿香蓟-goatweed# 豚草-dog_s_tongue# 狗舌草-beggars_tick# 鬼针草# 中文名称用于可视化names_zh:-含羞草-马唐草-香附子-千根草-藿香蓟-豚草-狗舌草-鬼针草⚠️ 注意类名中的-已替换为_避免路径或变量名错误所有标注文件.txt中的 class ID 必须从0到7顺序与names一致✅ 三、调用 YOLOv8 官方预训练模型进行训练由于杂草目标较小、形态相似建议使用YOLOv8m或YOLOv8l提升小目标检测能力。fromultralyticsimportYOLO# 加载官方预训练模型modelYOLO(yolov8m.pt)# 推荐使用中等模型# 开始训练resultsmodel.train(datadata.yaml,# 数据配置文件路径epochs150,# 训练轮数农业数据建议 100~200batch32,# 根据显存调整RTX 3090 可用 64imgsz640,# 图像尺寸提升小目标检测optimizerAdamW,# 更稳定优化器lr00.001,# 初始学习率weight_decay0.0005,momentum0.937,# 数据增强关键提升泛化augmentTrue,hsv_h0.015,hsv_s0.7,hsv_v0.4,degrees10.0,translate0.1,scale0.5,shear0.0,flipud0.0,fliplr0.5,mosaic1.0,mixup0.1,copy_paste0.1,# 对小目标特别有效# 正则化dropout0.2,label_smoothing0.05,# 缓解类别不平衡# 学习率调度cos_lrTrue,# 余弦退火# 保存与日志projectruns/train,nameweed_yolov8m,saveTrue,save_period10,exist_okFalse,# 缓存内存充足时开启cacheTrue)✅提示若显存不足改用yolov8s.pt或降低batch16copy_paste和mosaic对小目标检测至关重要可开启close_mosaic在最后 10 轮关闭 Mosaic 增强✅ 四、推理代码单图 / 批量 / 视频1. 单张图像推理fromultralyticsimportYOLOfromPILimportImage# 加载最佳模型modelYOLO(runs/train/weed_yolov8m/weights/best.pt)# 推理resultsmodel(test_field.jpg,conf0.3)# 显示结果forrinresults:im_arrayr.plot()# 绘制边界框和标签imImage.fromarray(im_array[...,::-1])# BGR to RGBim.show()2. 批量图像推理resultsmodel.predict(sourceweed_dataset/images/test,saveTrue,projectruns/detect,nameweed_test_results,conf0.3,imgsz640)print(批量推理完成)3. 视频检测如无人机巡田视频resultsmodel.predict(sourcefield_survey.mp4,saveTrue,projectruns/detect/video,nameweed_detection_video,conf0.3,imgsz640)print(视频检测完成)4. 实时摄像头检测OpenCVimportcv2 capcv2.VideoCapture(0)whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame,conf0.3)annotated_frameresults[0].plot()cv2.imshow(Weed Detection,annotated_frame)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()✅ 五、模型评估验证集 测试集1. 在验证集上评估metricsmodel.val(datadata.yaml,splitval,batch32,imgsz640,save_jsonFalse,projectruns/val,nameweed_eval)print(fmAP0.5:{metrics.box.map50:.4f})print(fmAP0.5:0.95:{metrics.box.map:.4f})print(fPrecision:{metrics.box.p:.4f})print(fRecall:{metrics.box.r:.4f})# 每类 APfori,nameinenumerate(model.names):print(f{name}(AP0.5):{metrics.box.ap[i]:.4f})2. 在测试集上独立评估最终性能# 使用 test split 进行最终性能评估test_metricsmodel.val(datadata.yaml,splittest,save_jsonTrue,nametest_final)print(fTest mAP0.5:{test_metrics.box.map50:.4f})print(fTest mAP0.5:0.95:{test_metrics.box.map:.4f})✅ 六、可视化与分析1. 使用中文标签显示# 修改模型类名显示为中文model.names[含羞草,马唐草,香附子,千根草,藿香蓟,豚草,狗舌草,鬼针草]resultsmodel(test_field.jpg)results[0].plot()# 显示中文标签2. 查看训练曲线tensorboard--logdirruns/train/weed_yolov8m✅ 七、模型导出ONNX / TensorRT / TFLite# 导出为 ONNX通用部署model.export(formatonnx,dynamicTrue,opset13,imgsz640)# 导出为 TensorRTNVIDIA GPU 加速model.export(formatengine,halfTrue,dynamicTrue)# 导出为 TFLite移动端model.export(formattflite,int8True)# 导出为 CoreMLiOSmodel.export(formatcoreml)