当前位置: 首页 > news >正文

使用YOLOv11实现水果类别检测:从数据到模型训练的全过程

项目背景

在日常生活中,水果的类别识别直接影响库存管理和质量控制。传统检测依赖人工,效率低下且主观。通过计算机视觉,我们可以自动化这个过程。YOLO系列模型以其速度和准确性闻名,这次我使用YOLOv11n进行训练,目标是检测31种水果类别,包括苹果、香蕉、橙子等。

数据集来源于公开来源,图像标注为YOLO格式,包含训练、验证和测试集。nc=31,names包括’fresh_apple’到’rotten_tomato’等。
在这里插入图片描述

方法步骤

  1. 数据准备:数据集已准备好,包含标注图像。

在这里插入图片描述

  1. 模型训练:使用训练脚本,配置YOLO数据。训练参数:epochs=50, batch=16, imgsz=640。

    以下是训练脚本的主要代码:

    from ultralytics import YOLO
    import os
    import glob
    import torchdef main():model = YOLO('models/yolo11n.pt')yaml_path = 'data/data.yaml'results = model.train(data=yaml_path, epochs=50, batch=16, imgsz=640, name='yolo11n_fruit', project='fruit_results')print("Training completed. Results saved in:", results.save_dir)if __name__ == '__main__':main()
    

    训练命令:python train_fire_smoke_tassel.py

    结果保存在fruit_results/yolo11n_fruit_20250716_210401

在这里插入图片描述

  1. 模型验证:使用test_saved_model.py验证,加载best.pt模型。

    以下是验证脚本的主要代码:

    from ultralytics import YOLO
    import os
    import globdef main():yaml_path = 'data/data.yaml'results_dir = 'fruit_results'latest_run = max(glob.glob(os.path.join(results_dir, 'yolo11n_fruit_*')), key=os.path.getmtime)model_path = os.path.join(latest_run, 'weights', 'best.pt')model = YOLO(model_path)metrics = model.val(data=yaml_path)print(f"Validation metrics: {metrics}")if __name__ == '__main__':main()
    

    关键指标:

    • mAP50: 0.709
    • mAP50-95: 0.421
    • Precision: 0.675
    • Recall: 0.715

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果分析

在这里插入图片描述

模型在验证集上表现不错,mAP50达0.709,表示中等难度下的检测准确。Recall较高,意味着漏检少,适合实际应用。但mAP50-95较低,说明小目标或复杂背景需优化。

预测示例:

在这里插入图片描述

未来改进

  • 增加数据增强,提升鲁棒性。
  • 尝试更大模型如YOLOv11m。
  • 部署到移动端,实现实时检测。
http://www.lryc.cn/news/590741.html

相关文章:

  • 每日钉钉API探索:getAuthCode实现免登授权
  • 测试工作中的质量门禁管理
  • Maven入门指南:生命周期、阶段和执行顺序详解
  • 基于FPGA的IIC控制EEPROM读写(1)
  • 项目流程管理系统使用建议:推荐13款
  • 华为OD机试_2025 B卷_完美走位(Python,100分)(附详细解题思路)
  • ES组合使用must与should时的注意事项
  • 【LeetCode刷题指南特别篇】--移除链表元素,调试技巧,链表分割
  • Linux4:线程
  • TRAE + Milvus MCP:用自然语言 0 门槛玩转向量数据库
  • OpenVela之 Arch Timer 驱动框架使用指南
  • UltraISO编辑ISO文件
  • Karate(Java)接口自动化测试框架
  • 二刷 黑马点评 分布式锁-redission
  • 基于Canal实现MySQL数据库数据同步
  • Alamofire 网络请求全流解析,通俗易懂
  • ai 编程工具,简单总结
  • Python脚本批量修复文件时间戳,根据文件名或拍摄日期
  • 达梦数据库CASE_SENSITIVE大小写敏感差异比较
  • 字段级权限控制场景中,RBAC与ABAC的性能差异
  • 【机器学习【6】】数据理解:数据导入、数据审查与数据可视化方法论
  • [NOIP][C++] 树的重心
  • 嵌入式单片机开发实战指南: 从RISC-V到TinyML全栈技术
  • 筑牢网络安全防线:DDoS/CC 攻击全链路防护技术解析
  • 权限隔离设计中实现字段级别的动态隐藏
  • 工作第一步建立连接——ssh
  • 【JavaScript】从事件流到事件委托
  • 再探多线程Ⅰ--- (创建思路+核心方法+代码样例)
  • [Mysql] Connector / C++ 使用
  • 二分查找算法(一)