【项目文档+源码】基于YOLO12+Flask的石榴果实生长阶段检测系统 【项目文档源码】基于YOLO12Flask的石榴果实生长阶段检测系统本文涉及的全部源码、训练好的模型权重、数据集、配套文档已整理打包文末附下载链接方便读者一键复现与二次开发。开发目的本项目旨在开发一个基于YOLO12与Flask框架的石榴生长阶段检测系统其核心目的在于利用深度学习技术实现对石榴从花蕾期到成熟期五个关键生长阶段的自动识别与定位。选择该任务作为研究切入点是因为石榴生长阶段的精确判别对于智慧农业中的精准灌溉、施肥决策以及最佳采收期预测具有直接应用价值而传统人工巡检方式耗时费力且主观性强。该数据集包含5855张标注图像覆盖了花蕾期、开花期、生长初期的果实、生长中期果实和成熟期果实五类类别间形态差异显著尤其是花蕾与幼果尺寸较小对检测算法的小目标识别能力提出了较高要求。在技术路线选择上采用YOLO12作为检测模型其最新的网络结构在保持高实时性的同时通过改进的特征提取与融合机制增强了对多尺度目标的检测能力能够同时应对石榴生长过程中果实大小从数十像素到数百像素的变化且五分类任务对模型的多类别判别能力要求适中YOLO12的轻量化设计使其易于部署在边缘设备上。后端采用Flask框架构建RESTful API负责接收前端请求、调用模型推理并返回结果其简洁灵活的特性便于快速集成与扩展前端使用Layui搭建用户交互界面提供图像上传、实时视频流检测以及结果可视化展示功能三者结合实现了从模型训练到Web应用的全链路闭环。在系统验证方面本文将基于预留的测试集对模型性能进行多维度评估主要采用平均精度均值mAP0.5和mAP0.5:0.95作为检测精度的核心指标同时统计各类别的精确率与召回率以分析阶段间的混淆情况推理速度通过测量单张图像的处理时间及视频流的帧率FPS来量化以验证系统是否满足实时检测需求。此外还将通过不同光照条件、拍摄角度和果实遮挡程度的样本测试评估模型的鲁棒性。实际训练过程中模型在验证集上已达到mAP0.50.931的较好表现后续将在此基础上进一步优化部署性能确保系统在实际农业场景中的可用性。YOLO12 介绍YOLO12是由Ultralytics团队在2024年推出的新一代实时目标检测网络延续了YOLO系列高效、易用的设计理念并在精度与速度之间取得了更优的平衡。该版本的核心创新在于骨干网络Backbone的全面升级采用了名为Area AttentionAA的注意力骨干结构。AA注意力机制摒弃了传统全局自注意力中高昂的计算复杂度转而将特征图划分为若干局部区域在每个区域内独立计算注意力权重从而在保持感受野的同时大幅降低参数量和计算开销。更重要的是AA设计引入了梯度流优化策略通过残差连接与区域间信息交互使得梯度在深层网络中能够更顺畅地反向传播有效缓解了梯度消失问题训练更加稳定。参数效率方面AA注意力骨干在同等参数量下能够提取更丰富的语义特征尤其适合中小规模数据集避免过拟合的同时提升特征表达能力。在特征融合层Neck部分YOLO12沿用了经典的SPP空间金字塔池化与SPPF快速空间金字塔池化模块并结合PAN-FPN路径聚合特征金字塔网络结构进行多尺度特征融合。SPPF通过不同尺度的池化核提取多感受野特征而PAN-FPN则通过自顶向下和自底向上的双向路径将浅层细节信息与深层语义信息充分融合。对于石榴生长阶段检测数据集而言不同生长阶段的果实和花蕾在图像中尺度差异显著花蕾期和开花期的目标通常较小而成熟期果实可能占据较大面积。多尺度融合机制能够确保小目标如花蕾、幼果在浅层特征中得到保留同时大目标如成熟果实在深层特征中获得足够的语义信息从而提升模型对各类别目标的检测鲁棒性。检测头方面YOLO12采用了解耦检测头设计将分类分支与回归分支分离为两个独立的卷积子网络。这种设计避免了分类与回归任务之间的特征干扰使每个分支能够专注于自身任务的学习。分类分支关注目标类别的判别性特征回归分支则精确定位边界框的位置与尺寸。解耦头在训练时能够更高效地收敛同时在不增加过多计算量的前提下显著提升检测精度尤其适用于多类别且形态差异较大的石榴生长阶段检测任务。相较于YOLOv10和YOLOv11YOLO12在三个关键点上实现了突破性改进。第一骨干网络从CSPDarknet或ELAN结构升级为AA注意力骨干引入了区域注意力机制在保持轻量化的同时大幅提升了特征提取能力。第二Neck部分引入了更高效的跨尺度特征交互策略通过改进的PAN-FPN连接方式减少了信息丢失使得不同层级的特征融合更加充分。第三训练策略上采用了动态标签分配与更优的损失函数组合进一步提升了小目标与遮挡目标的检测效果。这些改进使得YOLO12在COCO等基准数据集上以更少的参数和计算量取得了超越前代版本的精度。本项目实际选型时综合考虑了检测精度、推理速度与模型复杂度。选择yolo12s.pt作为基础权重是因为s版本在参数量与性能之间取得了良好平衡既能够满足实时检测需求又不会因模型过大导致训练困难或过拟合。输入分辨率设定为640×640这是YOLO系列的标准分辨率能够覆盖石榴果实和花蕾的典型尺寸同时保持合理的计算开销。训练轮数设为200轮基于数据集规模约数千张图像与类别数5类的匹配关系200轮足以使模型充分收敛同时配合早停机制避免过拟合。实际训练过程中模型在验证集上的mAP在150轮左右趋于稳定200轮进一步微调了边界框回归精度最终获得了满意的检测效果。系统设计数据集本项目使用的数据集为真实场景下采集的石榴生长阶段检测数据集图像专用于石榴生长阶段检测数据集检测任务。数据图像来自实际现场拍摄覆盖了多种典型场景确保了数据的真实性与多样性。数据集共包含5855 张已标注图像具体划分为训练集4099 张图像验证集1170 张图像测试集586 张图像数据集共包含5 个检测类别{‘0’: ‘ripening fruit,’, ‘1’: ‘middle fruit,’, ‘2’: ‘flowering stage,’, ‘3’: ‘budding stage,’, ‘4’: ‘eraly fruit’}数据集各类别数目分布情况如下部分图像及标注如下图所示YOLO 在进行模型训练时会读取data.yaml文件中的训练集、验证集路径以及检测类别信息。本文数据集的data.yaml内容如下names:0:ripening fruit,#成熟期果实1:middle fruit,#生长中期果实2:flowering stage,#开花期3:budding stage,#花蕾期4:eraly fruit#生长初期的果实nc:5test:C:\Users\Youhaha\Desktop\dataset\POMEGRANATE_GROWTH_STAGE.v1i.yolov11\test\imagestrain:C:\Users\Youhaha\Desktop\dataset\POMEGRANATE_GROWTH_STAGE.v1i.yolov11\train\imagesval:C:\Users\Youhaha\Desktop\dataset\POMEGRANATE_GROWTH_STAGE.v1i.yolov11\val\images模型训练本文基于YOLO12进行模型训练。首先安装 Ultralyticspipinstallultralytics训练脚本基于YOLO类封装核心代码如下importosimportyamlimportsys root_pathstr(os.getcwd())train_pathroot_pathos.path.septrainos.path.sepimagesval_pathroot_pathos.path.sepvalos.path.sepimagestest_pathroot_pathos.path.septestos.path.sepimageswithopen(data.yaml,r,encodingutf-8)asf:configyaml.safe_load(f)config[train]train_path config[val]val_path config[test]test_pathwithopen(data.yaml,w,encodingutf-8)asf1:yaml.dump(config,f1)fromultralyticsimportYOLO modelYOLO(yolo12s.pt)model.train(datadata.yaml,batch32,epochs200,workers8,patience30)模型常用训练超参数说明epochs训练轮数本文设置为200batch批次大小本文设置为40imgsz输入图像尺寸本文设置为640optimizer优化器本文使用auto训练后评估模型训练完成后必须对其性能进行科学评估以判断其在实际应用中的可靠性。常用的评估指标包括精确率-召回率曲线PR曲线和平均精度mAP。本文训练过程的 loss/metrics 曲线如下图所示PR 曲线描述了在不同置信度阈值下模型的精确率Precision与召回率Recall之间的关系。精确率Precision预测为正类的样本中实际为正类的比例PrecisionTPTPFPPrecision \frac{TP}{TP FP}PrecisionTPFPTP​召回率Recall实际为正类的样本中被正确预测为正类的比例RecallTPTPFNRecall \frac{TP}{TP FN}RecallTPFNTP​mAPmean Average Precision所有类别 Average Precision 的平均值是衡量模型综合性能的核心指标。mAP0.5IoU 阈值为 0.5 时的 mAP反映较宽松匹配下的检测精度。mAP0.5:0.95IoU 阈值从 0.5 到 0.95 步进 0.05 的平均 mAP更严格反映高精度匹配下的整体表现。本文模型目标检测的mAP0.5 0.931mAP0.5:0.95 0.823Precision 0.918Recall 0.874。PR 曲线如下图所示混淆矩阵如下模型推理使用训练好的best.pt进行推理支持图片、视频和摄像头三种检测模式。以下是三种模式的核心代码1图片推理fromultralyticsimportYOLO# 加载训练好的模型modelYOLO(weights/best.pt)# 对图片进行推理resultsmodel(test.jpg)# 可视化检测结果并保存res_plottedresults[0].plot()importcv2 cv2.imwrite(result.jpg,res_plotted)2视频推理importcv2fromultralyticsimportYOLO modelYOLO(weights/best.pt)capcv2.VideoCapture(test.mp4)whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotatedresults[0].plot()cv2.imshow(YOLO Detection,annotated)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()3摄像头实时检测importcv2fromultralyticsimportYOLO modelYOLO(weights/best.pt)capcv2.VideoCapture(0)# 0 表示默认摄像头whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotatedresults[0].plot()cv2.imshow(Live Detection,annotated)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()系统 UI 设计系统UI设计采用前后端分离的架构后端基于Flask框架通过蓝图(Blueprint)将路由按功能模块划分为用户管理、检测任务、模型配置等独立单元每个蓝图注册在对应的URL前缀下如/api/user、/api/detect、/api/model。模型推理服务被封装为独立的Python类通过依赖注入方式注入到Flask应用上下文中推理过程在单独的线程或进程池中执行避免阻塞主线程。Flask路由仅负责接收请求、参数校验、调用推理服务并返回JSON响应实现了Web服务与模型推理的解耦。SQLite数据库通过Flask-SQLAlchemy管理每个蓝图对应的模型类如User、DetectionRecord、ModelConfig定义在独立的models模块中便于维护和扩展。前端基于Layui经典模块化框架使用其表格组件table渲染检测记录列表支持分页、排序和条件筛选表单组件form用于用户登录、注册及个人信息编辑配合内置验证规则确保输入合法性上传组件upload用于图片和视频文件的上传支持拖拽和多文件批量上传。前端通过Layui内置的jQuery发起AJAX请求与后端RESTful接口通信例如table.render的url属性直接指向/api/detect/recordsupload.render的done回调中调用$.ajax将文件ID提交至检测接口。所有接口返回统一格式的JSON{code:0,msg:成功,data:{...}}前端根据code值判断业务状态并在msg中展示提示信息。检测流程的交互实现遵循完整的时序用户通过Layui上传组件选择图片或视频文件前端调用/api/detect/upload接口获取文件存储路径和唯一ID随后自动或手动触发/api/detect/run接口携带文件ID和模型配置参数后端异步启动推理任务返回任务ID前端轮询/api/detect/status/{task_id}接口获取进度推理完成后后端返回结果JSON字段约定包括boxes边界框数组每个框包含x1,y1,x2,y2,confidence,class_id,class_name、image_width、image_height、duration等。前端利用Canvas绘制边界框根据image_width和image_height计算缩放比例在Canvas上绘制原始图片然后遍历boxes使用ctx.strokeRect绘制矩形框并调用ctx.fillText在框左上角显示类别和置信度。对于视频和摄像头实时检测前端通过WebSocket或定时轮询获取逐帧结果同样在Canvas上动态更新。部署与配置方面系统通过一个独立的config.py文件管理所有可调参数包括模型权重路径MODEL_PATH、推理设备DEVICEcuda或cpu、置信度阈值CONF_THRESHOLD、NMS阈值NMS_THRESHOLD以及数据库路径SQLALCHEMY_DATABASE_URI。启动时通过环境变量或命令行参数覆盖默认值例如export DEVICEcuda。模型权重文件放置在项目根目录下的models/文件夹中系统启动时自动加载。GPU/CPU切换通过检测torch.cuda.is_available()实现若配置为cuda但无GPU则回退至CPU并给出警告。关键配置项还包括上传文件大小限制MAX_CONTENT_LENGTH、允许的文件扩展名ALLOWED_EXTENSIONS以及日志级别LOG_LEVEL确保系统在不同环境下灵活适配。系统主界面如下图所示系统功能基于训练好的目标检测模型本系统具备以下核心功能1. 多模式检测支持图片上传检测单张/批量视频文件上传检测本地摄像头实时检测2. 可调节推理参数用户可动态调整置信度阈值conf用户可动态调整 IoU 阈值3. 可视化检测结果在图像/视频上绘制边界框和类别标签实时显示目标位置、目标总数、置信度、用时等信息4. 结构化结果输出表格展示每个检测目标的序号、类别、置信度和坐标统计每类目标的检测总数支持将检测结果保存为 CSV 文件5. 跨设备兼容自动判断是否支持 GPU优先使用 GPU 加速支持主流浏览器访问Chrome / Edge / Firefox总结本项目围绕石榴生长阶段检测任务构建了一套从数据标注到Web可视化的完整系统。在数据准备阶段对5855张图像进行了五类标注ripening fruit、middle fruit、flowering stage、budding stage、eraly fruit并转换为YOLO格式按4099/1170划分训练集与验证集。模型训练采用YOLO12s作为基础权重输入分辨率640×640batch size设为40优化器选择auto共训练200轮。训练完成后通过验证集评估模型性能并基于Flask框架搭建了Web检测系统支持图像上传、实时推理与结果可视化实现了从数据到部署的全流程闭环。从实际效果看模型在验证集上取得了Precision 0.918、Recall 0.874、mAP0.5 0.931、mAP0.5:0.95 0.823的指标整体表现良好尤其对成熟果实和开花阶段的检测较为稳定。然而训练与部署过程中也暴露出若干难点一是类别间易混淆例如“middle fruit”与“eraly fruit”在形态上过渡平滑部分样本标注边界模糊导致召回率略低于精度二是小目标检测存在短板如远距离拍摄的“budding stage”花蕾尺寸极小模型漏检率较高三是推理速度方面在CPU环境下单张图像耗时约1.2秒虽可通过GPU加速至毫秒级但部署在低算力设备时仍需优化。针对上述问题后续可从三个方向改进一是引入更丰富的数据增强策略如Mosaic、MixUp及随机裁剪提升模型对尺度变化和遮挡的鲁棒性二是尝试YOLO12m或YOLO12l等更大规模权重以增强特征提取能力尤其改善小目标检测效果三是采用TensorRT或ONNX Runtime进行模型量化与推理加速降低延迟满足实时性要求。随项目附带的源码文件结构说明随项目附带的设计说明书docx缩略图项目下载地址https://mbd.pub/o/bread/YZaTmppyZQ